callisto/configure

112 lines
1.8 KiB
Bash
Executable file

#!/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
# utility functions
present () {
command -v "$1" 1>/dev/null 2>/dev/null
}
using () {
printf "using $1\n"
}
error () {
>&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
error "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="-O2"
else
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="$(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 <<EOF
configure: create an optimised makefile for the current environment
options:
-c: force use of a particular compiler
-d: build in debug mode, with debug symbols enabled
-r: build in release mode with optimisation flags enabled (default)
-h: show this help message
EOF
exit 0
;;
?) exit 1 ;;
:) exit 1 ;;
esac
done
# creating the makefile
gen_CC
gen_CFLAGS
gen_LDFLAGS
printf '# generated by configure
_CC = %s
_CFLAGS = %s
_LDFLAGS =%s
' \
"$cc" \
"$cflags" \
"$ldflags"\
>"$mkf"