aboutsummaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure138
1 files changed, 138 insertions, 0 deletions
diff --git a/configure b/configure
new file mode 100755
index 0000000..86a4e0b
--- /dev/null
+++ b/configure
@@ -0,0 +1,138 @@
+#!/bin/sh -e
+
+die() {
+ printf '%s: %s\n' "${0##*/}" "$*" >&2
+ exit 1
+}
+
+out() { printf '%s\n' "$@" ;}
+
+usage() {
+ out "usage: $0 [options]" \
+ "Options:" \
+ " --prefix=dir Set prefix directory" \
+ " --bindir=dir Set directory where executables will be installed" \
+ " --manprefix=dir Set directory where manual pages will be installed" \
+ " --with-netcat=opt Whether to build netcat [yes,no,auto](default: auto)" \
+ " --with-less-t=opt Whether to build mandoc with 'less -T' tagfile support" \
+ " [yes,no,auto](default: auto)" \
+ " --with-fts=opt One of glibc, musl-fts, none, auto (default: auto)" \
+ " --with-system-zlib Use system zlib"
+ exit 1
+}
+
+prefix=/usr/local
+# We don't want expansion
+# shellcheck disable=2016
+{
+ bindir='$(PREFIX)/bin'
+ manprefix='${PREFIX}/share/man'
+}
+fts=auto
+netcat=auto
+lesst=auto
+host=
+
+for arg; do
+ case $arg in
+ --help) usage ;;
+ --prefix=*) prefix=${arg#*=} ;;
+ --bindir=*) bindir=${arg#*=} ;;
+ --manprefix=*) manprefix=${arg#*=} ;;
+ --with-fts=*) fts=${arg#*=} ;;
+ --with-system-zlib) zlib=1 ;;
+ --with-less-t) lesst=yes ;;
+ --without-less-t) lesst=no ;;
+ --with-less-t=*) lesst=${arg#*=} ;;
+ --with-netcat) netcat=yes ;;
+ --without-netcat) netcat=no ;;
+ --with-netcat=*) netcat=${arg#*=} ;;
+ -*) die "Unknown flag: '$arg'" ;;
+ *=*) export "${arg:?}";;
+ *) die "Unknown option: '$arg'"
+ esac
+done
+
+trap 'rm -f config.mk' EXIT
+trap 'rm -f config.mk; exit 1' INT
+
+: "${CC:=cc}" "${PKG_CONFIG:=pkg-config}"
+
+printf 'checking system type... '
+[ "$host" ] || host=$($CC -dumpmachine 2>/dev/null) || die "Could not determine host"
+out "$host"
+
+case $host in
+ *linux*) ;;
+ *) die "Unsupported system: $host"
+esac
+
+cat <<EOF >config.mk
+PREFIX = $prefix
+BINDIR = $bindir
+MANPREFIX = $manprefix
+
+AR = ${AR:-ar}
+CC = ${CC:-cc}
+RANLIB = ${RANLIB:-ranlib}
+RM = rm -f
+YACC = ${YACC:-yacc}
+
+EOF
+
+case $netcat in
+ auto|yes)
+ printf 'checking for libtls... '
+ if tlslib=$("$PKG_CONFIG" --static --libs libtls 2>/dev/null); then
+ out "$tlslib"
+ out "TLSLIB = $tlslib" "BIN += nc" >>config.mk
+ out "MAN += usr.bin/nc/nc.1" >>config.mk
+ else
+ out "none"
+ [ "$netcat" = yes ] && die "No tls library found"
+ fi
+esac
+
+printf 'checking for zlib... '
+if [ "$zlib" = 1 ]; then
+ zlib=$($PKG_CONFIG --static --libs zlib)
+ out "$zlib"
+ out "ZLIB = $zlib" >> config.mk
+else
+ zlib=lib/libz/libz.a
+ out "in source"
+ out "ZLIB = $zlib" "MANDOCLIBS += $zlib" "GREPLIBS += $zlib" >>config.mk
+fi
+
+printf 'checking for fts... '
+if [ "$fts" = auto ]; then
+ if out "#include <fts.h>" | $CC -E - >/dev/null 2>&1; then
+ fts=glibc
+ $PKG_CONFIG --exists musl-fts && fts=musl-fts
+ else
+ fts=none
+ fi
+fi
+
+out "$fts"
+
+case $fts in
+ glibc) out "CFLAGS += -DHAVE_FTS" ;;
+ musl-fts) out "CFLAGS += -DHAVE_FTS" "LIBFTS = -lfts" ;;
+ none) out "LIBOBJ += lib/libc/gen/fts.o"
+esac >>config.mk
+
+case $lesst in
+ auto|yes)
+ printf "Checking if less supports '-T'... "
+ if echo | less -T test >/dev/null 2>&1; then
+ out yes
+ out "CFLAGS += -DHAVE_LESS_T" >>config.mk
+ else
+ out no
+ [ "$lesst" = yes ] && die "less doesn't support '-T' flag"
+ fi
+esac
+
+out "written config.mk" "Run 'make' to compile otools"
+trap - EXIT INT