#!/bin/bash -e # Ensure variables from the config aren't set before the config is read to # avoid capturing transient state unset CC CFLAGS CPPFLAGS LDFLAGS LDLIBS colour debug optimise verbose warn werror CFLAGS=(-std=c11 -fPIC) wflags=( -Wall -Wcast-align -Wcast-qual -Wextra -Wpedantic -Wformat=2 -Winit-self -Wmissing-prototypes -Wpointer-arith -Wshadow -Wstrict-prototypes -Wsuggest-attribute=format -Wsuggest-attribute=noreturn ) declare -a CFLAGS CPPFLAGS LDFLAGS LDLIBS if [ -e config.rc ]; then redo-ifchange config.rc . ./config.rc else redo-ifcreate config.rc fi check() { what=$1 shift for p do if command -v "$p" >/dev/null 2>&1; then echo "$p" return fi done echo "$what not set or found" >&2 return 1 } CC=$(check '$CC, cc, gcc or clang' "$CC" cc gcc clang) || exit if [[ $colour ]]; then if [[ $colour != 1 ]]; then no=no-; fi CFLAGS+=("-f${no}diagnostics-colour") LDFLAGS+=("-f${no}diagnostics-colour") fi if [[ $debug ]]; then CFLAGS+=(-Og -g) LDFLAGS+=(-Og -g) fi if [[ $optimise ]]; then CFLAGS+=(-O2 -flto) LDFLAGS+=(-O2 -flto) fi if [[ $warn ]]; then CFLAGS+=("${warnings[@]}") fi if [[ $werror ]]; then CFLAGS+=(-Werror) fi { echo "# generated by $0" declare -p CC CFLAGS CPPFLAGS LDFLAGS LDLIBS } >"$3" if [[ $verbose ]]; then echo "# Configuration regenerated:" >&2 cat "$3" >&2 fi