Commit Diff


commit - 10cc819309de08fbab770ce9605dec1b35a4fad9
commit + 1610f9541d742906f7f683e9ad1ad2a29225ae8a
blob - 61652bbe582325fe7ece30065b6fadb9a80547bf
blob + d43e757db51104a57bebd9c0d3c521629a20f697
--- .gitignore
+++ .gitignore
@@ -12,12 +12,12 @@ compat/*.d
 compat/*.o
 docs
 y.tab.*
-Makefile.local
 compile_flags.txt
 config.h
 config.h.old
 config.log
 config.log.old
+config.mk
 configure.local
 !contrib/gmid
 !contrib/vim/syntax_checkers/gmid
blob - 0b73090e43c8e6c5295f33323c4c803c1cbef5c2
blob + 3de0edadc7b16b23405856899006767e967d61fc
--- Makefile
+++ Makefile
@@ -18,6 +18,10 @@
 # all.
 TESTS=
 
+# -- build-related variables --
+
+COBJS =		${COMPATS:.c=.o}
+
 GMID_SRCS =	gmid.c config.c crypto.c dirs.c fcgi.c iri.c log.c \
 		logger.c mime.c proc.c proxy.c puny.c sandbox.c \
 		server.c utf8.c utils.c y.tab.c
@@ -38,42 +42,24 @@ SRCS =		gmid.h log.h parse.y proc.h \
 
 DISTNAME =	gmid-${VERSION}
 
-all: Makefile.local gmid ge gg
+# -- public targets --
+
+all: config.mk gmid ge gg
 .PHONY: all tags static clean cleanall test regress install
 
-Makefile.local config.h: configure
+config.mk config.h: configure
 	@echo "$@ is out of date; please run ./configure"
 	@exit 1
 
-include Makefile.local
+include config.mk
 
-tags:
-	ctags ${SRCS}
-
-y.tab.c: parse.y
-	${YACC} -b y parse.y
-
-gmid: ${GMID_OBJS}
-	${CC} ${GMID_OBJS} -o $@ ${LDFLAGS}
-
-ge: ${GE_OBJS}
-	${CC} ${GE_OBJS} -o $@ ${LDFLAGS}
-
-gg: ${GG_OBJS}
-	${CC} ${GG_OBJS} -o $@ ${LDFLAGS}
-
-static: ${GMID_OBJS} ${GE_OBJS} ${GG_OBJS}
-	${CC} ${GMID_OBJS} -o gmid ${LDFLAGS} ${STATIC}
-	${CC} ${GG_OBJS} -o ge ${LDFLAGS} ${STATIC}
-	${CC} ${GG_OBJS} -o gg ${LDFLAGS} ${STATIC}
-
 clean:
 	rm -f *.[do] compat/*.[do] y.tab.c y.tab.h y.output gmid ge gg
 	rm -f compile_flags.txt
 	${MAKE} -C regress clean
 
 distclean: clean
-	rm -f Makefile.local config.h config.h.old config.log config.log.old
+	rm -f config.h config.h.old config.log config.log.old config.mk
 
 test: regress
 regress: all
@@ -101,6 +87,23 @@ uninstall:
 	rm ${DESTDIR}${MANDIR}/man5/gmid.conf.5
 	rm ${DESTDIR}${MANDIR}/man8/gmid.8
 
+tags:
+	ctags ${SRCS}
+
+# --internal build targets --
+
+gmid: ${GMID_OBJS}
+	${CC} ${GMID_OBJS} -o $@ ${LIBS} ${LDFLAGS}
+
+ge: ${GE_OBJS}
+	${CC} ${GE_OBJS} -o $@ ${LIBS} ${LDFLAGS}
+
+gg: ${GG_OBJS}
+	${CC} ${GG_OBJS} -o $@ ${LIBS} ${LDFLAGS}
+
+y.tab.c: parse.y
+	${YACC} -b y parse.y
+
 # make sure we pass -o to ${CC}.  OpenBSD default suffix rule doesn't
 .SUFFIXES: .c .o
 .c.o:
blob - e98fdd63230325eff50534ebe082ae92e7611884
blob + f820f71c219debfb93731a6abbb6ea5fb284f4fc
--- compat/Makefile
+++ compat/Makefile
@@ -29,4 +29,4 @@ dist: ${DISTFILES}
 	${INSTALL} -m 0644 ${DISTFILES} ${DESTDIR}/
 
 .PHONY: all dist
-include ../Makefile.local
+include ../config.mk
blob - 9ae50d48cecc23633fe8d7cddee7890662a8144a
blob + 3d3f551602ecc946b6a83d2e1bc6ae6322faf6f0
--- configure
+++ configure
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright (c) 2021, 2022 Omar Polo <op@omarpolo.com>
+# Copyright (c) 2021, 2022, 2023 Omar Polo <op@omarpolo.com>
 # Copyright (c) 2011, 2013-2022 Ingo Schwarze <schwarze@openbsd.org>
 # Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
 #
@@ -18,229 +18,225 @@
 
 set -e
 
-[ -w config.log ] && mv config.log config.log.old
-[ -w config.h   ] && mv config.h   config.h.old
-
-# Output file descriptor usage:
-# 1 (stdout): config.h, Makefile.local
-# 2 (stderr): original stderr, usually to the console
-# 3: config.log
-
-exec 3> config.log
-echo "file config.log: writing..."
-
-# --------
-# default settings: initialize all vars here such that nothing is
-# leaked from the environment except for CC, CFLAGS and LDFLAGS
-
+RELEASE=no
 VERSION=2.0-unstable
 
-CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make ${MAKE_FLAGS} -sf -`
+usage()
+{
+	echo "usage: $0 [--help] [--prefix=prefix] [OPTION=VALUE...]" >&2
+	exit 1
+}
 
-if [ -z "${CFLAGS}" ]; then
-	CFLAGS=`printf "all:\\n\\t@echo \\\$(CFLAGS)\\n" | make ${MAKE_FLAGS} -sf -`
+if command -v yacc 2>/dev/null >&2; then
+	YACC=yacc
+elif command -v bison 2>/dev/null >&2; then
+	YACC=bison
+else
+	# assume yacc by default.  Make will fail building parse.y if
+	# not from a release tarball, but at least it'll have a decent
+	# error message.
+	YACC=yacc
 fi
 
-CFLAGS="${CFLAGS} -W -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes"
-CFLAGS="${CFLAGS} -Wwrite-strings -Wpointer-sign -Wno-unused-parameter"
-CFLAGS="${CFLAGS} -Wno-missing-field-initializers"
+pkgconfig=
 
-if [ -z "${LDFLAGS}" ]; then
-	LDFLAGS=`printf "all:\\n\\t@echo \\\$(LDFLAGS)\\n" | make ${MAKE_FLAGS} -sf -`
-	LDFLAGS="-ltls -levent -lcrypto"
+CC=${CC:-cc}
+
+if [ "$RELEASE" = no ]; then
+	CFLAGS=${CFLAGS:--O0 -g3}
+else
+	CFLAGS=${CFLAGS:--O2 -pipe}
 fi
 
-LD_IMSG=
-STATIC=
-YACC=yacc
+PREFIX=${PREFIX-/usr/local}
 
-COBJS=
+CDIAGFLAGS=
+CDIAGFLAGS="${CDIAGFLAGS} -W -Wall -Wextra -Wpointer-arith -Wuninitialized"
+CDIAGFLAGS="${CDIAGFLAGS} -Wstrict-prototypes -Wmissing-prototypes -Wunused"
+CDIAGFLAGS="${CDIAGFLAGS} -Wsign-compare -Wno-unused-parameter" # -Wshadow
+CDIAGFLAGS="${CDIAGFLAGS} -Wno-missing-field-initializers"
+CDIAGFLAGS="${CDIAGFLAGS} -Wpointer-sign"
 
-DISABLE_SANDBOX=0
+while [ $# -gt 0 ]; do
+	key="${1%%=*}"
+	val="${1#*=}"
 
-NEED_GNU_SOURCE=0
-NEED_OPENBSD_SOURCE=0
+	if [ "$key" = --help ]; then
+		usage
+	fi
 
-PREFIX="/usr/local"
-BINDIR=
+	if [ "$key" = -Werror ]; then
+		CDIAGFLAGS="$CDIAGFLAGS -Werror"
+		shift
+		continue
+	fi
 
-INSTALL="install"
+	if [ "$key" = --enable-sandbox ]; then
+		key=DISABLE_SANDBOX
+		val=0
+	fi
 
-add_library() {
-	if pkg-config "$1"; then
-		CFLAGS="${CFLAGS} $(pkg-config --cflags "$1")"
-		LDFLAGS="${LDFLAGS} $(pkg-config --libs "$1")"
+	if [ "$key" = --disable-sandbox ]; then
+		key=DISABLE_SANDBOX
+		val=1
 	fi
-}
 
-# try to auto detect CFLAGS and LDFLAGS
-if command -v pkg-config >/dev/null; then
-	add_library "libtls"
-	add_library "openssl"
+	if [ "$key" = "$1" ]; then
+		# if no --xy=, look at the next arg
+		if ! shift 2>/dev/null; then
+			echo "$0: missing value for $key" >&2
+			exit 1
+		fi
+		val="$1"
+	fi
 
-	case "$(uname)" in
-		OpenBSD)
-			# use libevent and imsg in base
-			;;
-		*)
-			add_library "libevent"
-			add_library "libimsg"
-			;;
+	case "$key" in
+	--bindir)	key=BINDIR ;;
+	--mandir)	key=MANDIR ;;
+	--prefix)	key=PREFIX ;;
 	esac
 
-	case "$(uname)" in
-		*BSD|DragonFly|Darwin)
-			;;
-		*)
-			add_library "libbsd-ctor libbsd-overlay"
-			;;
+	case "$key" in
+	BINDIR)		BINDIR="$val" ;;
+	CC)		CC="$val" ;;
+	CFLAGS)		CFLAGS="$val" ;;
+	CDIAGFLAGS)	CDIAGFLAGS="$val" ;;
+	DISABLE_SANDBOX) DISABLE_SANDBOX="$val" ;;
+	LDFLAGS)	LDFLAGS="$val" ;;
+	PKG_CONFIG)	PKG_CONFIG="$val" ;;
+	PREFIX)		PREFIX="$val" ;;
+	YACC)		YACC="$val" ;;
+	*)		usage
 	esac
-fi
 
-# auto detect yacc/bison
-command -v ${YACC} >/dev/null || {
-	echo "${YACC} not found: trying bison" 1>&2
-	echo "${YACC} not found: trying bison" 1>&3
-	YACC=bison
-	command -v ${YACC} >/dev/null || {
-		echo "${YACC} not found: giving up" 1>&2
-		echo "${YACC} not found: giving up" 1>&3
-	}
-}
+	shift
+done
 
-# --------
-# allow certain variables to be overridden on the command line
+[ -w config.log ] && mv config.log config.log.old
+[ -w config.h   ] && mv config.h   config.h.old
 
-for keyvals in "$@"; do
-	if [ "$keyvals" = "--disable-sandbox" ]; then
-		DISABLE_SANDBOX=1
-		continue
-	fi
+exec 3> config.log
+echo "file config.log: writing..."
 
-	if [ "$keyvals" = "--enable-sandbox" ]; then
-		DISABLE_SANDBOX=0
-		continue
-	fi
+NEED_GNU_SOURCE=0
+NEED_OPENBSD_SOURCE=0
 
-	key=`echo $keyvals | cut -s -d '=' -f1`
-	if [ -z "$key" ]; then
-		echo "$0: invalid key-value: $keyvals" 1>&2
-		exit 1
+COMPATS=
+COMP="${CC} ${CFLAGS} -Wno-unused -Werror"
+
+# singletest name var extra-cflags extra-libs msg
+singletest() {
+	msg="$5"
+	if [ -z "$msg" ]; then
+		if [ -n "$3" ]; then
+			msg=" ($3)"
+		elif [ -n "$4" ]; then
+			msg=" ($4)"
+		fi
+	elif [ "$msg" = no ]; then
+		msg=""
 	fi
-	val=`echo $keyvals | cut -d '=' -f 2-`
-	case "$key" in
-		BINDIR)   BINDIR="$val" ;;
-		CC)       CC="$val" ;;
-		CFLAGS)   CFLAGS="$val" ;;
-		DESTDIR)  DESTDIR="$val" ;;
-		LDFLAGS)  LDFLAGS="$val" ;;
-		MANDIR)   MANDIR="$val" ;;
-		PREFIX)   PREFIX="$val" ;;
-		YACC)     YACC="$val" ;;
-		--prefix) PREFIX="$val" ;;
-		*)
-			echo "$0: invalid key: $key" 1>&2
-			exit 1
-	esac
-done
 
-# --------
-# Allow configure.local to override all variables, default settings,
-# command-line arguments, and tested features, above.
+	cat >&3 <<EOF
+${1}: testing...
+$COMP have/${1}.c $3 -o test-$1 $LDFLAGS $4
+EOF
+	if $COMP have/${1}.c $3 -o test-$1 $LDFLAGS $4 >&3 2>&3; then
+		rm -f test-${1} test-${1}.d
 
-if [ -r ./configure.local ]; then
-	echo "configure.local: reading..." 1>&2
-	echo "configure.local: reading..." 1>&3
-	cat ./configure.local 1>&3
-	. ./configure.local
-else
-	echo "configure.local: no (fully automatic configuration)" 1>&2
-	echo "configure.local: no (fully automatic configuration)" 1>&3
-fi
+		echo "${1}: $CC$msg succeeded" >&3
+		echo "${1}$msg: yes"
+		echo >&3
 
-# --------
-# tests functions
+		return 0
+	fi
 
-# Check whether this HAVE_ setting is manually overridden.
-# If yes, use the override, if no, do not decide anything yet.
-# Arguments: test file name, test var name, manual value
-ismanual() {
-	[ -z "${3}" ] && return 1
-	echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&2
-	echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&3
-	echo 1>&3
-	return 0
+	echo "${1}: $CC$msg failed $?" >&3
+	echo "${1}$msg: no"
+	echo >&3
+
+	return 1
 }
 
-# Run a single autoconfiguration test.
-# In case of success, enable the feature.
-# In case of failure, do not decide anything yet.
-# Arguments: test file name, test var name, additional CFLAGS
-singletest() {
-	n=${1}${3}
-	cat 1>&3 << __HEREDOC__
-testing ${n} ...
-${COMP} -o have/${1} have/${1}.c ${3} ${LDFLAGS}
-__HEREDOC__
-
-	if ${COMP} -o "have/${1}" "have/${1}.c" ${3} ${LDFLAGS} 1>&3 2>&3
-	then
-		echo "tested ${n}: yes" 1>&2
-		echo "tested ${n}: yes" 1>&3
-		echo 1>&3
-		eval HAVE_${2}=1
-		[ "${3}" = "-D_GNU_SOURCE" ] && NEED_GNU_SOURCE=1
-		[ "${3}" = "-D_OPENBSD_SOURCE" ] && NEED_OPENBSD_SOURCE=1
-		[ "${3}" = "-lutil" ] && LD_IMSG="-lutil"
-		rm "have/${1}"
+# deptest name var
+deptest() {
+	if singletest "$1" "$2" "${CFLAGS}" "${LIBS}" no; then
+		eval HAVE_${2}=1
 		return 0
-	else
-		echo "tested ${n}: no (compilation failed)" 1>&2
-		echo "result of ${n}: ${CC} failed with exit status $?" 1>&3
-		echo "result of compiling ${n}: no" 1>&3
-		echo 1>&3
-		return 1
 	fi
-}
 
-# Run a complete autoconfiguration test, including the check for
-# a manual override and disabling the feature on failure.
-# Arguments: test file name, test var name, additional CFLAGS
-# The final argument can optionally be repeated a second time.
-runtest() {
-	eval _manual=\${HAVE_${2}}
-	ismanual "${1}" "${2}" "${_manual}" && return 0
-	singletest "${1}" "${2}" "${3}" && return 0
-	[ -n "${4}" ] && singletest "${1}" "${2}" "${4}" && return 0
+	if [ -f compat/${1}.c ]; then
+		COMPATS="compat/$1.c $COMPATS"
+	fi
+
 	eval HAVE_${2}=0
 	return 1
 }
 
-# --------
-# compiler options
+# runtest name var extra-cflags extra-libs pkgconfig-name
+runtest() {
+	if singletest "$1" "$2" "" ""; then
+		eval HAVE_${2}=1
+		return 0
+	fi
 
-COMP="${CC} ${CFLAGS} -Wno-unused -Werror"
+	if [ -n "$3" -o -n "$4" ]; then
+		echo "retrying with ${3+$3 }$4" >&3
+		if singletest "$1" "$2" "$3" "$4"; then
+			eval HAVE_${2}=1
+			if [ "$3" = -D_GNU_SOURCE ]; then
+				NEED_GNU_SOURCE=1
+				return 0
+			fi
+			if [ "$4" = -D_OPENBSD_SOURCE ]; then
+				NEED_OPENBSD_SOURCE=1
+				return 0
+			fi
+			if [ -n "$3" ]; then
+				CFLAGS="$CFLAGS $3"
+			fi
+			if [ -n "$4" ]; then
+				LIBS="$LIBS $4"
+			fi
+			return 0
+		fi
+	fi
 
-echo "selected CFLAGS=\"${CFLAGS}\"" 1>&2
-echo "selected CFLAGS=\"${CFLAGS}\"" 1>&3
-echo 1>&3
+	if [ -n "$5" -a -n "$pkgconfig" ]; then
+		if $pkgconfig $5; then
+			cflags="$($pkgconfig --cflags "$5")"
+			ldflags="$($pkgconfig --libs "$5")"
+			echo "retrying with pkg-config" >&3
+			if singletest "$1" "$2" "$cflags" "$ldflags"; then
+				CFLAGS="$CFLAGS $cflags"
+				LIBS="$LIBS $ldflags"
+				eval HAVE_$2=1
+				return 0
+			fi
+		fi
+	fi
 
-if [ -n "${STATIC}" ]; then
-	echo "selected STATIC=\"${STATIC}\" (manual)" 1>&2
-	echo "selected STATIC=\"${STATIC}\" (manual)" 1>&3
-	echo 1>&3
+	if [ -f compat/$1.c ]; then
+		COMPATS="compat/$1.c $COMPATS"
+	fi
+
+	eval HAVE_$2=0
+	return 1
+}
+
+if [ "$PKG_CONFIG" = no ]; then
+	echo "pkg-config: disabled"
+elif [ -n "$PKG_CONFIG" ]; then
+	pkgconfig="$PKG_CONFIG"
+	echo "pkg-config: (manual) $PKG_CONFIG"
+elif command -v pkg-config 2>/dev/null >&2; then
+	pkgconfig="pkg-config"
+	echo "pkg-config: (auto) pkg-config"
 else
-	runtest noop STATIC -static || true
-	[ ${HAVE_STATIC} -eq 0 ] || STATIC="-static"
-	echo "selected STATIC=\"${STATIC}\"" 1>&2
-	echo "selected STATIC=\"${STATIC}\"" 1>&3
-	echo 1>&3
+	echo "pkg-config: not found"
 fi
 
-# --------
-# tests for config.h
-
-if runtest noop MMD -MMD; then
+if singletest noop MMD -MMD; then
 	CFLAGS="${CFLAGS} -MMD"
 fi
 
@@ -254,26 +250,27 @@ runtest freezero	FREEZERO	|| true
 runtest getdtablecount	GETDTABLECOUNT	|| true
 runtest getdtablesize	GETDTABLESIZE	|| true
 runtest getprogname	GETPROGNAME	|| true
-runtest imsg		IMSG		-lutil || true
-runtest libevent	LIBEVENT	|| true
-runtest libevent2	LIBEVENT2	|| true
-runtest libtls		LIBTLS		|| true
-runtest memmem		MEMMEM		"" -D_GNU_SOURCE || true
-runtest openssl		OPENSSL		|| true
+runtest imsg		IMSG		"" -lutil libimsg || true
+runtest libevent	LIBEVENT	"" -levent libevent_core|| true
+runtest libtls		LIBTLS		"" -ltls libtls || true
+runtest memmem		MEMMEM		-D_GNU_SOURCE || true
+runtest openssl		OPENSSL		"" '-lcrypto -lssl' 'libcrypto libssl' || true
 runtest pr_set_name	PR_SET_NAME	|| true
-runtest program_invocation_short_name PROGRAM_INVOCATION_SHORT_NAME "" -D_GNU_SOURCE || true
+runtest program_invocation_short_name PROGRAM_INVOCATION_SHORT_NAME -D_GNU_SOURCE || true
 runtest queue_h		QUEUE_H		|| true
-runtest reallocarray	REALLOCARRAY	|| true
+runtest reallocarray	REALLOCARRAY	-D_OPENBSD_SOURCE	|| true
 runtest recallocarray	RECALLOCARRAY	|| true
 runtest setproctitle	SETPROCTITLE	|| true
-runtest setresgid	SETRESGID	"" -D_GNU_SOURCE || true
-runtest setresuid	SETRESUID	"" -D_GNU_SOURCE || true
+runtest setresgid	SETRESGID	-D_GNU_SOURCE || true
+runtest setresuid	SETRESUID	-D_GNU_SOURCE || true
 runtest strlcat		STRLCAT		|| true
 runtest strlcpy		STRLCPY		|| true
-runtest strtonum	STRTONUM	|| true
+runtest strtonum	STRTONUM	-D_OPENBSD_SOURCE	|| true
 runtest tree_h		TREE_H		|| true
-runtest vasprintf	VASPRINTF	"" -D_GNU_SOURCE || true
+runtest vasprintf	VASPRINTF	-D_GNU_SOURCE || true
 
+deptest libevent2	LIBEVENT2	|| true
+
 if [ ${HAVE_LIBTLS} -eq 0 ]; then
 	echo "FATAL: libtls not found" 1>&2
 	echo "FATAL: libtls not found" 1>&3
@@ -292,14 +289,30 @@ if [ ${HAVE_LIBEVENT} -eq 0 ]; then
 	exit 1
 fi
 
+if [ ${HAVE_IMSG} -eq 0 ]; then
+	# compat/imsg.c is implicitly added
+	COMPATS="$COMPATS compat/imsg-buffer.c"
+fi
+
 if [ ${HAVE_QUEUE_H} -eq 0 -o ${HAVE_IMSG} -eq 0 -o ${HAVE_TREE_H} -eq 0 ]; then
 	CFLAGS="${CFLAGS} -I ${PWD}/compat"
 fi
 
-# --------
-# write config.h
+if [ $HAVE_LIBEVENT2 -eq 1 ]; then
+	CFLAGS="$CFLAGS -DHAVE_LIBEVENT2=1"
+fi
 
+if [ $NEED_GNU_SOURCE = 1 ]; then
+	CFLAGS="$CFLAGS -D_GNU_SOURCE"
+fi
+if [ $NEED_OPENBSD_SOURCE = 1 ]; then
+	CFLAGS="$CFLAGS -D_OPENBSD_SOURCE"
+fi
+
+CFLAGS="${CFLAGS} ${CDIAGFLAGS}"
+
 exec > config.h
+echo "config.h: writing.." >&2
 
 cat <<__HEREDOC__
 #ifdef __cplusplus
@@ -307,9 +320,6 @@ cat <<__HEREDOC__
 #endif
 __HEREDOC__
 
-[ ${NEED_GNU_SOURCE} -eq 0 ] || echo "#define _GNU_SOURCE"
-[ ${NEED_OPENBSD_SOURCE} -eq 0 ] || echo "#define _OPENBSD_SOURCE"
-
 [ ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 -o ${HAVE_IMSG} -eq 0 ] \
 	&& echo "#include <sys/types.h>"
 [ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include <stdarg.h>"
@@ -337,29 +347,6 @@ cat <<__HEREDOC__
 #define VERSION			"${VERSION}"
 #define DISABLE_SANDBOX		${DISABLE_SANDBOX}
 
-#define HAVE_ERR		${HAVE_ERR}
-#define HAVE_EXPLICIT_BZERO	${HAVE_EXPLICIT_BZERO}
-#define HAVE_FREEZERO		${HAVE_FREEZERO}
-#define HAVE_GETDTABLECOUNT	${HAVE_GETDTABLECOUNT}
-#define HAVE_GETDTABLESIZE	${HAVE_GETDTABLESIZE}
-#define HAVE_GETPROGNAME	${HAVE_GETPROGNAME}
-#define HAVE_IMSG		${HAVE_IMSG}
-#define HAVE_LIBEVENT		${HAVE_LIBEVENT}
-#define HAVE_LIBEVENT2		${HAVE_LIBEVENT2}
-#define HAVE_PROGRAM_INVOCATION_SHORT_NAME ${HAVE_PROGRAM_INVOCATION_SHORT_NAME}
-#define HAVE_PR_SET_NAME	${HAVE_PR_SET_NAME}
-#define HAVE_QUEUE_H		${HAVE_QUEUE_H}
-#define HAVE_REALLOCARRAY	${HAVE_REALLOCARRAY}
-#define HAVE_RECALLOCARRAY	${HAVE_RECALLOCARRAY}
-#define HAVE_SETPROCTITLE	${HAVE_SETPROCTITLE}
-#define HAVE_SETRESGID		${HAVE_SETRESGID}
-#define HAVE_SETRESUID		${HAVE_SETRESUID}
-#define HAVE_STRLCAT		${HAVE_STRLCAT}
-#define HAVE_STRLCPY		${HAVE_STRLCPY}
-#define HAVE_STRTONUM		${HAVE_STRTONUM}
-#define HAVE_TREE_H		${HAVE_TREE_H}
-#define HAVE_VASPRINTF		${HAVE_VASPRINTF}
-
 __HEREDOC__
 
 [ ${HAVE_EXPLICIT_BZERO} -eq 0 -o \
@@ -378,72 +365,53 @@ if [ ${HAVE_ERR} -eq 0 ]; then
 	echo "extern	void	 errx(int, const char*, ...);"
 	echo "extern	void	 warn(const char*, ...);"
 	echo "extern	void	 warnx(const char*, ...);"
-	COBJS="${COBJS} compat/err.o"
 else
 	echo "#include <err.h>"
 fi
 if [ ${HAVE_EXPLICIT_BZERO} -eq 0 ]; then
 	echo "extern	void	 explicit_bzero(void*, size_t);"
-	COBJS="${COBJS} compat/explicit_bzero.o"
 fi
 if [ ${HAVE_FREEZERO} -eq 0 ]; then
 	echo "extern	void	 freezero(void*, size_t);"
-	COBJS="${COBJS} compat/freezero.o"
 fi
 if [ ${HAVE_GETDTABLECOUNT} -eq 0 ]; then
 	echo "extern	int	 getdtablecount(void);"
-	COBJS="${COBJS} compat/getdtablecount.o"
 fi
 if [ ${HAVE_GETDTABLESIZE} -eq 0 ]; then
 	echo "extern	int	 getdtablesize(void);"
-	COBJS="${COBJS} compat/getdtablesize.o"
 fi
 if [ ${HAVE_GETPROGNAME} -eq 0 ]; then
 	echo "extern	const char *getprogname(void);"
-	COBJS="${COBJS} compat/getprogname.o"
 fi
-if [ ${HAVE_IMSG} -eq 0 ]; then
-	COBJS="${COBJS} compat/imsg.o compat/imsg-buffer.o"
-fi
 if [ ${HAVE_MEMMEM} -eq 0 ]; then
 	echo "extern void *memmem(const void *, size_t, const void *, size_t);"
-	COBJS="${COBJS} compat/memmem.o"
 fi
 if [ ${HAVE_REALLOCARRAY} -eq 0 ]; then
 	echo "extern	void	*reallocarray(void*, size_t, size_t);"
-	COBJS="${COBJS} compat/reallocarray.o"
 fi
 if [ ${HAVE_RECALLOCARRAY} -eq 0 ]; then
 	echo "extern	void	*recallocarray(void*, size_t, size_t, size_t);"
-	COBJS="${COBJS} compat/recallocarray.o"
 fi
 if [ ${HAVE_SETPROCTITLE} -eq 0 ]; then
 	echo "extern	void	 setproctitle(const char *fmt, ...);"
-	COBJS="${COBJS} compat/setproctitle.o"
 fi
 if [ ${HAVE_SETRESGID} -eq 0 ]; then
 	echo "extern	int	 setresgid(gid_t, gid_t, gid_t);"
-	COBJS="${COBJS} compat/setresgid.o"
 fi
 if [ ${HAVE_SETRESUID} -eq 0 ]; then
 	echo "extern	int	 setresuid(uid_t, uid_t, uid_t);"
-	COBJS="${COBJS} compat/setresuid.o"
 fi
 if [ ${HAVE_STRLCAT} -eq 0 ]; then
 	echo "extern	size_t	 strlcat(char*, const char*, size_t);"
-	COBJS="${COBJS} compat/strlcat.o"
 fi
 if [ ${HAVE_STRLCPY} -eq 0 ]; then
 	echo "extern	size_t	 strlcpy(char*, const char*, size_t);"
-	COBJS="${COBJS} compat/strlcpy.o"
 fi
 if [ ${HAVE_STRTONUM} -eq 0 ]; then
 	echo "extern	long long strtonum(const char*, long long, long long, const char**);"
-	COBJS="${COBJS} compat/strtonum.o"
 fi
 if [ ${HAVE_VASPRINTF} -eq 0 ]; then
 	echo "extern	int	 vasprintf(char**, const char*, va_list);"
-	COBJS="${COBJS} compat/vasprintf.o"
 fi
 
 cat <<__HEREDOC__
@@ -475,14 +443,11 @@ __HEREDOC__
 echo "file config.h: written" 1>&2
 echo "file config.h: written" 1>&3
 
-# --------
-# tests for Makefile.local
+exec > config.mk
 
-exec > Makefile.local
+[ -z "${BINDIR}"          ] && BINDIR="\${PREFIX}/bin"
+[ -z "${MANDIR}"          ] && MANDIR="\${PREFIX}/man"
 
-[ -z "${BINDIR}"          ] && BINDIR="${PREFIX}/bin"
-[ -z "${MANDIR}"          ] && MANDIR="${PREFIX}/man"
-
 [ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555"
 [ -z "${INSTALL_LIB}"     ] && INSTALL_LIB="${INSTALL} -m 0444"
 [ -z "${INSTALL_MAN}"     ] && INSTALL_MAN="${INSTALL} -m 0444"
@@ -491,26 +456,31 @@ exec > Makefile.local
 cat << __HEREDOC__
 CC		= ${CC}
 CFLAGS		= ${CFLAGS}
-LDFLAGS		= ${LDFLAGS} ${LD_IMSG}
+LDFLAGS		= ${LDFLAGS}
+LIBS		= ${LIBS}
 YACC		= ${YACC}
 STATIC		= ${STATIC}
 PREFIX		= ${PREFIX}
 BINDIR		= ${BINDIR}
 MANDIR		= ${MANDIR}
-INCLUDEDIR	= ${INCLUDEDIR}
-INSTALL		= ${INSTALL}
-INSTALL_PROGRAM	= ${INSTALL_PROGRAM}
-INSTALL_LIB	= ${INSTALL_LIB}
-INSTALL_MAN	= ${INSTALL_MAN}
-INSTALL_DATA	= ${INSTALL_DATA}
 
-COBJS		= ${COBJS}
+INSTALL		= install
+INSTALL_PROGRAM	= ${INSTALL} -m 0555
+INSTALL_LIB	= ${INSTALL} -m 0444
+INSTALL_MAN	= ${INSTALL} -m 0444
+INSTALL_DATA	= ${INSTALL} -m 0444
 
+COMPATS=	${COMPATS}
+
 VERSION		= ${VERSION}
 
 __HEREDOC__
 
-echo "file Makefile.local: written" 1>&2
-echo "file Makefile.local: written" 1>&3
+echo "file config.mk: written" 1>&2
+echo "file config.mk: written" 1>&3
 
+echo >&2
+echo "Now run \`make' to compile." >&2
+echo >&2
+
 exit 0
blob - 9489eea384e2dc9c66f0db9a1ef9ebeeadc65aaa
blob + 8f81468d33333b82bfbcc6325a5793bea86aa492
--- contrib/Makefile
+++ contrib/Makefile
@@ -17,4 +17,4 @@ dist: ${DISTFILES}
 	cp -R vim ${DESTDIR}/vim
 
 .PHONY: all dist
-include ../Makefile.local
+include ../config.mk
blob - a2384c3f2da09600951d5dac9abff8453d49c576
blob + ee214d5a44e1ad365a8d4c155fe1188d567e452a
--- have/Makefile
+++ have/Makefile
@@ -34,4 +34,4 @@ dist: ${DISTFILES}
 	${INSTALL} -m 0644 ${DISTFILES} ${DESTDIR}/
 
 .PHONY: all dist
-include ../Makefile.local
+include ../config.mk
blob - 2e09681657abee2968ee371bebaf94ea13296635
blob + a0feea082634e7e804d43524aa22808afd472868
--- regress/Makefile
+++ regress/Makefile
@@ -20,10 +20,17 @@ DISTFILES =	Makefile \
 		tests.sh \
 		valid.ext
 
-include ../Makefile.local
+include ../config.mk
 
-COMPAT= ${COBJS:%=../%}
+COBJS =		${COMPATS:.c=.o}
+REG_COMPATS =	${COBJS:%=../%}
 
+PUNY_SRCS =	puny-test.c ../puny.c ../utf8.c ../utils.c ../log.c
+PUNY_OBJS =	${PUNY_SRCS:.c=.o} ${REG_COMPATS}
+
+IRI_SRCS =	iri_test.c ../iri.c ../utf8.c
+IRI_OBJS =	${IRI_SRCS:.c=.o} ${REG_COMPATS}
+
 .PHONY: all data clean dist
 
 all: data puny-test iri_test fcgi-test
@@ -31,18 +38,17 @@ all: data puny-test iri_test fcgi-test
 
 data: testdata cert.pem testca.pem valid.crt invalid.cert.pem
 
-puny-test: puny-test.o ../puny.o ../utf8.o ../utils.o ../log.o ${COMPAT}
-	${CC} puny-test.o ../puny.o ../utf8.o ../utils.o ../log.o ${COMPAT} \
-		-o puny-test ${LDFLAGS}
+puny-test: ${PUNY_OBJS}
+	${CC} ${PUNY_OBJS} -o puny-test ${LIBS} ${LDFLAGS}
 
-iri_test: iri_test.o ../iri.o ../utf8.o ${COMPAT}
-	${CC} iri_test.o ../iri.o ../utf8.o ${COMPAT} -o $@ ${LDFLAGS}
+iri_test: ${IRI_OBJS}
+	${CC} ${IRI_OBJS} -o $@ ${LIBS} ${LDFLAGS}
 
 fill-file: fill-file.o
-	${CC} fill-file.o -o $@ ${LDFLAGS}
+	${CC} fill-file.o -o $@ ${LIBS} ${LDFLAGS}
 
 fcgi-test: fcgi-test.o
-	${CC} fcgi-test.o ${COMPAT} -o fcgi-test ${LDFLAGS}
+	${CC} fcgi-test.o ${REG_COMPATS} -o fcgi-test ${LIBS} ${LDFLAGS}
 
 key.pem: cert.pem