diff options
| author | Drew DeVault <sir@cmpwn.com> | 2020-09-23 10:21:44 -0400 |
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2020-09-23 10:21:44 -0400 |
| commit | 61b84a77c09959bfe4d2cfa50d1fb4578cb5fc08 (patch) | |
| tree | eba662bb38cd29e54bb1b745ab2abca620b11495 /config.sh | |
| download | gmnisrv-61b84a77c09959bfe4d2cfa50d1fb4578cb5fc08.tar.gz gmnisrv-61b84a77c09959bfe4d2cfa50d1fb4578cb5fc08.tar.xz gmnisrv-61b84a77c09959bfe4d2cfa50d1fb4578cb5fc08.zip | |
Initial commit
Diffstat (limited to 'config.sh')
| -rw-r--r-- | config.sh | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/config.sh b/config.sh new file mode 100644 index 0000000..5f15de3 --- /dev/null +++ b/config.sh @@ -0,0 +1,176 @@ +outdir=${OUTDIR:-.build} +srcdir=${SRCDIR:-$(dirname "$0")} +AR=${AR:-ar} +AS=${AS:-as} +CC=${CC:-cc} +CFLAGS=${CFLAGS:-} +LD=${LD:-ld} +SCDOC=${SCDOC:-scdoc} + +for arg +do + # TODO: Add args for install directories + case "$arg" in + --prefix=*) + PREFIX=${arg#*=} + ;; + esac +done + +subdir() { + eval ". $srcdir/$1/configure" +} + +genrules() { + target="$1" + shift + printf '# Begin generated rules for %s\n' "$target" + for file in "$@" + do + ext="${file#*.}" + file="${file%.*}" + deps= + printf '%s.o: %s.%s%s\n' "$file" "$file" "$ext" "$deps" + done + printf '%s_objects=\\\n' "$target" + n=0 + for file in "$@" + do + file="${file%.*}" + n=$((n+1)) + if [ $n -eq $# ] + then + printf '\t%s.o\n' "$file" + else + printf '\t%s.o \\\n' "$file" + fi + done + printf '# End generated rules for %s\n' "$target" +} + +append_cflags() { + for flag + do + CFLAGS="$(printf '%s \\\n\t%s' "$CFLAGS" "$flag")" + done +} + +test_cflags() { + [ ! -e "$outdir"/check.c ] && cat <<-EOF > "$outdir"/check.c + int main(void) { return 0; } + EOF + werror="" + case "$CFLAGS" in + *-Werror*) + werror="-Werror" + ;; + esac + if $CC $werror "$@" -o /dev/null "$outdir"/check.c >/dev/null 2>&1 + then + append_cflags "$@" + else + return 1 + fi +} + +find_library() { + name="$1" + pc="$2" + printf "Checking for %s... " "$name" + if ! pkg-config "$pc" 2>/dev/null + then + printf "NOT FOUND\n" + printf "Tried pkg-config %s\n" "$pc" + return 1 + fi + printf "OK\n" + CFLAGS="$CFLAGS $(pkg-config --cflags "$pc")" + LIBS="$LIBS $(pkg-config --libs "$pc")" +} + +docs() { true; } + +run_configure() { + mkdir -p $outdir + + for flag in -g -std=c11 -D_XOPEN_SOURCE=700 -Wall -Wextra -Werror -pedantic + do + printf "Checking for %s... " "$flag" + if test_cflags "$flag" + then + echo yes + else + echo no + fi + done + + find_library OpenSSL libssl + find_library OpenSSL libcrypto + + printf "Checking for scdoc... " + if scdoc -v >/dev/null 2>&1 + then + echo yes + all="$all docs" + else + echo no + fi + + printf "Creating $outdir/config.mk... " + cat <<-EOF > "$outdir"/config.mk + CC=$CC + SCDOC=$SCDOC + LIBS=$LIBS + PREFIX=${PREFIX:-/usr/local} + OUTDIR=${outdir} + _INSTDIR=\$(DESTDIR)\$(PREFIX) + BINDIR?=${BINDIR:-\$(_INSTDIR)/bin} + LIBDIR?=${LIBDIR:-\$(_INSTDIR)/lib} + MANDIR?=${MANDIR:-\$(_INSTDIR)/share/man} + CACHE=\$(OUTDIR)/cache + CFLAGS=${CFLAGS} + CFLAGS+=-Iinclude -I\$(OUTDIR) + CFLAGS+=-DPREFIX='"\$(PREFIX)"' + CFLAGS+=-DLIBDIR='"\$(LIBDIR)"' + + all: ${all} + EOF + + for target in $all + do + $target >>"$outdir"/config.mk + done + echo done + + touch $outdir/cppcache + + if [ "$srcdir" = "." ] + then + return + fi + + populate() ( + path="$1" + mkdir -p "${path#$srcdir/}" + fullpath() ( cd "$1" && pwd ) + for orig in "$path"/* + do + link="${orig#$srcdir/}" + if [ -d "$orig" ] + then + mkdir -p $link + populate "$orig" + elif [ -f "$orig" ] + then + ln -sf "$(fullpath "$path")"/"$(basename "$orig")" "$link" + fi + done + ) + + printf "Populating build dir... " + populate "$srcdir/include" + populate "$srcdir/src" + populate "$srcdir/doc" + ln -sf "$srcdir"/Makefile ./ + echo done +} |
