From: Michael D. Lowis Date: Fri, 1 Feb 2019 15:30:39 +0000 (-0500) Subject: added fancy compiler wrapper script inspired by plan9port 9l script. Hard codes some... X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=4613485ef01366185da9583209737168af5d2108;p=projs%2Ftide.git added fancy compiler wrapper script inspired by plan9port 9l script. Hard codes some aggressive compiler flags and allows for automatic library dependency detection --- diff --git a/Makefile b/Makefile index f0bc54f..0c7384f 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +CC = ./acc INCS = -Iinc/ BINS = bin/tide bin/registrar bin/edit bin/fetch bin/pick MAN1 = docs/tide.1 diff --git a/acc b/acc new file mode 100755 index 0000000..da9c0d6 --- /dev/null +++ b/acc @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# predeclare our variables +declare -a objects +declare -a libpaths +compile=false +runtime=' +#define _POSIX_C_SOURCE 200809L +#define _XOPEN_SOURCE 700 +#define AUTOLIB(n) \ + int __autolib_##n __attribute__ ((weak));' + +# scan the rest of the options for lib paths, libs and objects +for i do + case "$i" in + *.[ao]) # Add objects and static libs to object list + objects+=("$i") ;; + + -L*) # Add libpaths to the search list + libpaths+=("${i#-L}") ;; + + -c) # Mark this as compilation only + compile=true ;; + esac +done + +# if we're compiling, generate the header, compile, and exit +if $compile; then + genfile=$(mktemp) + printf '%s\n' "$runtime" > "$genfile" + cc -isystem "${genfile%/*}" -include "${genfile##*/}" --std=c99 -pedantic -Wall -Wextra -Werror "$@" + status=$? + rm "$genfile" + exit "$status" +fi + +# scan objects/libs for referenced libraries +scan_for_libs(){ + [[ $# -ne 0 ]] && nm "$@" | sed -n '/__autolib/ s/.*_\+autolib_// p' | sort -u +} + +# if we made it here, we must be linking. scan for dependencies +mapfile -t libraries < <(scan_for_libs "${objects[@]}") +cc "$@" "${libraries[@]/#/-l}" diff --git a/config.mk b/config.mk index 4be11ae..5c6e7d6 100644 --- a/config.mk +++ b/config.mk @@ -16,16 +16,13 @@ LIBS += -L/usr/X11/lib INCS += -I/usr/include/freetype2 # Compiler Setup -CC = cc -CFLAGS = -g -MMD $(INCS) -CFLAGS += --std=c99 -pedantic -CFLAGS += -Wall -Wextra -CFLAGS += -Werror +CC = ./acc +CFLAGS = -MMD $(INCS) CFLAGS += -Wno-missing-field-initializers -Wno-implicit-fallthrough # Linker Setup LD = $(CC) -LDFLAGS = $(LIBS) -lX11 -lXft -lfontconfig -lXinerama -lutil -lm +LDFLAGS = $(LIBS) # Archive Setup AR = ar diff --git a/inc/x11.h b/inc/x11.h index 131670f..79e3513 100644 --- a/inc/x11.h +++ b/inc/x11.h @@ -1,3 +1,9 @@ +/* library dependencies */ +AUTOLIB(X11) +AUTOLIB(Xinerama) +AUTOLIB(Xft) +AUTOLIB(fontconfig) + #include #include #include diff --git a/src/lib/buf.c b/src/lib/buf.c index a774a52..2bbc6d0 100644 --- a/src/lib/buf.c +++ b/src/lib/buf.c @@ -1,4 +1,3 @@ -#define _POSIX_C_SOURCE 200809L #include #include #include diff --git a/src/lib/job.c b/src/lib/job.c index 1f7e000..12ff105 100644 --- a/src/lib/job.c +++ b/src/lib/job.c @@ -1,4 +1,3 @@ -#define _POSIX_C_SOURCE 200809L #include #include #include diff --git a/src/lib/utf8.c b/src/lib/utf8.c index b20b9f4..19dd5ed 100644 --- a/src/lib/utf8.c +++ b/src/lib/utf8.c @@ -1,7 +1,6 @@ #include #include #include -#define __USE_XOPEN #include #include #include "config.h" diff --git a/src/term.c b/src/term.c index 6b27d9c..6b95256 100644 --- a/src/term.c +++ b/src/term.c @@ -1,7 +1,3 @@ -#define _DEFAULT_SOURCE -#define _BSD_SOURCE -#define _XOPEN_SOURCE 700 -#define _POSIX_C_SOURCE 20080 #define XINERAMA /* See LICENSE for license details. */ diff --git a/src/tide.c b/src/tide.c index 51579b6..3e92f25 100644 --- a/src/tide.c +++ b/src/tide.c @@ -1,5 +1,3 @@ -#define _POSIX_C_SOURCE 200809L -#define _XOPEN_SOURCE 700 #include #include #include diff --git a/tests/lib/buf.c b/tests/lib/buf.c index dafb918..13481e5 100644 --- a/tests/lib/buf.c +++ b/tests/lib/buf.c @@ -1,5 +1,3 @@ -#define _POSIX_C_SOURCE 200809L -#define _XOPEN_SOURCE 700 #include #include #include