#!/usr/bin/awk -f # TODO # custom compilers # allow overrides # compilation options # configuration options BEGIN { default_conf = "release" configs["debug"] = "-Og -g3" configs["release"] = "-Os -s -flto" } $1 == "default" { default_conf = $2 } $1 == "bin" { type[$2] = "bin" } $2 == "deps" { for (i = 3; i <= NF; i++) { deps[$i] = 1 depend[$1] = depend[$1] " " $i } } $2 == "cc" || $2 == "cxx" { for (i = 3; i <= NF; i++) { build[$i] = $2 need[$1, $i] = 1 } } END { print "#!/bin/sh" print "# this file is automatically generated by cconf; do not edit it by hand" print "set -e" print "error=false" printf "\n" print "printf 'Searching dependencies...\\n'" printf "for dep in" for (dep in deps) printf " %s", dep print "; do" print " if ! pkg-config \"$dep\"; then" print " printf 'Error: dependency %s not found\\n' \"$dep\"" print " error=true" print " fi" print "done" printf "\n" print "found=false" print "printf 'Selecting C compiler... '" print "for cc in \"$CC\" gcc clang; do" print " if which \"$cc\"; then" print " CC=$cc" print " BIN=$cc # may be overriden by $CXX later" print " found=true" print " break" print " fi" print "done" print "if ! $found; then" print " printf 'no GNU-style C compiler found.\\nYou may want to set $CC.\\n'" print " error=true" print "fi" printf "\n" print "found=false" print "printf 'Selecting C++ compiler... '" print "for cxx in \"$CXX\" g++ clang++; do" print " if which \"$cxx\"; then" print " CXX=$cxx" print " BIN=$cxx" print " found=true" print " break" print " fi" print "done" print "if ! $found; then" print " printf 'no GNU-style C++ compiler found.\\nYou may want to set $CXX.\\n'" print " error=true" print "fi" printf "\n" print "$error && exit 1" printf "\n" for (target in depend) { print "CFLAGS_DEPS_" target "=$(pkg-config --cflags" depend[target] ")" print "LDFLAGS_DEPS_" target "=$(pkg-config --cflags" depend[target] ")" } printf "\n" print "cat > build.ninja <