From ca52c5986e1158b651726da5cc89cea8adcfb49e Mon Sep 17 00:00:00 2001 From: speedie Date: Fri, 24 Mar 2023 15:28:42 +0100 Subject: [PATCH] add build script --- Makefile | 2 +- build.sh | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ host.mk | 9 ++-- toggle.mk | 2 +- 4 files changed, 142 insertions(+), 5 deletions(-) create mode 100755 build.sh diff --git a/Makefile b/Makefile index f6e0930..081f93b 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ clean: dist: clean mkdir -p spmenu-$(VERSION) - cp -rf LICENSE Makefile *.h *.mk *.c scripts/ docs/ libs/ PKGBUILD spmenu-$(VERSION) + cp -rf LICENSE Makefile *.h *.mk *.c scripts/ docs/ libs/ PKGBUILD build.sh spmenu-$(VERSION) [ -f spmenu.1 ] && cp spmenu.1 spmenu-$(VERSION) || : tar -cf spmenu-$(VERSION).tar spmenu-$(VERSION) gzip spmenu-$(VERSION).tar diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..5a55037 --- /dev/null +++ b/build.sh @@ -0,0 +1,134 @@ +#!/bin/bash +[ -z "$CC" ] && CC=gcc +[ -z "$PREFIX" ] && PREFIX="/usr" +[ -z "$INCDIR" ] && INCDIR="/usr/include" +[ -z "$OPT" ] && OPT="-O2" + +check_dist() { + [ -f "/etc/pacman.conf" ] && printf "hint: detected Pacman. if you want you can run 'makepkg' with proper arguments to install it using pacman.\n" && pacman=true + [ -f "/System/Library/CoreServices/SystemVersion.plist" ] && printf "hint: detected a Mac. Please report any issues you find as it is untested.\n" && mac=true + uname -a | grep -q OpenBSD && printf "hint: detected OpenBSD. Please report any issues you find as it is untested.\n" && openbsd=true +} + +check() { + [ ! -x "$(command -v ldconfig)" ] && printf "ldconfig not found in %s. Please make sure your system is set up properly." "\$PATH" && exit 1 + [ ! -x "$(command -v make)" ] && printf "make not found in %s. Please make sure your system is set up properly." "\$PATH" && exit 1 + [ ! -x "$(command -v $CC)" ] && printf "%s not found in %s. Please make sure your system is set up properly." "$CC" "\$PATH" + [ -n "$(ldconfig -p | grep Imlib2)" ] && printf "Imlib2 found\n" && imlib2=true || imlib2=false + [ -n "$(ldconfig -p | grep libXft)" ] && printf "libXft found\n" && xft=true || xft=false + [ -n "$(ldconfig -p | grep libX11)" ] && printf "libX11 found\n" && x11=true || x11=false + [ -n "$(ldconfig -p | grep libXrender)" ] && printf "libXrender found\n" && xrender=true || xrender=false + [ -n "$(ldconfig -p | grep libpango)" ] && printf "libpango found\n" && pango=true || pango=false + [ -n "$(ldconfig -p | grep libpangoxft)" ] && printf "libpangoxft found\n" && pangoxft=true || pangoxft=false + [ -n "$(ldconfig -p | grep libxcb-xinerama)" ] && printf "libxcb-xinerama found\n" && xinerama=true || xinerama=false + [ -n "$(ldconfig -p | grep libgnutls-openssl)" ] && printf "openssl found\n" && openssl=true || openssl=false + [ -n "$(ldconfig -p | grep fribidi)" ] && printf "fribidi found\n" && fribidi=true || fribidi=false + [ -n "$(ldconfig -p | grep freetype)" ] && printf "freetype found\n" && freetype=true || freetype=false +} + +loadconf() { + [ -x "buildconf" ] && source buildconf + + # mandatory deps + [ "$freetype" = "false" ] && printf "Freetype not found. Install it.\n" && exit 1 + [ "$openssl" = "false" ] && printf "OpenSSL not found. Install it.\n" && exit 1 + [ "$xrender" = "false" ] && printf "libXrender not found. Install it.\n" && exit 1 + [ "$x11" = "false" ] && printf "libX11 not found. Install it.\n" && exit 1 + [ "$xft" = "false" ] && printf "libXft not found. Install it.\n" && exit 1 +} + +build() { + # to be overriden + FREETYPEINC="$INCDIR/freetype2" + X11INC="/usr/X11R6/include" + X11LIB="/usr/X11R6/lib" + + # macOS + if [ "$mac" = "true" ]; then + INCDIR="/usr/local/include" + FREETYPEINC="$INCDIR/freetype2" + X11INC="/opt/X11/include" + X11LIB="/opt/X11/lib" + fi + + # openbsd + if [ "$openbsd" = "true" ]; then + INCDIR="$X11INC" + FREETYPEINC="$INCDIR/freetype2" + fi + + # xinerama + if [ "$xinerama" = "true" ]; then + xineramalib="-lXinerama" + xineramatoggle="-DXINERAMA" + fi + + # imlib2 + if [ "$imlib2" = "true" ]; then + imlib2libs="-lImlib2" + imlib2toggle="-DIMAGE" + fi + + # pango + if [ "$pango" = "true" ] && [ "$pangoxft" = "true" ]; then + pangoconf="pango" + pangoxftconf="pangoxft" + pangotoggle="-DPANGO" + fi + + # fribidi + if [ "$fribidi" = "true" ]; then + bdlibs="-lfribidi" + bdinc="$INCDIR/fribidi" + bdtoggle="-DRTL" + fi + + make clean + [ "$GEN_MANUAL" != "false" ] && make man + make \ + CC="$CC" \ + PREFIX="$PREFIX" \ + OPT="$OPT" \ + INCDIR="$INCDIR" \ + XINERAMALIBS="$xineramalib" \ + XINERAMATOGGLE="$xineramatoggle" \ + IMLIB2LIBS="$imlib2libs" \ + IMLIB2TOGGLE="$imlib2toggle" \ + PANGOCONF="$pangoconf" \ + PANGOXFTCONF="$pangoxftconf" \ + PANGOTOGGLE="$pangotoggle" \ + BDLIBS="$bdlibs" \ + BDINC="$bdinc" \ + BDTOGGLE="$bdtoggle" \ + FREETYPEINC="$freetypeinc" \ + X11LIB="$X11LIB" \ + X11INC="$X11INC" +} + +install() { + [ "$(id -u)" != "0" ] && printf "You must run this as root in order to install.\n" && exit 1 + make install \ + CC="$CC" \ + PREFIX="$PREFIX" \ + OPT="$OPT" \ + INCDIR="$INCDIR" \ + XINERAMALIBS="$xineramalib" \ + XINERAMATOGGLE="$xineramatoggle" \ + IMLIB2LIBS="$imlib2libs" \ + IMLIB2TOGGLE="$imlib2toggle" \ + PANGOCONF="$pangoconf" \ + PANGOXFTCONF="$pangoxftconf" \ + PANGOTOGGLE="$pangotoggle" \ + BDLIBS="$bdlibs" \ + BDINC="$bdinc" \ + BDTOGGLE="$bdtoggle" \ + FREETYPEINC="$freetypeinc" \ + X11LIB="$X11LIB" \ + X11INC="$X11INC" +} + +check_dist +check +loadconf +build +[ "$INSTALL" != "false" ] && install diff --git a/host.mk b/host.mk index 4df4eae..0997428 100644 --- a/host.mk +++ b/host.mk @@ -10,6 +10,7 @@ OPT = -O2 # paths PREFIX = /usr MANPREFIX = ${PREFIX}/share/man +INCDIR = /usr/include # library paths # @@ -20,7 +21,7 @@ X11LIB = /usr/X11R6/lib # freetype FREETYPELIBS = -lfontconfig -lXft -FREETYPEINC = /usr/include/freetype2 +FREETYPEINC = $(INCDIR)/freetype2 # xft XFTCONF = xft @@ -35,10 +36,12 @@ IMLIB2LIBS = -lImlib2 OPENSSLCONF = openssl # OpenBSD (uncomment) -#FREETYPEINC = $(X11INC)/freetype2 +#INCDIR = $(X11INC) +#FREETYPEINC = $(INCDIR)/freetype2 # macOS with XQuartz (uncomment) -#FREETYPEINC = /usr/local/include/freetype2 +#INCDIR = /usr/local/include +#FREETYPEINC = $(INCDIR)/freetype2 #X11INC = /opt/X11/include #X11LIB = /opt/X11/lib diff --git a/toggle.mk b/toggle.mk index 4cbf939..e8ffb49 100644 --- a/toggle.mk +++ b/toggle.mk @@ -10,7 +10,7 @@ XINERAMATOGGLE = -DXINERAMA # Right to left language support # Comment these lines if you don't need it. BDLIBS = -lfribidi -BDINC = /usr/include/fribidi +BDINC = $(INCDIR)/fribidi BDTOGGLE = -DRTL # Pango