aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-03-20 10:13:45 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-03-21 11:44:46 +0100
commit66015cde8cb421915553e273adc5917ce75a5e9b (patch)
tree65ff93570d4b4358fb649a6674b65770d37d9f8e /Makefile
parenta3ef0d1246f9f0d52f8e705efa7300d68dd81ac3 (diff)
downloadvis-66015cde8cb421915553e273adc5917ce75a5e9b.tar.gz
vis-66015cde8cb421915553e273adc5917ce75a5e9b.tar.xz
build: overhaul build system auto detect stuff using a configure script
The new build instructions are: $ ./configure && make && sudo make install The configure script tries to auto detect support for various libraries and compiler options. These choices can be overwritten by explicitly specifing --{en,dis}able-{lua,selinux,acl}. See ./configure --help for all supported options. The configure script generates config.mk which should allow portable (among GNU and BSD make) Makefiles. Manually editing config.mk is still supported.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile200
1 files changed, 30 insertions, 170 deletions
diff --git a/Makefile b/Makefile
index 8066823..7962195 100644
--- a/Makefile
+++ b/Makefile
@@ -1,61 +1,38 @@
-include config.mk
-
-# try to get a tag and hash first
-GITHASH = $(shell git log -1 --format='%h' 2>/dev/null)
-GITTAG = $(shell git describe --abbrev=0 --tags 2>/dev/null)
-ifneq ($(GITTAG),)
- # we have a tag and revcount from there
- GITREVCOUNT = $(shell git rev-list --count ${GITTAG}.. 2>/dev/null)
- VERSION = ${GITTAG}.r${GITREVCOUNT}.g${GITHASH}
-else ifneq ($(GITHASH),)
- # we have no tags in git, so just use revision count an hash for now
- GITREVCOUNT = $(shell git rev-list --count HEAD)
- VERSION = 0.r${GITREVCOUNT}.g${GITHASH}
-endif
-
-SRCDIR = $(realpath $(dir $(firstword $(MAKEFILE_LIST))))
-
-ALL = *.c *.h config.mk Makefile LICENSE README.md vis.1
-
-DEPS_ROOT = $(SRCDIR)/dependency/install
-DEPS_PREFIX = $(DEPS_ROOT)/usr
-DEPS_BIN = $(DEPS_PREFIX)/bin
-DEPS_LIB = $(DEPS_PREFIX)/lib
-DEPS_INC = $(DEPS_PREFIX)/include
-
-LIBMUSL = musl-1.1.14
-LIBMUSL_SHA1 = b71208e87e66ac959d0e413dd444279d28a7bff1
-
-LIBNCURSES = ncurses-6.0
-LIBNCURSES_SHA1 = acd606135a5124905da770803c05f1f20dd3b21c
-
-LIBTERMKEY = libtermkey-0.18
-LIBTERMKEY_SHA1 = 0a78ba7aaa2f3b53f2273268366fef349c9be4ab
-
-#LIBLUA = lua-5.3.1
-#LIBLUA_SHA1 = 1676c6a041d90b6982db8cef1e5fb26000ab6dee
-LIBLUA = lua-5.2.4
-LIBLUA_SHA1 = ef15259421197e3d85b7d6e4871b8c26fd82c1cf
-#LIBLUA = lua-5.1.5
-#LIBLUA_SHA1 = b3882111ad02ecc6b972f8c1241647905cb2e3fc
-
-LIBLPEG = lpeg-1.0.0
-LIBLPEG_SHA1 = 64a0920c9243b624a277c987d2219b6c50c43971
-
-LIBNCURSES_CONFIG = --disable-database --with-fallbacks=st,st-256color,xterm,xterm-256color,vt100 \
- --with-shared --enable-widec --enable-ext-colors --with-termlib=tinfo \
- --without-ada --without-cxx --without-cxx-binding --without-manpages --without-progs \
- --without-tests --without-progs --without-debug --without-profile \
- --without-cxx-shared --without-termlib --without--ticlib
+-include config.mk
+
+VERSION = $(shell git describe 2>/dev/null || echo "0.1.x")
+
+CONFIG_LUA ?= 1
+CONFIG_ACL ?= 0
+CONFIG_SELINUX ?= 0
+
+CFLAGS_STD ?= -std=c99 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DNDEBUG -Os
+LDFLAGS_STD ?= -lc
+
+CFLAGS_VIS = $(CFLAGS_AUTO) $(CFLAGS_TERMKEY) $(CFLAGS_CURSES) $(CFLAGS_ACL) \
+ $(CFLAGS_SELINUX) $(CFLAGS_LUA) $(CFLAGS_STD)
+
+CFLAGS_VIS += -DVERSION=\"${VERSION}\"
+CFLAGS_VIS += -DCONFIG_LUA=${CONFIG_LUA}
+CFLAGS_VIS += -DCONFIG_SELINUX=${CONFIG_SELINUX}
+CFLAGS_VIS += -DCONFIG_ACL=${CONFIG_ACL}
+
+LDFLAGS_VIS = $(LDFLAGS_AUTO) $(LDFLAGS_TERMKEY) $(LDFLAGS_CURSES) $(LDFLAGS_ACL) \
+ $(LDFLAGS_SELINUX) $(LDFLAGS_LUA) $(LDFLAGS_STD)
+
+DEBUG_CFLAGS_VIS = ${CFLAGS_VIS} -UNDEBUG -O0 -g -ggdb -Wall -Wextra -pedantic \
+ -Wno-missing-field-initializers -Wno-unused-parameter
+
+STRIP?=strip
+
all: vis
config.h:
cp config.def.h config.h
-vis: config.h config.mk *.c *.h
- @echo ${CC} ${CFLAGS} ${CFLAGS_VIS} *.c ${LDFLAGS} ${LDFLAGS_VIS} -o $@
- @${CC} ${CFLAGS} ${CFLAGS_VIS} *.c ${LDFLAGS} ${LDFLAGS_VIS} -o $@
+vis: config.h *.c *.h
+ ${CC} ${CFLAGS} ${CFLAGS_VIS} *.c ${LDFLAGS} ${LDFLAGS_VIS} -o $@
debug: clean
@$(MAKE) CFLAGS_VIS='${DEBUG_CFLAGS_VIS}'
@@ -103,121 +80,4 @@ uninstall:
@echo removing support files from ${DESTDIR}${SHAREPREFIX}
@[ ! -z "${SHAREPREFIX}" ] && rm -rf ${DESTDIR}${SHAREPREFIX}
-dependency/sources:
- mkdir -p $@
-
-dependency/sources/musl-%: | dependency/sources
- wget -c -O $@.part http://www.musl-libc.org/releases/$(LIBMUSL).tar.gz
- mv $@.part $@
- [ -z $(LIBMUSL_SHA1) ] || (echo '$(LIBMUSL_SHA1) $@' | sha1sum -c)
-
-dependency/sources/extract-libmusl: dependency/sources/$(LIBMUSL).tar.gz
- tar xzf $< -C $(dir $<)
- touch $@
-
-dependency/sources/configure-libmusl: dependency/sources/extract-libmusl
- cd $(dir $<)/$(LIBMUSL) && ./configure --prefix=$(DEPS_PREFIX) --syslibdir=$(DEPS_PREFIX)/lib
- touch $@
-
-dependency/sources/build-libmusl: dependency/sources/configure-libmusl
- $(MAKE) -C $(dir $<)/$(LIBMUSL)
- touch $@
-
-dependency/sources/install-libmusl: dependency/sources/build-libmusl
- $(MAKE) -C $(dir $<)/$(LIBMUSL) install
- touch $@
-
-dependency/sources/ncurses-%: | dependency/sources
- wget -c -O $@.part http://ftp.gnu.org/gnu/ncurses/$(LIBNCURSES).tar.gz
- mv $@.part $@
- [ -z $(LIBNCURSES_SHA1) ] || (echo '$(LIBNCURSES_SHA1) $@' | sha1sum -c)
-
-dependency/sources/extract-libncurses: dependency/sources/$(LIBNCURSES).tar.gz
- tar xzf $< -C $(dir $<)
- touch $@
-
-dependency/sources/configure-libncurses: dependency/sources/extract-libncurses
- cd $(dir $<)/$(LIBNCURSES) && ./configure --prefix=/usr --libdir=/usr/lib $(LIBNCURSES_CONFIG)
- touch $@
-
-dependency/sources/build-libncurses: dependency/sources/configure-libncurses
- $(MAKE) -C $(dir $<)/$(LIBNCURSES)
- touch $@
-
-dependency/sources/install-libncurses: dependency/sources/build-libncurses
- $(MAKE) -C $(dir $<)/$(LIBNCURSES) install.libs DESTDIR=$(DEPS_ROOT)
- touch $@
-
-dependency/sources/libtermkey-%: | dependency/sources
- wget -c -O $@.part http://www.leonerd.org.uk/code/libtermkey/$(LIBTERMKEY).tar.gz
- mv $@.part $@
- [ -z $(LIBTERMKEY_SHA1) ] || (echo '$(LIBTERMKEY_SHA1) $@' | sha1sum -c)
-
-dependency/sources/extract-libtermkey: dependency/sources/$(LIBTERMKEY).tar.gz
- tar xzf $< -C $(dir $<)
- touch $@
-
-dependency/sources/build-libtermkey: dependency/sources/extract-libtermkey
- # TODO no sane way to avoid pkg-config and specify LDFLAGS?
- sed -i 's/LDFLAGS+=-lncurses$$/LDFLAGS+=-lncursesw/g' $(dir $<)/$(LIBTERMKEY)/Makefile
- $(MAKE) -C $(dir $<)/$(LIBTERMKEY) PREFIX=$(DEPS_PREFIX) termkey.h libtermkey.la
- touch $@
-
-dependency/sources/install-libtermkey: dependency/sources/build-libtermkey
- $(MAKE) -C $(dir $<)/$(LIBTERMKEY) PREFIX=$(DEPS_PREFIX) install-inc install-lib
- touch $@
-
-dependency/sources/lua-%: | dependency/sources
- wget -c -O $@.part http://www.lua.org/ftp/$(LIBLUA).tar.gz
- mv $@.part $@
- [ -z $(LIBLUA_SHA1) ] || (echo '$(LIBLUA_SHA1) $@' | sha1sum -c)
-
-dependency/sources/extract-liblua: dependency/sources/$(LIBLUA).tar.gz
- tar xzf $< -C $(dir $<)
- touch $@
-
-dependency/sources/patch-liblua: dependency/sources/extract-liblua
- cd $(dir $<) && ([ -e $(LIBLUA)-lpeg.patch ] || wget http://www.brain-dump.org/projects/vis/$(LIBLUA)-lpeg.patch)
- cd $(dir $<)/$(LIBLUA) && patch -p1 < ../$(LIBLUA)-lpeg.patch
- touch $@
-
-dependency/sources/build-liblua: dependency/sources/patch-liblua dependency/sources/install-liblpeg
- $(MAKE) -C $(dir $<)/$(LIBLUA)/src all CC=$(CC) MYCFLAGS="-DLUA_COMPAT_5_1 -DLUA_COMPAT_5_2 -DLUA_COMPAT_ALL -DLUA_USE_POSIX -DLUA_USE_DLOPEN -fPIC" MYLIBS="-Wl,-E -ldl -lncursesw -lm"
- #$(MAKE) -C $(dir $<)/$(LIBLUA) posix CC=$(CC)
- touch $@
-
-dependency/sources/install-liblua: dependency/sources/build-liblua
- $(MAKE) -C $(dir $<)/$(LIBLUA) INSTALL_TOP=$(DEPS_PREFIX) install
- touch $@
-
-dependency/sources/lpeg-%: | dependency/sources
- wget -c -O $@.part http://www.inf.puc-rio.br/~roberto/lpeg/$(LIBLPEG).tar.gz
- mv $@.part $@
- [ -z $(LIBLPEG_SHA1) ] || (echo '$(LIBLPEG_SHA1) $@' | sha1sum -c)
-
-dependency/sources/extract-liblpeg: dependency/sources/$(LIBLPEG).tar.gz
- tar xzf $< -C $(dir $<)
- touch $@
-
-dependency/sources/build-liblpeg: dependency/sources/extract-liblpeg
- $(MAKE) -C $(dir $<)/$(LIBLPEG) LUADIR=../$(LIBLUA)/src CC=$(CC)
- touch $@
-
-dependency/sources/install-liblpeg: dependency/sources/build-liblpeg dependency/sources/extract-liblua
- cp $(dir $<)/$(LIBLPEG)/*.o $(dir $<)/$(LIBLUA)/src
- touch $@
-
-dependencies: dependency/sources/install-libtermkey dependency/sources/install-liblua dependency/sources/install-liblpeg
-
-dependencies-full: dependency/sources/install-libncurses dependencies
-
-local: dependencies
- CFLAGS="$(CFLAGS) -I$(DEPS_INC)" LDFLAGS="$(LDFLAGS) -L$(DEPS_LIB)" $(MAKE) CFLAGS_LUA= CFLAGS_TERMKEY= LDFLAGS_LUA="-llua -lm" LDFLAGS_TERMKEY=-ltermkey
- @echo Run with: LD_LIBRARY_PATH=$(DEPS_LIB) VIS_PATH=. ./vis
-
-standalone: dependency/sources/install-libmusl
- PATH=$(DEPS_BIN):$$PATH CC=musl-gcc PKG_CONFIG_PATH= PKG_CONFIG_LIBDIR= CFLAGS=-I$(DEPS_INC)/ncursesw $(MAKE) dependencies-full
- PATH=$(DEPS_BIN):$$PATH CC=musl-gcc PKG_CONFIG_PATH= PKG_CONFIG_LIBDIR= CFLAGS="--static -Wl,--as-needed -I$(DEPS_INC)/ncursesw" $(MAKE) CFLAGS_LIBS= debug
- @echo Run with: VIS_PATH=. ./vis
-
-.PHONY: all clean dist install uninstall debug profile standalone dependencies dependencies-full local
+.PHONY: all clean dist install uninstall debug profile