diff --git a/.gitignore b/.gitignore index 61652bb..d43e757 100644 --- a/.gitignore +++ b/.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 diff --git a/Makefile b/Makefile index 0b73090..3de0eda 100644 --- a/Makefile +++ b/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,34 +42,16 @@ 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 - -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} +include config.mk clean: rm -f *.[do] compat/*.[do] y.tab.c y.tab.h y.output gmid ge gg @@ -73,7 +59,7 @@ clean: ${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: diff --git a/compat/Makefile b/compat/Makefile index e98fdd6..f820f71 100644 --- a/compat/Makefile +++ b/compat/Makefile @@ -29,4 +29,4 @@ dist: ${DISTFILES} ${INSTALL} -m 0644 ${DISTFILES} ${DESTDIR}/ .PHONY: all dist -include ../Makefile.local +include ../config.mk diff --git a/configure b/configure index 9ae50d4..3d3f551 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2021, 2022 Omar Polo +# Copyright (c) 2021, 2022, 2023 Omar Polo # Copyright (c) 2011, 2013-2022 Ingo Schwarze # Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons # @@ -18,229 +18,225 @@ set -e +RELEASE=no +VERSION=2.0-unstable + +usage() +{ + echo "usage: $0 [--help] [--prefix=prefix] [OPTION=VALUE...]" >&2 + exit 1 +} + +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 + +pkgconfig= + +CC=${CC:-cc} + +if [ "$RELEASE" = no ]; then + CFLAGS=${CFLAGS:--O0 -g3} +else + CFLAGS=${CFLAGS:--O2 -pipe} +fi + +PREFIX=${PREFIX-/usr/local} + +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" + +while [ $# -gt 0 ]; do + key="${1%%=*}" + val="${1#*=}" + + if [ "$key" = --help ]; then + usage + fi + + if [ "$key" = -Werror ]; then + CDIAGFLAGS="$CDIAGFLAGS -Werror" + shift + continue + fi + + if [ "$key" = --enable-sandbox ]; then + key=DISABLE_SANDBOX + val=0 + fi + + if [ "$key" = --disable-sandbox ]; then + key=DISABLE_SANDBOX + val=1 + fi + + 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 "$key" in + --bindir) key=BINDIR ;; + --mandir) key=MANDIR ;; + --prefix) key=PREFIX ;; + esac + + 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 + + shift +done + [ -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 - -VERSION=2.0-unstable - -CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make ${MAKE_FLAGS} -sf -` - -if [ -z "${CFLAGS}" ]; then - CFLAGS=`printf "all:\\n\\t@echo \\\$(CFLAGS)\\n" | make ${MAKE_FLAGS} -sf -` -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" - -if [ -z "${LDFLAGS}" ]; then - LDFLAGS=`printf "all:\\n\\t@echo \\\$(LDFLAGS)\\n" | make ${MAKE_FLAGS} -sf -` - LDFLAGS="-ltls -levent -lcrypto" -fi - -LD_IMSG= -STATIC= -YACC=yacc - -COBJS= - -DISABLE_SANDBOX=0 - NEED_GNU_SOURCE=0 NEED_OPENBSD_SOURCE=0 -PREFIX="/usr/local" -BINDIR= +COMPATS= +COMP="${CC} ${CFLAGS} -Wno-unused -Werror" -INSTALL="install" - -add_library() { - if pkg-config "$1"; then - CFLAGS="${CFLAGS} $(pkg-config --cflags "$1")" - LDFLAGS="${LDFLAGS} $(pkg-config --libs "$1")" - fi -} - -# try to auto detect CFLAGS and LDFLAGS -if command -v pkg-config >/dev/null; then - add_library "libtls" - add_library "openssl" - - case "$(uname)" in - OpenBSD) - # use libevent and imsg in base - ;; - *) - add_library "libevent" - add_library "libimsg" - ;; - esac - - case "$(uname)" in - *BSD|DragonFly|Darwin) - ;; - *) - add_library "libbsd-ctor libbsd-overlay" - ;; - 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 - } -} - -# -------- -# allow certain variables to be overridden on the command line - -for keyvals in "$@"; do - if [ "$keyvals" = "--disable-sandbox" ]; then - DISABLE_SANDBOX=1 - continue - fi - - if [ "$keyvals" = "--enable-sandbox" ]; then - DISABLE_SANDBOX=0 - continue - fi - - key=`echo $keyvals | cut -s -d '=' -f1` - if [ -z "$key" ]; then - echo "$0: invalid key-value: $keyvals" 1>&2 - exit 1 - 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. - -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 - -# -------- -# tests functions - -# 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 -} - -# 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 name var extra-cflags extra-libs msg 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}" - 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 + 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 + + cat >&3 <&3 2>&3; then + rm -f test-${1} test-${1}.d + + echo "${1}: $CC$msg succeeded" >&3 + echo "${1}$msg: yes" + echo >&3 + + return 0 + fi + + echo "${1}: $CC$msg failed $?" >&3 + echo "${1}$msg: no" + echo >&3 + + return 1 } -# 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 +# deptest name var +deptest() { + if singletest "$1" "$2" "${CFLAGS}" "${LIBS}" no; then + eval HAVE_${2}=1 + return 0 + fi + + 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,25 +250,26 @@ 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 @@ -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 " [ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include " @@ -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 " 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,13 +443,10 @@ __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" @@ -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 diff --git a/contrib/Makefile b/contrib/Makefile index 9489eea..8f81468 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -17,4 +17,4 @@ dist: ${DISTFILES} cp -R vim ${DESTDIR}/vim .PHONY: all dist -include ../Makefile.local +include ../config.mk diff --git a/have/Makefile b/have/Makefile index a2384c3..ee214d5 100644 --- a/have/Makefile +++ b/have/Makefile @@ -34,4 +34,4 @@ dist: ${DISTFILES} ${INSTALL} -m 0644 ${DISTFILES} ${DESTDIR}/ .PHONY: all dist -include ../Makefile.local +include ../config.mk diff --git a/regress/Makefile b/regress/Makefile index 2e09681..a0feea0 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -20,9 +20,16 @@ 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 @@ -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