From 37caa3d71fd8bb4d0d9204e4a2f5cac234fa25fd Mon Sep 17 00:00:00 2001
From: Tavian Barnes <tavianator@tavianator.com>
Date: Mon, 29 Apr 2024 15:30:39 -0400
Subject: build: Replace `make config` with a `./configure` script

This lets us do more traditional out-of-tree builds like

    $ ../path/to/bfs/configure
    $ make

The .mk files are moved from ./config to ./build, mostly so that
./configure will auto-complete easily.
---
 configure | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)
 create mode 100755 configure

(limited to 'configure')

diff --git a/configure b/configure
new file mode 100755
index 0000000..6920212
--- /dev/null
+++ b/configure
@@ -0,0 +1,98 @@
+#!/bin/sh
+
+# Copyright © Tavian Barnes <tavianator@tavianator.com>
+# SPDX-License-Identifier: 0BSD
+
+# bfs build configuration script
+
+set -eu
+
+help() {
+    cat <<EOF
+Usage: $0 [-j<N>] [CC=...] [CFLAGS=...] [...]
+
+Compiler configuration:
+
+  CC
+      The C compiler to use
+  CPPFLAGS
+      C preprocessor flags
+  CFLAGS
+      C compiler flags
+  LDFLAGS
+      Linker flags
+  LDLIBS
+      Dynamic libraries to link
+
+  EXTRA_CPPFLAGS
+  EXTRA_CFLAGS
+  EXTRA_LDFLAGS
+  EXTRA_LDLIBS
+      Adds to the default flags, instead of replacing them
+
+Build profiles:
+
+  RELEASE=y
+      Enable optimizations, disable assertions
+  ASAN=y
+  LSAN=y
+  MSAN=y
+  TSAN=y
+  UBSAN=y
+      Enable sanitizers
+  GCOV=y
+      Enable code coverage instrumentation
+
+External dependencies:
+
+  PKG_CONFIG
+      The pkg-config binary to use
+
+  USE_LIBACL=[y|n]
+  USE_LIBCAP=[y|n]
+  USE_LIBSELINUX=[y|n]
+  USE_LIBURIG=[y|n]
+  USE_ONIGURUMA=[y|n]
+      Enable or disable external dependencies
+
+Packaging configuration:
+
+  PREFIX
+      Set the installation prefix (default: /usr)
+  MANDIR
+      Set the man page directory (default: \$PREFIX/share/man)
+EOF
+}
+
+for arg; do
+    case "$arg" in
+        --help)
+            help
+            exit 0
+            ;;
+        -*|*=*)
+            continue # make flag (-j2) or variable (CC=clang)
+            ;;
+        *)
+            printf 'error: Unrecognized option "%s"\n\n' "$arg" >&2
+            help >&2
+            exit 1
+            ;;
+    esac
+done
+
+# Get the relative path to the source tree based on how the script was run
+DIR=$(dirname -- "$0")
+
+# Set up symbolic links for out-of-tree builds
+for f in Makefile build completions docs src tests; do
+    test -e "$f" || ln -s "$DIR/$f" "$f"
+done
+
+# Infer -jN unless MAKEFLAGS is set
+j=
+if ! [ "${MAKEFLAGS+y}" ]; then
+    j="-j$({ nproc || sysctl -n hw.ncpu || getconf _NPROCESSORS_ONLN || echo 1; } 2>/dev/null)"
+fi
+
+${MAKE:-make} $j -rsf build/config.mk "$@"
-- 
cgit v1.2.3