#!/bin/bash bin="snag" libs="libcurl libcrypto" builddir="build" PREFIX="/usr" while [ "$1" ]; do case "$1" in -*) exit 1 ;; esac shift done CFLAGS=${CFLAGS:-""} CFLAGS_RELEASE="$CFLAGS -O2" CFLAGS_DEBUG="$CFLAGS -Wall -g -DDEBUG=1" write() { echo "$@" >> build.ninja; } echo "$CFLAGS_DEBUG $(pkg-config --cflags $libs)" | tr ' ' '\n' > compile_flags.txt rm -f build.ninja write "builddir = $builddir" write "libs = $(pkg-config --libs $libs)" write 'rule link' write ' description = LD $out' write ' command = gcc $libs $in -o $out' for target in $(echo "debug release"); do eval write "cflags_$target = \$CFLAGS_${target^^} $(pkg-config --cflags $libs)" write "rule cc-$target" write ' deps = gcc' write ' depfile = $out.d' write ' description = CC $out' write " command = gcc -MD -MF \$out.d \$cflags_$target -c \$in -o \$out" files="$(find . -name '*.c')" sedstr=$(printf 's,^\./\(.*\)\.c$,%s\/%s\/\\1.o,g' ${builddir} ${target}) ofiles=$(echo "$files" | sed ${sedstr}) for f in $files; do of=$(echo $f | sed ${sedstr}) write "build $of: cc-$target $f" done write "build $builddir/$target/$bin: link $(echo $ofiles)" write "build $target: phony $builddir/$target/$bin" done write "default release" echo "Wrote ./build.ninja file"