#!/bin/sh set -eu prefix=/usr/local cc=${CC:-cc} make_cmd=${MAKE:-make} install_cmd=${INSTALL:-install} ar=${AR:-ar} version=$(sed -n 's/^#define ENSIFER_VERSION "\([^"]*\)"/\1/p' inc/enfilade.h) if [ -z "$version" ]; then echo "configure: ENSIFER_VERSION missing from inc/enfilade.h" >&2 exit 1 fi usage() { cat <<'EOF' Usage: ./configure [OPTIONS] Options: --prefix=PATH installation prefix (default: /usr/local) --prefix PATH -V, --version print configure version -h, --help show this help Environment overrides: CC, CFLAGS, CPPFLAGS, LDFLAGS, AR, INSTALL, MAKE EOF } while [ "$#" -gt 0 ]; do case $1 in --prefix=*) prefix=${1#*=} ;; --prefix) shift [ "$#" -gt 0 ] || { echo "configure: --prefix requires a path" >&2; exit 2; } prefix=$1 ;; -V|--version) printf 'configure version %s\n' "$version"; exit 0 ;; -h|--help) usage; exit 0 ;; *) echo "configure: unknown option: $1" >&2; usage >&2; exit 2 ;; esac shift done case $prefix in "") echo "configure: installation prefix cannot be empty" >&2; exit 2 ;; *' '*) echo "configure: paths containing spaces are not supported by make" >&2; exit 2 ;; esac command -v "$cc" >/dev/null 2>&1 || { echo "configure: C compiler not found: $cc" >&2; exit 1; } command -v "$make_cmd" >/dev/null 2>&1 || { echo "configure: make not found: $make_cmd" >&2; exit 1; } command -v "$install_cmd" >/dev/null 2>&1 || { echo "configure: install not found: $install_cmd" >&2; exit 1; } command -v "$ar" >/dev/null 2>&1 || { echo "configure: archiver not found: $ar" >&2; exit 1; } tmp=${TMPDIR:-/tmp}/ensifer-configure-$$ mkdir "$tmp" || exit 1 trap 'rm -rf "$tmp"' EXIT HUP INT TERM cat >"$tmp/conftest.c" <<'EOF' int ensifer_configure_probe(void) { return 0; } EOF if ! "$cc" ${CPPFLAGS:-} ${CFLAGS:-} -fPIC -shared -o "$tmp/conftest.so" "$tmp/conftest.c" ${LDFLAGS:-} >"$tmp/output" 2>&1; then cat "$tmp/output" >&2 echo "configure: compiler does not support building shared libraries with -fPIC -shared" >&2 exit 1 fi dl_flags= cat >"$tmp/dltest.c" <<'EOF' #include int main(void) { return dlopen(0, RTLD_NOW) == 0; } EOF if "$cc" ${CPPFLAGS:-} ${CFLAGS:-} -o "$tmp/dltest" "$tmp/dltest.c" -ldl ${LDFLAGS:-} >/dev/null 2>&1; then dl_flags='-DWITH_DL' dl_libs=-ldl else dl_libs= fi { echo "# Generated by ./configure; edit configure options instead." printf 'VERSION := %s\n' "$version" printf 'CC := %s\n' "$cc" printf 'AR := %s\n' "$ar" printf 'INSTALL := %s\n' "$install_cmd" printf 'PREFIX := %s\n' "$prefix" printf 'CFLAGS ?= %s\n' "${CFLAGS:--O2 -Wall -Wextra -std=c11}" printf 'CPPFLAGS ?= %s\n' "${CPPFLAGS:-}" printf 'LDFLAGS ?= %s\n' "${LDFLAGS:-}" printf 'S7_CPPFLAGS := %s -DWITH_SYSTEM_EXTRAS=0\n' "$dl_flags" printf 'S7_LIBS := %s\n' "$dl_libs" } > config.mk cat > config.h < config.log trap - EXIT HUP INT TERM rm -rf "$tmp" echo "configure: ready to build Ensifer $version" echo " prefix: $prefix" echo " run: make"