diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-10-14 10:21:30 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-11-08 13:35:37 +0100 |
| commit | 5f5699fb3a93f2a478f3888236f7c25bc7975fbb (patch) | |
| tree | 373a2d3435292caf91e307113525494a61d34e47 | |
| parent | 039042f2e323c1f982f1de61b702c88fb33d6ccb (diff) | |
| download | vis-5f5699fb3a93f2a478f3888236f7c25bc7975fbb.tar.gz vis-5f5699fb3a93f2a478f3888236f7c25bc7975fbb.tar.xz | |
Overhaul build system
Add separate per library {C,LD}FLAGS and use default values
from pkg-config to allow for finer control.
Disable pkg-config by setting PKG_CONFIG_PATH= PKG_CONFIG_LIBDIR=
Override flags completely by specifying them as arguments to make:
$ make CFLAGS_CURSES="your custom flags for curses"
Also introduce a new, experimental Makefile target standalone. It
tries to build a self contained statically linked vis binary. All
dependencies (musl, ncurses, termkey, lua, lpeg) are build from
source. Lua is patched to include lpeg as a statically built module.
| -rw-r--r-- | Makefile | 119 | ||||
| -rw-r--r-- | config.mk | 9 |
2 files changed, 122 insertions, 6 deletions
@@ -10,9 +10,31 @@ DEPS_BIN = $(DEPS_PREFIX)/bin DEPS_LIB = $(DEPS_PREFIX)/lib DEPS_INC = $(DEPS_PREFIX)/include +LIBMUSL = musl-1.1.12 +LIBMUSL_SHA1 = e098ce88e7dd4398c178240b4c380771c5b4fe6b + +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-256color,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 + all: vis config.h: @@ -50,6 +72,9 @@ install: vis @chmod 755 ${DESTDIR}${PREFIX}/bin/vis @cp -f vis-open ${DESTDIR}${PREFIX}/bin @chmod 755 ${DESTDIR}${PREFIX}/bin/vis-open + @echo installing support files to ${DESTDIR}${SHAREPREFIX} + @mkdir -p ${DESTDIR}${SHAREPREFIX} + @cp -r lexers ${DESTDIR}${SHAREPREFIX} @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1 @mkdir -p ${DESTDIR}${MANPREFIX}/man1 @sed "s/VERSION/${VERSION}/g" < vis.1 > ${DESTDIR}${MANPREFIX}/man1/vis.1 @@ -67,6 +92,48 @@ release: 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 $(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 $@ @@ -86,10 +153,56 @@ dependency/sources/install-libtermkey: dependency/sources/build-libtermkey make -C $(dir $<)/$(LIBTERMKEY) PREFIX=$(DEPS_PREFIX) install touch $@ -dependencies: dependency/sources/install-libtermkey +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 lua-5.1.4-lpeg.patch ] || wget http://www.brain-dump.org/projects/vis/lua-5.1.4-lpeg.patch) + cd $(dir $<)/$(LIBLUA) && patch -p1 < ../lua-5.1.4-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_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-Wl,-E -ldl -lncursesw" + 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_TERMKEY= LDFLAGS_TERMKEY=-ltermkey + CFLAGS="$(CFLAGS) -I$(DEPS_INC)" LDFLAGS="$(LDFLAGS) -L$(DEPS_LIB)" make @echo Run with: LD_LIBRARY_PATH=$(DEPS_LIB) ./vis -.PHONY: all clean dist install uninstall debug profile dependencies local +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 + +.PHONY: all clean dist install uninstall debug profile standalone dependencies dependencies-full directories @@ -24,14 +24,17 @@ endif PREFIX ?= /usr/local MANPREFIX = ${PREFIX}/share/man +SHAREPREFIX = ${PREFIX}/share/vis +CFLAGS_LUA = $(shell pkg-config --cflags lua5.1 2> /dev/null || echo "-I/usr/include/lua5.1") CFLAGS_TERMKEY = $(shell pkg-config --cflags termkey 2> /dev/null || echo "") CFLAGS_CURSES = $(shell pkg-config --cflags ncursesw 2> /dev/null || echo "-I/usr/include/ncursesw") +LDFLAGS_LUA = $(shell pkg-config --libs lua5.1 2> /dev/null || echo "-llua") LDFLAGS_TERMKEY = $(shell pkg-config --libs termkey 2> /dev/null || echo "-ltermkey") LDFLAGS_CURSES = $(shell pkg-config --libs ncursesw 2> /dev/null || echo "-lncursesw") -LIBS = -lc +LIBS = -lm -lc OS = $(shell uname) ifeq (${OS},Linux) @@ -55,8 +58,8 @@ else ifeq (${OS},AIX) CFLAGS += -D_ALL_SOURCE endif -CFLAGS_LIBS = $(CFLAGS_TERMKEY) $(CFLAGS_CURSES) -LDFLAGS_LIBS = $(LDFLAGS_TERMKEY) $(LDFLAGS_CURSES) $(LIBS) +CFLAGS_LIBS = $(CFLAGS_LUA) $(CFLAGS_TERMKEY) $(CFLAGS_CURSES) +LDFLAGS_LIBS = $(LDFLAGS_LUA) $(LDFLAGS_TERMKEY) $(LDFLAGS_CURSES) $(LIBS) CFLAGS_VIS = $(CFLAGS_LIBS) -std=c99 -Os -DVERSION=\"${VERSION}\" -DNDEBUG -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 LDFLAGS_VIS = $(LDFLAGS_LIBS) |
