#!/usr/bin/env sh # simple and flexible configure script for people who don't like to waste time # licensed to the public domain set -e mkf=config.mk # these also apply to all libraries in external/ cflags='-std=c99' cppflags='-DLUA_USE_POSIX' ldflags='-lm' # utility functions present () { command -v "$1" 1>/dev/null 2>/dev/null } using () { printf "using $1\n" } throw () { >&2 printf "$(basename $0): $1\n" exit 1 } # generators ## C compiler gen_CC () { if ! [ -z "$cc" ]; then using "$cc" return 0 fi if present clang; then cc=clang elif present cc; then cc=cc elif present gcc; then cc=gcc else throw "C compiler not found, please acquire a copy of LLVM Clang or the GNU C compiler" fi using "$cc" } ## flags used in the compilation step gen_CFLAGS () { if [ -z "$debug" ]; then cflags="$cflags -O3" else cflags="$cflags -O0 -g" fi for flag in $cflags; do using "$flag" done } ## flags used in the linking step gen_LDFLAGS () { if pkg-config readline; then ldflags="$ldflags $(pkg-config --libs readline)" fi if present ld.lld; then ldflags="$ldflags -fuse-ld=lld" elif present ld.gold; then ldflags="$ldflags -fuse-ld=gold" fi [ -z "$debug" ] && ldflags="$ldflags -Wl,--gc-sections" for flag in $ldflags; do using "$flag" done } # command line interface while getopts c:dhr ch; do case "$ch" in c) cc="$OPTARG" ;; d) debug=1 ;; r) unset debug ;; h) cat <"$mkf"