#!/bin/bash libs=(luajit sdl2 pangoft2) CFLAGS+=(-std=c11 -fPIC) LDFLAGS+=(-shared) usage () { echo "Usage: $0 [-h|options...]"; } help () { cat </dev/null 2>&1; } check() { what=$1 shift for p do if exists "$p"; 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 pc=$(check '$PKG_CONFIG, pkg-config or pkg-conf' "$PKG_CONFIG" pkg-config pkg-conf) || exit for l in "${libs[@]}"; do "$pc" --print-errors --exists "$l" || exit done CFLAGS+=($("$pc" --cflags-only-other "${libs[@]}")) CPPFLAGS+=($("$pc" --cflags-only-I "${libs[@]}")) LDFLAGS+=($("$pc" --libs-only-L --libs-only-other "${libs[@]}")) LDLIBS+=($("$pc" --libs-only-l "${libs[@]}")) colour=auto while getopts B:C:L:P:c:dehovw opt; do case $opt in B) LDLIBS+=("$OPTARG");; C) CFLAGS+=("$OPTARG");; L) LDFLAGS+=("$OPTARG");; P) CPPFLAGS+=("$OPTARG");; c) colour="$OPTARG";; d) CFLAGS+=(-Og -g) LDFLAGS+=(-Og -g) ;; e) CFLAGS+=(-Werror);; h) usage; help; exit;; o) CFLAGS+=(-O2 -flto) LDFLAGS+=(-O2 -flto) ;; v) verbose=1;; w) CFLAGS+=(-Wall -Wextra);; ?) usage >&2; exit 1;; esac done if [[ $colour == auto && -t 1 ]]; then colour=always fi if [[ $colour == always ]]; then CFLAGS+=(-fdiagnostics-color) fi { echo "# generated using $0 $@" echo "CC=$CC" echo "CFLAGS=(${CFLAGS[@]@Q})" echo "CPPFLAGS=(${CPPFLAGS[@]@Q})" echo "LDFLAGS=(${LDFLAGS[@]@Q})" echo "LDLIBS=(${LDLIBS[@]@Q})" } >.config.rc [[ $verbose ]] && cat .config.rc