Blob
Date:
Thu Apr 7 18:10:13 2022
UTC
Message:
master is now 1.8.3-current
#!/bin/sh## Copyright (c) 2021 Omar Polo <op@omarpolo.com>## Permission to use, copy, modify, and distribute this software for any# purpose with or without fee is hereby granted, provided that the above# copyright notice and this permission notice appear in all copies.## THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.# adapted from mandoc configure and oconfigure, thanks schwarze@ and# kristaps@!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.logexec 3> config.logecho "file config.log: writing..."# --------# default settings: initialize all vars here such that nothing is# leaked from the environment except for CC, CFLAGS and LDFLAGSVERSION=1.8.3-currentCC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make ${MAKE_FLAGS} -sf -`if [ -z "${CFLAGS}" ]; thenCFLAGS=`printf "all:\\n\\t@echo \\\$(CFLAGS)\\n" | make ${MAKE_FLAGS} -sf -`fiCFLAGS="${CFLAGS} -W -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes"CFLAGS="${CFLAGS} -Wwrite-strings -Wno-unused-parameter"if [ -z "${LDFLAGS}" ]; thenLDFLAGS=`printf "all:\\n\\t@echo \\\$(LDFLAGS)\\n" | make ${MAKE_FLAGS} -sf -`LDFLAGS="-ltls -levent -lcrypto"fiLD_IMSG=STATIC=YACC=yaccDISABLE_SANDBOX=0NEED_GNU_SOURCE=0NEED_OPENBSD_SOURCE=0PREFIX="/usr/local"BINDIR=INSTALL="install"add_library() {if pkg-config "$1"; thenCFLAGS="${CFLAGS} $(pkg-config --cflags "$1")"LDFLAGS="${LDFLAGS} $(pkg-config --libs "$1")"fi}# try to auto detect CFLAGS and LDFLAGSif command -v pkg-config >/dev/null; thenadd_library "libtls"add_library "openssl"case "$(uname)" inOpenBSD)# use libevent and imsg in base;;*)add_library "libevent"add_library "libimsg";;esaccase "$(uname)" in*BSD|DragonFly|Darwin);;*)add_library "libbsd-ctor libbsd-overlay";;esacfi# auto detect yacc/bisoncommand -v ${YACC} >/dev/null || {echo "${YACC} not found: trying bison" 1>&2echo "${YACC} not found: trying bison" 1>&3YACC=bisoncommand -v ${YACC} >/dev/null || {echo "${YACC} not found: giving up" 1>&2echo "${YACC} not found: giving up" 1>&3}}# --------# allow certain variables to be overridden on the command linefor keyvals in "$@"; doif [ "$keyvals" = "--disable-sandbox" ]; thenDISABLE_SANDBOX=1continuefiif [ "$keyvals" = "--enable-sandbox" ]; thenDISABLE_SANDBOX=0continuefikey=`echo $keyvals | cut -s -d '=' -f1`if [ -z "$key" ]; thenecho "$0: invalid key-value: $keyvals" 1>&2exit 1fival=`echo $keyvals | cut -d '=' -f 2-`case "$key" inBINDIR) 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>&2exit 1esacdone# --------# 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 valueismanual() {[ -z "${3}" ] && return 1echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&2echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&3echo 1>&3return 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 CFLAGSsingletest() {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>&3thenecho "tested ${n}: yes" 1>&2echo "tested ${n}: yes" 1>&3echo 1>&3eval 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 0elseecho "tested ${n}: no (compilation failed)" 1>&2echo "result of ${n}: ${CC} failed with exit status $?" 1>&3echo "result of compiling ${n}: no" 1>&3echo 1>&3return 1fi}# 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 0singletest "${1}" "${2}" "${3}" && return 0[ -n "${4}" ] && singletest "${1}" "${2}" "${4}" && return 0eval HAVE_${2}=0return 1}# --------# compiler optionsCOMP="${CC} ${CFLAGS} -Wno-unused -Werror"echo "selected CFLAGS=\"${CFLAGS}\"" 1>&2echo "selected CFLAGS=\"${CFLAGS}\"" 1>&3echo 1>&3if [ -n "${STATIC}" ]; thenecho "selected STATIC=\"${STATIC}\" (manual)" 1>&2echo "selected STATIC=\"${STATIC}\" (manual)" 1>&3echo 1>&3elseruntest noop STATIC -static || true[ ${HAVE_STATIC} -eq 0 ] || STATIC="-static"echo "selected STATIC=\"${STATIC}\"" 1>&2echo "selected STATIC=\"${STATIC}\"" 1>&3echo 1>&3fiif runtest noop MMD -MMD; thenCFLAGS="${CFLAGS} -MMD"echo "adding -MMD to CFLAGS" 1>&2echo "adding -MMD to CFLAGS" 1>&3fi# --------# tests for config.hruntest err ERR || trueruntest explicit_bzero EXPLICIT_BZERO || trueruntest freezero FREEZERO || trueruntest getdtablecount GETDTABLECOUNT || trueruntest getdtablesize GETDTABLESIZE || trueruntest getprogname GETPROGNAME || trueruntest imsg IMSG -lutil || trueruntest landlock LANDLOCK || trueruntest libevent LIBEVENT || trueruntest libevent2 LIBEVENT2 || trueruntest libtls LIBTLS || trueruntest openssl OPENSSL || trueruntest pr_set_name PR_SET_NAME || trueruntest program_invocation_short_name PROGRAM_INVOCATION_SHORT_NAME "" -D_GNU_SOURCE || trueruntest queue_h QUEUE_H || trueruntest reallocarray REALLOCARRAY || trueruntest recallocarray RECALLOCARRAY || trueruntest setproctitle SETPROCTITLE || trueruntest strlcat STRLCAT || trueruntest strlcpy STRLCPY || trueruntest strtonum STRTONUM || trueruntest tree_h TREE_H || trueruntest vasprintf VASPRINTF "" -D_GNU_SOURCE || trueif [ ${HAVE_LIBTLS} -eq 0 ]; thenecho "FATAL: libtls not found" 1>&2echo "FATAL: libtls not found" 1>&3exit 1fiif [ ${HAVE_OPENSSL} -eq 0 ]; thenecho "FATAL: openssl not found" 1>&2echo "FATAL: openssl not found" 1>&3exit 1fiif [ ${HAVE_LIBEVENT} -eq 0 ]; thenecho "FATAL: libevent not found" 1>&2echo "FATAL: libevent not found" 1>&3exit 1fiif [ ${HAVE_QUEUE_H} -eq 0 -o ${HAVE_IMSG} -eq 0 -o ${HAVE_TREE_H} -eq 0 ]; thenCFLAGS="${CFLAGS} -I ${PWD}/compat"fi# --------# write config.hexec > config.hcat <<__HEREDOC__#ifdef __cplusplus#error "Do not use C++."#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>"if [ ${HAVE_QUEUE_H} -eq 1 ]; thenecho "#include <sys/queue.h>"elseecho "#include <queue.h>"fiif [ ${HAVE_TREE_H} -eq 1 ]; thenecho "#include <sys/tree.h>"elseecho "#include <tree.h>"fiecho "#include <sys/types.h>"echo "#include <sys/uio.h>"echo "#include <stdint.h>"echo "#include <imsg.h>"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_LANDLOCK ${HAVE_LANDLOCK}#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_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 \${HAVE_FREEZERO} -eq 0 -o \${HAVE_REALLOCARRAY} -eq 0 -o \${HAVE_RECALLOCARRAY} -eq 0 -o \${HAVE_STRLCAT} -eq 0 -o \${HAVE_STRLCPY} -eq 0 -o \${HAVE_STRTONUM} -eq 0 ] && echo "#include <stddef.h>"if [ ${HAVE_ERR} -eq 0 ]; thenecho "extern void err(int, const char*, ...);"echo "extern void errx(int, const char*, ...);"echo "extern void warn(const char*, ...);"echo "extern void warnx(const char*, ...);"COMPAT="${COMPAT} compat/err.o"elseecho "#include <err.h>"fiif [ ${HAVE_EXPLICIT_BZERO} -eq 0 ]; thenecho "extern void explicit_bzero(void*, size_t);"COMPAT="${COMPAT} compat/explicit_bzero.o"fiif [ ${HAVE_FREEZERO} -eq 0 ]; thenecho "extern void freezero(void*, size_t);"COMPAT="${COMPAT} compat/freezero.o"fiif [ ${HAVE_GETDTABLECOUNT} -eq 0 ]; thenecho "extern int getdtablecount(void);"COMPAT="${COMPAT} compat/getdtablecount.o"fiif [ ${HAVE_GETDTABLESIZE} -eq 0 ]; thenecho "extern int getdtablesize(void);"COMPAT="${COMPAT} compat/getdtablesize.o"fiif [ ${HAVE_GETPROGNAME} -eq 0 ]; thenecho "extern const char *getprogname(void);"COMPAT="${COMPAT} compat/getprogname.o"fiif [ ${HAVE_IMSG} -eq 0 ]; thenCOMPAT="${COMPAT} compat/imsg.o compat/imsg-buffer.o"fiif [ ${HAVE_REALLOCARRAY} -eq 0 ]; thenecho "extern void *reallocarray(void*, size_t, size_t);"COMPAT="${COMPAT} compat/reallocarray.o"fiif [ ${HAVE_RECALLOCARRAY} -eq 0 ]; thenecho "extern void *recallocarray(void*, size_t, size_t, size_t);"COMPAT="${COMPAT} compat/recallocarray.o"fiif [ ${HAVE_SETPROCTITLE} -eq 0 ]; thenecho "extern void setproctitle(const char *fmt, ...);"COMPAT="${COMPAT} compat/setproctitle.o"fiif [ ${HAVE_STRLCAT} -eq 0 ]; thenecho "extern size_t strlcat(char*, const char*, size_t);"COMPAT="${COMPAT} compat/strlcat.o"fiif [ ${HAVE_STRLCPY} -eq 0 ]; thenecho "extern size_t strlcpy(char*, const char*, size_t);"COMPAT="${COMPAT} compat/strlcpy.o"fiif [ ${HAVE_STRTONUM} -eq 0 ]; thenecho "extern long long strtonum(const char*, long long, long long, const char**);"COMPAT="${COMPAT} compat/strtonum.o"fiif [ ${HAVE_VASPRINTF} -eq 0 ]; thenecho "extern int vasprintf(char**, const char*, va_list);"COMPAT="${COMPAT} compat/vasprintf.o"fiecho "file config.h: written" 1>&2echo "file config.h: written" 1>&3# --------# tests for Makefile.localGMID_SRCS="dirs.c ex.c fcgi.c gmid.c iri.c log.c mime.c proxy.c puny.c"GMID_SRCS="${GMID_SRCS} sandbox.c server.c utf8.c utils.c y.tab.c"GMID_OBJS=for src in ${GMID_SRCS}; doGMID_OBJS="${GMID_OBJS} ${src%.c}.o"doneGMID_OBJS="${GMID_OBJS} ${COMPAT}"GG_SRCS="gg.c iri.c utf8.c"GG_OBJS=for src in ${GG_SRCS}; doGG_OBJS="${GG_OBJS} ${src%.c}.o"doneGG_OBJS="${GG_OBJS} ${COMPAT}"ALL_SRCS="${GMID_SRCS} gg.c"exec > Makefile.local[ -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"[ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444"cat << __HEREDOC__CC = ${CC}CFLAGS = ${CFLAGS}LDFLAGS = ${LDFLAGS} ${LD_IMSG}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}GMID_OBJS = ${GMID_OBJS}GG_OBJS = ${GG_OBJS}VERSION = ${VERSION}__HEREDOC__printf "COMPAT ="for comp in ${COMPAT}; doprintf " %s/%s" "$PWD" "$comp"doneprintf "\n\n"# Include dependency infofor src in ${ALL_SRCS}; doprintf "%s\n" "-include ${src%.c}.d"donefor comp in ${COMPAT}; doprintf "%s\n" "-include ${comp%.o}.d"doneecho "file Makefile.local: written" 1>&2echo "file Makefile.local: written" 1>&3exit 0
Omar Polo