aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile25
-rw-r--r--config.mk34
-rwxr-xr-xconfigure102
4 files changed, 118 insertions, 44 deletions
diff --git a/.gitignore b/.gitignore
index ac7a71d..17e1976 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@
/pax
/signify
/lib/libc/hash/*hl.c
+config.mk
diff --git a/Makefile b/Makefile
index 9e9d30d..eefdbe2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,11 @@
-include config.mk
+CFLAGS += -Wall -Wno-pointer-sign -Wno-maybe-uninitialized \
+ -Wno-attributes -I${PWD}/includedir \
+ -D 'DEF_WEAK(n)=_Static_assert(1, "")' \
+ -idirafter ${PWD}/include \
+ -idirafter ${PWD}/sys \
+ -idirafter ${PWD}/lib/libutil \
+ -idirafter ${PWD}/lib/libcrypto
+
BIN = \
diff \
doas \
@@ -79,6 +86,11 @@ MAN = \
bin/pax/tar.1 \
usr.bin/signify/signify.1
+MANDOCLIBS = ${LIB}
+GREPLIBS = ${LIB}
+
+include config.mk
+
.y.c:
${YACC} -o $@ $<
.c.o:
@@ -89,13 +101,6 @@ MAN = \
all: ${BIN}
${BINOBJ}: ${LIB}
-MANDOCLIBS = ${LIB}
-GREPLIBS = ${LIB}
-ifeq (${ZLIB}, lib/libz/libz.a)
- MANDOCLIBS += ${ZLIB}
- GREPLIBS += ${ZLIB}
-endif
-
# ------------------------------------------------------------------------------
# diff
DIFFOBJ = \
@@ -152,8 +157,8 @@ GREPOBJ = \
usr.bin/grep/util.o
BINOBJ += ${GREPOBJ}
-grep: ${GREPOBJ} ${LIB}
- ${CC} ${LDFLAGS} -o $@ ${GREPOBJ} ${LIB} -lz
+grep: ${GREPOBJ} ${GREPLIBS}
+ ${CC} ${LDFLAGS} -o $@ ${GREPOBJ} ${LIB} ${ZLIB} ${LIBFTS}
# ------------------------------------------------------------------------------
# m4
diff --git a/config.mk b/config.mk
deleted file mode 100644
index 57b774d..0000000
--- a/config.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-PREFIX = /usr/local
-BINDIR = ${PREFIX}/bin
-MANPREFIX = ${PREFIX}/share/man
-
-AR ?= ar
-CC ?= cc
-RANLIB ?= ranlib
-RM ?= rm -f
-YACC ?= yacc
-
-
-# You can uncomment the latter if you aren't using libtls-bearssl. If you
-# aren't linking statically, '-ltls' should be suffice.
-TLSLIB = `pkgconf --static --libs libtls`
-
-# You can replace the following to 'lib/libz/libz.a' in order to build with the
-# in-source zlib.
-ZLIB = -lz
-
-# If fts is available on your system, we need to disable building it here.
-# Change with 1 if you are using musl-fts, 2 if you are using glibc.
-FTS=0
-
-CFLAGS += -Wall -Wno-pointer-sign -Wno-maybe-uninitialized \
- -Wno-attributes -I${PWD}/includedir \
- -D 'DEF_WEAK(n)=_Static_assert(1, "")' \
- -idirafter ${PWD}/include \
- -idirafter ${PWD}/sys \
- -idirafter ${PWD}/lib/libutil \
- -idirafter ${PWD}/lib/libcrypto
-
-# If you are using a less implementation with tags support, uncomment
-# the following.
-# CFLAGS += -DHAVE_LESS_T
diff --git a/configure b/configure
new file mode 100755
index 0000000..6e879d8
--- /dev/null
+++ b/configure
@@ -0,0 +1,102 @@
+#!/bin/sh -e
+
+trap 'rm -f config.mk' EXIT
+trap 'rm -f config.mk; exit 1' INT
+
+die() {
+ printf '%s: %s\n' "${0##*/}" "$*" >&2
+ exit 1
+}
+
+out() { printf '%s\n' "$@" ;}
+
+prefix=/usr/local
+# We don't want expansion
+# shellcheck disable=2016
+{
+ bindir='$(PREFIX)/bin'
+ manprefix='${PREFIX}/share/man'
+}
+fts=auto
+host=
+
+for arg; do
+ case $arg in
+ --prefix=*) prefix=${arg#*=} ;;
+ --bindir=*) bindir=${arg#*=} ;;
+ --with-fts=*) fts=${arg#*=} ;;
+ --with-system-zlib) zlib=1 ;;
+ -*) die "Unknown flag: '$arg'" ;;
+ *=*) export "$arg";;
+ *) die "Unknown option: '$arg'"
+ esac
+done
+
+: ${CC:=cc}
+
+printf 'checking system type... '
+[ "$host" ] || host=$($CC -dumpmachine 2>/dev/null) || die "Could not determine host"
+out "$host"
+
+printf 'checking for libtls... '
+tlslib=$(pkgconf --static --libs libtls) || die "No tls library found"
+out "$tlslib"
+
+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}
+
+TLSLIB = $tlslib
+EOF
+
+printf 'checking for zlib... '
+if [ "$zlib" = 1 ]; then
+ zlib=$(pkgconf --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
+ pkgconf --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
+
+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
+fi
+
+out "written config.mk" "Run 'make' to compile otools"
+trap - EXIT INT