170f041f9Sjoerg#!/bin/sh 270f041f9Sjoerg# 3*6167eca2Schristos# Id: configure,v 1.70 2019/03/06 16:04:31 schwarze Exp 437ef69edSchristos# 5*6167eca2Schristos# Copyright (c) 2014-2019 Ingo Schwarze <schwarze@openbsd.org> 670f041f9Sjoerg# 770f041f9Sjoerg# Permission to use, copy, modify, and distribute this software for any 870f041f9Sjoerg# purpose with or without fee is hereby granted, provided that the above 970f041f9Sjoerg# copyright notice and this permission notice appear in all copies. 1070f041f9Sjoerg# 1170f041f9Sjoerg# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1270f041f9Sjoerg# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1370f041f9Sjoerg# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1470f041f9Sjoerg# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1570f041f9Sjoerg# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1670f041f9Sjoerg# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1770f041f9Sjoerg# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1870f041f9Sjoerg 1970f041f9Sjoergset -e 2070f041f9Sjoerg 21f47368cfSchristos[ -w config.log ] && mv config.log config.log.old 22f47368cfSchristos[ -w config.h ] && mv config.h config.h.old 2370f041f9Sjoerg 24fec65c98Schristos# Output file descriptor usage: 25fec65c98Schristos# 1 (stdout): config.h, Makefile.local 26fec65c98Schristos# 2 (stderr): original stderr, usually to the console 27fec65c98Schristos# 3: config.log 2870f041f9Sjoerg 29fec65c98Schristosexec 3> config.log 3014e7489eSchristosecho "file config.log: writing..." 31fec65c98Schristos 32fec65c98Schristos# --- default settings ------------------------------------------------- 33fec65c98Schristos# Initialize all variables here, 34fec65c98Schristos# such that nothing can leak in from the environment. 35fec65c98Schristos 3637ef69edSchristosSOURCEDIR=`dirname "$0"` 3737ef69edSchristos 3814e7489eSchristosMANPATH_BASE="/usr/share/man:/usr/X11R6/man" 39f47368cfSchristosMANPATH_DEFAULT="/usr/share/man:/usr/X11R6/man:/usr/local/man" 40*6167eca2SchristosOSENUM= 41fec65c98SchristosOSNAME= 427275494cSchristosMAKEFLAGS= 4337ef69edSchristosUTF8_LOCALE= 44fec65c98Schristos 45f6f53c25Sjoergif [ -z "${CC}" ]; then 4637ef69edSchristos CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -` 47f6f53c25Sjoergfi 4837ef69edSchristosCFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings" 4937ef69edSchristosCFLAGS="${CFLAGS} -Wno-unused-parameter" 50f47368cfSchristosLDADD= 51f47368cfSchristosLDFLAGS= 5237ef69edSchristosLD_NANOSLEEP= 53f47368cfSchristosLD_OHASH= 5437ef69edSchristosLD_RECVMSG= 5514e7489eSchristosSTATIC= 56fec65c98Schristos 57fec65c98SchristosBUILD_CGI=0 5837ef69edSchristosBUILD_CATMAN=0 5937ef69edSchristosINSTALL_LIBMANDOC=0 60fec65c98Schristos 6137ef69edSchristosHAVE_CMSG= 6237ef69edSchristosHAVE_CMSG_XPG42=0 63fec65c98SchristosHAVE_DIRENT_NAMLEN= 6437ef69edSchristosHAVE_EFTYPE= 6537ef69edSchristosHAVE_ENDIAN= 66f47368cfSchristosHAVE_ERR= 67fec65c98SchristosHAVE_FTS= 6837ef69edSchristosHAVE_FTS_COMPARE_CONST= 69f47368cfSchristosHAVE_GETLINE= 70fec65c98SchristosHAVE_GETSUBOPT= 71f47368cfSchristosHAVE_ISBLANK= 72*6167eca2SchristosHAVE_LESS_T= 73f47368cfSchristosHAVE_MKDTEMP= 7437ef69edSchristosHAVE_NANOSLEEP= 7537ef69edSchristosHAVE_NTOHL= 7637ef69edSchristosHAVE_O_DIRECTORY= 7737ef69edSchristosHAVE_OHASH= 7837ef69edSchristosHAVE_PATH_MAX= 79f47368cfSchristosHAVE_PLEDGE= 80f47368cfSchristosHAVE_PROGNAME= 81fec65c98SchristosHAVE_REALLOCARRAY= 8214e7489eSchristosHAVE_RECALLOCARRAY= 8337ef69edSchristosHAVE_RECVMSG= 84f47368cfSchristosHAVE_REWB_BSD= 85f47368cfSchristosHAVE_REWB_SYSV= 86f47368cfSchristosHAVE_SANDBOX_INIT= 87fec65c98SchristosHAVE_STRCASESTR= 88f47368cfSchristosHAVE_STRINGLIST= 89fec65c98SchristosHAVE_STRLCAT= 90fec65c98SchristosHAVE_STRLCPY= 9114e7489eSchristosHAVE_STRNDUP= 92fec65c98SchristosHAVE_STRPTIME= 93fec65c98SchristosHAVE_STRSEP= 94fec65c98SchristosHAVE_STRTONUM= 9537ef69edSchristosHAVE_SYS_ENDIAN= 96f47368cfSchristosHAVE_VASPRINTF= 97fec65c98SchristosHAVE_WCHAR= 98fec65c98Schristos 99*6167eca2SchristosNEED_GNU_SOURCE=0 100*6167eca2SchristosNEED_OPENBSD_SOURCE=0 101*6167eca2Schristos 102fec65c98SchristosPREFIX="/usr/local" 103fec65c98SchristosBINDIR= 104fec65c98SchristosSBINDIR= 10514e7489eSchristosBIN_FROM_SBIN= 106fec65c98SchristosINCLUDEDIR= 107fec65c98SchristosLIBDIR= 108fec65c98SchristosMANDIR= 109fec65c98SchristosHOMEBREWDIR= 110fec65c98Schristos 111fec65c98SchristosWWWPREFIX="/var/www" 112fec65c98SchristosHTDOCDIR= 113fec65c98SchristosCGIBINDIR= 114fec65c98Schristos 115fec65c98SchristosBINM_APROPOS="apropos" 11637ef69edSchristosBINM_CATMAN="catman" 117fec65c98SchristosBINM_MAKEWHATIS="makewhatis" 118f47368cfSchristosBINM_MAN="man" 119f47368cfSchristosBINM_SOELIM="soelim" 120f47368cfSchristosBINM_WHATIS="whatis" 121fec65c98SchristosMANM_MAN="man" 122f47368cfSchristosMANM_MANCONF="man.conf" 123fec65c98SchristosMANM_MDOC="mdoc" 124fec65c98SchristosMANM_ROFF="roff" 125fec65c98SchristosMANM_EQN="eqn" 126fec65c98SchristosMANM_TBL="tbl" 127fec65c98Schristos 128fec65c98SchristosINSTALL="install" 129fec65c98SchristosINSTALL_PROGRAM= 130fec65c98SchristosINSTALL_LIB= 131fec65c98SchristosINSTALL_MAN= 132fec65c98SchristosINSTALL_DATA= 13337ef69edSchristosLN="ln -f" 134fec65c98Schristos 135fec65c98Schristos# --- manual settings from configure.local ----------------------------- 136fec65c98Schristos 137f47368cfSchristosif [ -r ./configure.local ]; then 13814e7489eSchristos echo "file configure.local: reading..." 1>&2 13914e7489eSchristos echo "file configure.local: reading..." 1>&3 140fec65c98Schristos cat ./configure.local 1>&3 141fec65c98Schristos . ./configure.local 142fec65c98Schristoselse 14314e7489eSchristos echo "file configure.local: no (fully automatic configuration)" 1>&2 14414e7489eSchristos echo "file configure.local: no (fully automatic configuration)" 1>&3 145fec65c98Schristosfi 146fec65c98Schristosecho 1>&3 147fec65c98Schristos 14814e7489eSchristos# --- tests functions -------------------------------------------------- 149fec65c98Schristos 150fec65c98Schristos# Check whether this HAVE_ setting is manually overridden. 151fec65c98Schristos# If yes, use the override, if no, do not decide anything yet. 15214e7489eSchristos# Arguments: test file name, test var name, manual value 153fec65c98Schristosismanual() { 15437ef69edSchristos [ -z "${3}" ] && return 1 15514e7489eSchristos echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&2 15614e7489eSchristos echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&3 157fec65c98Schristos echo 1>&3 158fec65c98Schristos return 0 15970f041f9Sjoerg} 16070f041f9Sjoerg 161fec65c98Schristos# Run a single autoconfiguration test. 162fec65c98Schristos# In case of success, enable the feature. 163fec65c98Schristos# In case of failure, do not decide anything yet. 16414e7489eSchristos# Arguments: test file name, test var name, additional CFLAGS 165fec65c98Schristossingletest() { 166*6167eca2Schristos n=${1}${3}${4} 167fec65c98Schristos cat 1>&3 << __HEREDOC__ 168*6167eca2Schristostesting ${n} ... 169*6167eca2Schristos${COMP} -o test-${1} test-${1}.c ${3} ${4} 170fec65c98Schristos__HEREDOC__ 171fec65c98Schristos 172*6167eca2Schristos if ${COMP} -o "test-${1}" "${SOURCEDIR}/test-${1}.c" ${3} ${4} 1>&3 2>&3 17337ef69edSchristos then 174*6167eca2Schristos echo "partial result of ${n}: ${CC} succeeded" 1>&3 175fec65c98Schristos else 176*6167eca2Schristos echo "result of ${n}: ${CC} failed with exit status $?" 1>&3 177*6167eca2Schristos echo "result of compiling ${n}: no" 1>&3 178fec65c98Schristos echo 1>&3 179fec65c98Schristos return 1 180fec65c98Schristos fi 181fec65c98Schristos 182fec65c98Schristos if ./test-${1} 1>&3 2>&3; then 183*6167eca2Schristos echo "tested ${n}: yes" 1>&2 184*6167eca2Schristos echo "result of running ${n}: yes" 1>&3 185fec65c98Schristos echo 1>&3 186fec65c98Schristos eval HAVE_${2}=1 187*6167eca2Schristos [ "X$3" = "X-D_GNU_SOURCE" ] && NEED_GNU_SOURCE=1 188*6167eca2Schristos [ "X$3" = "X-D_OPENBSD_SOURCE" ] && NEED_OPENBSD_SOURCE=1 189fec65c98Schristos rm "test-${1}" 190fec65c98Schristos return 0 191fec65c98Schristos else 192*6167eca2Schristos echo "result of ${n}: execution failed with exit status $?" 1>&3 193*6167eca2Schristos echo "result of running ${n}: no" 1>&3 194fec65c98Schristos echo 1>&3 195fec65c98Schristos rm "test-${1}" 196fec65c98Schristos return 1 197fec65c98Schristos fi 198fec65c98Schristos} 199fec65c98Schristos 200fec65c98Schristos# Run a complete autoconfiguration test, including the check for 201fec65c98Schristos# a manual override and disabling the feature on failure. 20214e7489eSchristos# Arguments: test file name, test var name, additional CFLAGS 203fec65c98Schristosruntest() { 204fec65c98Schristos eval _manual=\${HAVE_${2}} 20537ef69edSchristos ismanual "${1}" "${2}" "${_manual}" && return 0 206*6167eca2Schristos singletest "${1}" "${2}" "${3}" "${4}" && return 0 207*6167eca2Schristos echo "tested ${1}${3}${4}: no" 1>&2 208fec65c98Schristos eval HAVE_${2}=0 209fec65c98Schristos return 1 210fec65c98Schristos} 211fec65c98Schristos 21237ef69edSchristos# Select a UTF-8 locale. 21337ef69edSchristosget_locale() { 21437ef69edSchristos [ -n "${HAVE_WCHAR}" ] && [ "${HAVE_WCHAR}" -eq 0 ] && return 0 21537ef69edSchristos ismanual UTF8_LOCALE UTF8_LOCALE "$UTF8_LOCALE" && return 0 21614e7489eSchristos echo "testing UTF8_LOCALE ..." 1>&3 21737ef69edSchristos UTF8_LOCALE=`locale -a | grep -i '^en_US\.UTF-*8$' | head -n 1` 21837ef69edSchristos if [ -z "${UTF8_LOCALE}" ]; then 21937ef69edSchristos UTF8_LOCALE=`locale -a | grep -i '\.UTF-*8' | head -n 1` 22037ef69edSchristos [ -n "${UTF8_LOCALE}" ] || return 1 22137ef69edSchristos fi 22214e7489eSchristos echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&2 22314e7489eSchristos echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&3 22437ef69edSchristos echo 1>&3 22537ef69edSchristos return 0; 22637ef69edSchristos} 22737ef69edSchristos 228*6167eca2Schristos# --- operating system ------------------------------------------------- 229*6167eca2Schristos 230*6167eca2Schristosif [ -n "${OSENUM}" ]; then 231*6167eca2Schristos echo "OSENUM specified manually: ${OSENUM}" 1>&2 232*6167eca2Schristos echo "OSENUM specified manually: ${OSENUM}" 1>&3 233*6167eca2Schristoselse 234*6167eca2Schristos OSDETECT=`uname` 235*6167eca2Schristos if [ "X${OSDETECT}" = "XNetBSD" ]; then 236*6167eca2Schristos OSENUM=MANDOC_OS_NETBSD 237*6167eca2Schristos elif [ "X${OSDETECT}" = "XOpenBSD" ]; then 238*6167eca2Schristos OSENUM=MANDOC_OS_OPENBSD 239*6167eca2Schristos else 240*6167eca2Schristos OSENUM=MANDOC_OS_OTHER 241*6167eca2Schristos fi 242*6167eca2Schristos echo "tested operating system: ${OSDETECT} -> OSENUM=${OSENUM}" 1>&2 243*6167eca2Schristos echo "tested operating system: ${OSDETECT} -> OSENUM=${OSENUM}" 1>&3 244*6167eca2Schristos unset OSDETECT 245*6167eca2Schristosfi 246*6167eca2Schristosecho 1>&3 247*6167eca2Schristos 24814e7489eSchristos# --- compiler options ------------------------------------------------- 24914e7489eSchristos 250*6167eca2SchristosDEFCFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter" 251*6167eca2Schristos 25214e7489eSchristosif [ -n "${CFLAGS}" ]; then 25314e7489eSchristos COMP="${CC} ${CFLAGS} -Wno-unused -Werror" 254*6167eca2Schristoselse 255*6167eca2Schristos COMP="${CC} ${DEFCFLAGS} -Wno-unused -Werror" 256*6167eca2Schristosfi 25714e7489eSchristosecho -n "tested ${CC} -W: " 1>&2 25814e7489eSchristosecho -n "testing ${CC} -W: " 1>&3 25914e7489eSchristosruntest noop WFLAG || true 260*6167eca2Schristos 261*6167eca2Schristosif [ -n "${CFLAGS}" ]; then 262*6167eca2Schristos echo "CFLAGS specified manually:" 1>&3 263*6167eca2Schristoselif [ ${HAVE_WFLAG} -eq 0 ]; then 26414e7489eSchristos CFLAGS="-g" 265*6167eca2Schristoselse 266*6167eca2Schristos CFLAGS="${DEFCFLAGS}" 26714e7489eSchristosfi 26814e7489eSchristosecho "selected CFLAGS=\"${CFLAGS}\"" 1>&2 26914e7489eSchristosecho "selected CFLAGS=\"${CFLAGS}\"" 1>&3 27014e7489eSchristosecho 1>&3 271*6167eca2Schristos 272*6167eca2SchristosCOMP="${CC} ${CFLAGS}" 273*6167eca2Schristos[ ${HAVE_WFLAG} -eq 0 ] || COMP="${COMP} -Wno-unused -Werror" 27414e7489eSchristos 27514e7489eSchristosif [ -n "${STATIC}" ]; then 27614e7489eSchristos echo "selected STATIC=\"${STATIC}\" (manual)" 1>&2 27714e7489eSchristos echo "selected STATIC=\"${STATIC}\" (manual)" 1>&3 27814e7489eSchristos echo 1>&3 27914e7489eSchristoselse 28014e7489eSchristos runtest noop STATIC -static || true 28114e7489eSchristos [ ${HAVE_STATIC} -eq 0 ] || STATIC="-static" 28214e7489eSchristos echo "selected STATIC=\"${STATIC}\"" 1>&2 28314e7489eSchristos echo "selected STATIC=\"${STATIC}\"" 1>&3 28414e7489eSchristos echo 1>&3 28514e7489eSchristosfi 28614e7489eSchristos 28714e7489eSchristos# --- tests for config.h ---------------------------------------------- 28837ef69edSchristos 289fec65c98Schristos# --- library functions --- 290fec65c98Schristosruntest dirent-namlen DIRENT_NAMLEN || true 29137ef69edSchristosruntest be32toh ENDIAN || true 29237ef69edSchristosruntest be32toh SYS_ENDIAN -DSYS_ENDIAN || true 29337ef69edSchristosruntest EFTYPE EFTYPE || true 294f47368cfSchristosruntest err ERR || true 295f47368cfSchristosruntest getline GETLINE || true 296*6167eca2Schristossingletest getsubopt GETSUBOPT || \ 297*6167eca2Schristos runtest getsubopt GETSUBOPT -D_GNU_SOURCE || true 298f47368cfSchristosruntest isblank ISBLANK || true 299f47368cfSchristosruntest mkdtemp MKDTEMP || true 30037ef69edSchristosruntest ntohl NTOHL || true 30137ef69edSchristosruntest O_DIRECTORY O_DIRECTORY || true 30237ef69edSchristosruntest PATH_MAX PATH_MAX || true 303f47368cfSchristosruntest pledge PLEDGE || true 304f47368cfSchristosruntest sandbox_init SANDBOX_INIT || true 305f47368cfSchristosruntest progname PROGNAME || true 306*6167eca2Schristossingletest reallocarray REALLOCARRAY || \ 307*6167eca2Schristos runtest reallocarray REALLOCARRAY -D_OPENBSD_SOURCE || true 308*6167eca2Schristossingletest recallocarray RECALLOCARRAY || \ 309*6167eca2Schristos runtest recallocarray RECALLOCARRAY -D_OPENBSD_SOURCE || true 310f47368cfSchristosruntest rewb-bsd REWB_BSD || true 311f47368cfSchristosruntest rewb-sysv REWB_SYSV || true 312*6167eca2Schristossingletest strcasestr STRCASESTR || \ 313*6167eca2Schristos runtest strcasestr STRCASESTR -D_GNU_SOURCE || true 314f47368cfSchristosruntest stringlist STRINGLIST || true 315fec65c98Schristosruntest strlcat STRLCAT || true 316fec65c98Schristosruntest strlcpy STRLCPY || true 31714e7489eSchristosruntest strndup STRNDUP || true 318*6167eca2Schristossingletest strptime STRPTIME || \ 319*6167eca2Schristos runtest strptime STRPTIME -D_GNU_SOURCE || true 320fec65c98Schristosruntest strsep STRSEP || true 321*6167eca2Schristossingletest strtonum STRTONUM || \ 322*6167eca2Schristos runtest strtonum STRTONUM -D_OPENBSD_SOURCE || true 323*6167eca2Schristossingletest vasprintf VASPRINTF || \ 324*6167eca2Schristos runtest vasprintf VASPRINTF -D_GNU_SOURCE || true 325fec65c98Schristos 32637ef69edSchristosif [ ${HAVE_ENDIAN} -eq 0 -a \ 32737ef69edSchristos ${HAVE_SYS_ENDIAN} -eq 0 -a \ 32837ef69edSchristos ${HAVE_NTOHL} -eq 0 ]; then 32937ef69edSchristos echo "FATAL: no endian conversion functions found" 1>&2 33037ef69edSchristos echo "FATAL: no endian conversion functions found" 1>&3 33137ef69edSchristos exit 1 332f47368cfSchristosfi 333fec65c98Schristos 33437ef69edSchristosif ismanual fts FTS ${HAVE_FTS}; then 33537ef69edSchristos HAVE_FTS_COMPARE_CONST=0 33637ef69edSchristoselif runtest fts FTS_COMPARE_CONST -DFTS_COMPARE_CONST; then 33737ef69edSchristos HAVE_FTS=1 338fec65c98Schristoselse 33937ef69edSchristos runtest fts FTS || true 34037ef69edSchristosfi 34137ef69edSchristos 342*6167eca2Schristosif ismanual "less -T" LESS_T ${HAVE_LESS_T}; then 343*6167eca2Schristos : 344*6167eca2Schristoselif less -ET /dev/null test-noop.c 1>/dev/null 2>&3; then 345*6167eca2Schristos HAVE_LESS_T=1 346*6167eca2Schristos echo "tested less -T: yes" 1>&2 347*6167eca2Schristos echo "tested less -T: yes" 1>&3 348*6167eca2Schristos echo 1>&3 349*6167eca2Schristoselse 350*6167eca2Schristos HAVE_LESS_T=0 351*6167eca2Schristos echo "tested less -T: no" 1>&2 352*6167eca2Schristos echo "tested less -T: no" 1>&3 353*6167eca2Schristos echo 1>&3 354*6167eca2Schristosfi 355*6167eca2Schristos 35637ef69edSchristos# --- wide character and locale support --- 35737ef69edSchristosif get_locale; then 358*6167eca2Schristos singletest wchar WCHAR -DUTF8_LOCALE=\"${UTF8_LOCALE}\" || \ 359*6167eca2Schristos runtest wchar WCHAR -D_GNU_SOURCE \ 360*6167eca2Schristos -DUTF8_LOCALE=\"${UTF8_LOCALE}\" || true 36137ef69edSchristoselse 36237ef69edSchristos HAVE_WCHAR=0 36314e7489eSchristos echo "tested wchar: no (no UTF8_LOCALE)" 1>&2 36414e7489eSchristos echo "tested wchar: no (no UTF8_LOCALE)" 1>&3 36514e7489eSchristos echo 1>&3 36637ef69edSchristosfi 36737ef69edSchristos 36837ef69edSchristos# --- nanosleep --- 36937ef69edSchristosif [ -n "${LD_NANOSLEEP}" ]; then 37037ef69edSchristos runtest nanosleep NANOSLEEP "${LD_NANOSLEEP}" || true 37137ef69edSchristoselif singletest nanosleep NANOSLEEP; then 37237ef69edSchristos : 37337ef69edSchristoselif runtest nanosleep NANOSLEEP "-lrt"; then 37437ef69edSchristos LD_NANOSLEEP="-lrt" 37537ef69edSchristosfi 37637ef69edSchristosif [ "${HAVE_NANOSLEEP}" -eq 0 ]; then 37737ef69edSchristos echo "FATAL: nanosleep: no" 1>&2 37837ef69edSchristos echo "FATAL: nanosleep: no" 1>&3 37937ef69edSchristos exit 1 38037ef69edSchristosfi 38137ef69edSchristos 38237ef69edSchristosif [ ${BUILD_CATMAN} -gt 0 ]; then 38337ef69edSchristos # --- recvmsg --- 38437ef69edSchristos if [ -n "${LD_RECVMSG}" ]; then 38537ef69edSchristos runtest recvmsg RECVMSG "${LD_RECVMSG}" || true 38637ef69edSchristos elif singletest recvmsg RECVMSG; then 38737ef69edSchristos : 38837ef69edSchristos elif runtest recvmsg RECVMSG "-lsocket"; then 38937ef69edSchristos LD_RECVMSG="-lsocket" 39037ef69edSchristos fi 39137ef69edSchristos if [ "${HAVE_RECVMSG}" -eq 0 ]; then 39237ef69edSchristos echo "FATAL: recvmsg: no" 1>&2 39337ef69edSchristos echo "FATAL: recvmsg: no" 1>&3 39437ef69edSchristos echo "Without recvmsg(2), you cannot BUILD_CATMAN." 1>&2 39537ef69edSchristos exit 1 39637ef69edSchristos fi 39737ef69edSchristos 39837ef69edSchristos # --- cmsg --- 39937ef69edSchristos if singletest cmsg CMSG; then 40037ef69edSchristos : 40137ef69edSchristos elif runtest cmsg CMSG "-D_XPG4_2"; then 40237ef69edSchristos HAVE_CMSG_XPG42=1 40337ef69edSchristos fi 40437ef69edSchristos if [ "${HAVE_CMSG}" -eq 0 ]; then 40537ef69edSchristos echo "FATAL: cmsg: no" 1>&2 40637ef69edSchristos echo "FATAL: cmsg: no" 1>&3 40737ef69edSchristos echo "Without CMSG_FIRSTHDR(3), you cannot BUILD_CATMAN." 1>&2 40837ef69edSchristos exit 1 40937ef69edSchristos fi 410fec65c98Schristosfi 411fec65c98Schristos 412fec65c98Schristos# --- ohash --- 41337ef69edSchristosif ismanual ohash OHASH "${HAVE_OHASH}"; then 414fec65c98Schristos : 415f47368cfSchristoselif [ -n "${LD_OHASH}" ]; then 416f47368cfSchristos runtest ohash OHASH "${LD_OHASH}" || true 417fec65c98Schristoselif singletest ohash OHASH; then 418fec65c98Schristos : 419fec65c98Schristoselif runtest ohash OHASH "-lutil"; then 420f47368cfSchristos LD_OHASH="-lutil" 421f47368cfSchristosfi 422f47368cfSchristosif [ "${HAVE_OHASH}" -eq 0 ]; then 423f47368cfSchristos LD_OHASH= 424fec65c98Schristosfi 425fec65c98Schristos 426f47368cfSchristos# --- LDADD --- 42737ef69edSchristosLDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz" 42814e7489eSchristosecho "selected LDADD=\"${LDADD}\"" 1>&2 42914e7489eSchristosecho "selected LDADD=\"${LDADD}\"" 1>&3 430fec65c98Schristosecho 1>&3 431fec65c98Schristos 432fec65c98Schristos# --- write config.h --- 433fec65c98Schristos 434fec65c98Schristosexec > config.h 435fec65c98Schristos 436fec65c98Schristoscat << __HEREDOC__ 437f47368cfSchristos#ifdef __cplusplus 438f47368cfSchristos#error "Do not use C++. See the INSTALL file." 439f47368cfSchristos#endif 440f47368cfSchristos 44137ef69edSchristos#if !defined(__GNUC__) || (__GNUC__ < 4) 44237ef69edSchristos#define __attribute__(x) 44337ef69edSchristos#endif 444fec65c98Schristos 4455a13d7fdSuwe#ifdef HAVE_NBTOOL_CONFIG_H 4465a13d7fdSuwe#include "nbtool_config.h" 4475a13d7fdSuwe#endif 4485a13d7fdSuwe 449fec65c98Schristos__HEREDOC__ 450*6167eca2Schristos[ ${NEED_GNU_SOURCE} -eq 0 ] || echo "#define _GNU_SOURCE" 451*6167eca2Schristos[ ${NEED_OPENBSD_SOURCE} -eq 0 ] || echo "#define _OPENBSD_SOURCE" 452fec65c98Schristos 45314e7489eSchristos[ ${HAVE_GETLINE} -eq 0 -o \ 45414e7489eSchristos ${HAVE_REALLOCARRAY} -eq 0 -o ${HAVE_RECALLOCARRAY} -eq 0 -o \ 45514e7489eSchristos ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 -o \ 45614e7489eSchristos ${HAVE_STRNDUP} -eq 0 ] \ 457fec65c98Schristos && echo "#include <sys/types.h>" 458f47368cfSchristos[ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include <stdarg.h>" 459f47368cfSchristos[ ${HAVE_GETLINE} -eq 0 ] && echo "#include <stdio.h>" 460fec65c98Schristos 46170f041f9Sjoergecho 462f47368cfSchristosecho "#define MAN_CONF_FILE \"/etc/${MANM_MANCONF}\"" 46314e7489eSchristosecho "#define MANPATH_BASE \"${MANPATH_BASE}\"" 464f47368cfSchristosecho "#define MANPATH_DEFAULT \"${MANPATH_DEFAULT}\"" 465*6167eca2Schristosecho "#define OSENUM ${OSENUM}" 466fec65c98Schristos[ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\"" 46737ef69edSchristos[ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\"" 468fec65c98Schristos[ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\"" 46920db6447Schristos[ ${HAVE_EFTYPE} -eq 0 ] && echo "#ifndef EFTYPE" && \ 47020db6447Schristos echo "#define EFTYPE EINVAL" && echo "#endif" 47137ef69edSchristos[ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0" 47237ef69edSchristos[ ${HAVE_PATH_MAX} -eq 0 ] && echo "#define PATH_MAX 4096" 47337ef69edSchristosif [ ${HAVE_ENDIAN} -eq 0 -a ${HAVE_SYS_ENDIAN} -eq 0 ]; then 47437ef69edSchristos echo "#define be32toh ntohl" 47537ef69edSchristos echo "#define htobe32 htonl" 47637ef69edSchristosfi 477fec65c98Schristos 478fec65c98Schristoscat << __HEREDOC__ 4795c413d0cSchristos#ifndef HAVE_NBTOOL_CONFIG_H 48037ef69edSchristos#define HAVE_CMSG_XPG42 ${HAVE_CMSG_XPG42} 481fec65c98Schristos#define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN} 48237ef69edSchristos#define HAVE_ENDIAN ${HAVE_ENDIAN} 483f47368cfSchristos#define HAVE_ERR ${HAVE_ERR} 484fec65c98Schristos#define HAVE_FTS ${HAVE_FTS} 48537ef69edSchristos#define HAVE_FTS_COMPARE_CONST ${HAVE_FTS_COMPARE_CONST} 486f47368cfSchristos#define HAVE_GETLINE ${HAVE_GETLINE} 487fec65c98Schristos#define HAVE_GETSUBOPT ${HAVE_GETSUBOPT} 488f47368cfSchristos#define HAVE_ISBLANK ${HAVE_ISBLANK} 489*6167eca2Schristos#define HAVE_LESS_T ${HAVE_LESS_T} 490f47368cfSchristos#define HAVE_MKDTEMP ${HAVE_MKDTEMP} 49137ef69edSchristos#define HAVE_NTOHL ${HAVE_NTOHL} 492f47368cfSchristos#define HAVE_PLEDGE ${HAVE_PLEDGE} 493f47368cfSchristos#define HAVE_PROGNAME ${HAVE_PROGNAME} 494fec65c98Schristos#define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY} 49514e7489eSchristos#define HAVE_RECALLOCARRAY ${HAVE_RECALLOCARRAY} 496f47368cfSchristos#define HAVE_REWB_BSD ${HAVE_REWB_BSD} 497f47368cfSchristos#define HAVE_REWB_SYSV ${HAVE_REWB_SYSV} 498f47368cfSchristos#define HAVE_SANDBOX_INIT ${HAVE_SANDBOX_INIT} 499fec65c98Schristos#define HAVE_STRCASESTR ${HAVE_STRCASESTR} 500f47368cfSchristos#define HAVE_STRINGLIST ${HAVE_STRINGLIST} 501fec65c98Schristos#define HAVE_STRLCAT ${HAVE_STRLCAT} 502fec65c98Schristos#define HAVE_STRLCPY ${HAVE_STRLCPY} 50314e7489eSchristos#define HAVE_STRNDUP ${HAVE_STRNDUP} 504fec65c98Schristos#define HAVE_STRPTIME ${HAVE_STRPTIME} 505fec65c98Schristos#define HAVE_STRSEP ${HAVE_STRSEP} 506fec65c98Schristos#define HAVE_STRTONUM ${HAVE_STRTONUM} 50737ef69edSchristos#define HAVE_SYS_ENDIAN ${HAVE_SYS_ENDIAN} 508f47368cfSchristos#define HAVE_VASPRINTF ${HAVE_VASPRINTF} 509fec65c98Schristos#define HAVE_WCHAR ${HAVE_WCHAR} 510fec65c98Schristos#define HAVE_OHASH ${HAVE_OHASH} 5115c413d0cSchristos#endif 512fec65c98Schristos 513fec65c98Schristos#define BINM_APROPOS "${BINM_APROPOS}" 51437ef69edSchristos#define BINM_CATMAN "${BINM_CATMAN}" 515fec65c98Schristos#define BINM_MAKEWHATIS "${BINM_MAKEWHATIS}" 516f47368cfSchristos#define BINM_MAN "${BINM_MAN}" 517f47368cfSchristos#define BINM_SOELIM "${BINM_SOELIM}" 518f47368cfSchristos#define BINM_WHATIS "${BINM_WHATIS}" 519fec65c98Schristos 520fec65c98Schristos__HEREDOC__ 521fec65c98Schristos 522f47368cfSchristosif [ ${HAVE_ERR} -eq 0 ]; then 523f47368cfSchristos echo "extern void err(int, const char *, ...);" 524f47368cfSchristos echo "extern void errx(int, const char *, ...);" 525f47368cfSchristos echo "extern void warn(const char *, ...);" 526f47368cfSchristos echo "extern void warnx(const char *, ...);" 527f47368cfSchristosfi 528f47368cfSchristos 529f47368cfSchristos[ ${HAVE_GETLINE} -eq 0 ] && \ 530f47368cfSchristos echo "extern ssize_t getline(char **, size_t *, FILE *);" 531fec65c98Schristos 532fec65c98Schristos[ ${HAVE_GETSUBOPT} -eq 0 ] && \ 533fec65c98Schristos echo "extern int getsubopt(char **, char * const *, char **);" 534fec65c98Schristos 535c1b5cff4Sjoergif [ ${HAVE_ISBLANK} -eq 0 ]; then 536c1b5cff4Sjoerg echo "#undef isblank" 537f47368cfSchristos echo "extern int isblank(int);" 538c1b5cff4Sjoergfi 539f47368cfSchristos 540f47368cfSchristos[ ${HAVE_MKDTEMP} -eq 0 ] && \ 541f47368cfSchristos echo "extern char *mkdtemp(char *);" 542f47368cfSchristos 543f47368cfSchristosif [ ${HAVE_PROGNAME} -eq 0 ]; then 544f47368cfSchristos echo "extern const char *getprogname(void);" 545f47368cfSchristos echo "extern void setprogname(const char *);" 546f47368cfSchristosfi 547f47368cfSchristos 548fec65c98Schristos[ ${HAVE_REALLOCARRAY} -eq 0 ] && \ 549fec65c98Schristos echo "extern void *reallocarray(void *, size_t, size_t);" 550fec65c98Schristos 55114e7489eSchristos[ ${HAVE_RECALLOCARRAY} -eq 0 ] && \ 55214e7489eSchristos echo "extern void *recallocarray(void *, size_t, size_t, size_t);" 55314e7489eSchristos 554fec65c98Schristos[ ${HAVE_STRCASESTR} -eq 0 ] && \ 555fec65c98Schristos echo "extern char *strcasestr(const char *, const char *);" 556fec65c98Schristos 557fec65c98Schristos[ ${HAVE_STRLCAT} -eq 0 ] && \ 558fec65c98Schristos echo "extern size_t strlcat(char *, const char *, size_t);" 559fec65c98Schristos 560fec65c98Schristos[ ${HAVE_STRLCPY} -eq 0 ] && \ 561fec65c98Schristos echo "extern size_t strlcpy(char *, const char *, size_t);" 562fec65c98Schristos 56314e7489eSchristos[ ${HAVE_STRNDUP} -eq 0 ] && \ 56414e7489eSchristos echo "extern char *strndup(const char *, size_t);" 56514e7489eSchristos 56614e7489eSchristos[ ${HAVE_STRSEP} -eq 0 ] && \ 567fec65c98Schristos echo "extern char *strsep(char **, const char *);" 568fec65c98Schristos 569fec65c98Schristos[ ${HAVE_STRTONUM} -eq 0 ] && \ 570fec65c98Schristos echo "extern long long strtonum(const char *, long long, long long, const char **);" 571fec65c98Schristos 572f47368cfSchristos[ ${HAVE_VASPRINTF} -eq 0 ] && \ 573f47368cfSchristos echo "extern int vasprintf(char **, const char *, va_list);" 574f47368cfSchristos 57514e7489eSchristosecho "file config.h: written" 1>&2 57614e7489eSchristosecho "file config.h: written" 1>&3 577fec65c98Schristos 578fec65c98Schristos# --- tests for Makefile.local ----------------------------------------- 579fec65c98Schristos 580fec65c98Schristosexec > Makefile.local 581fec65c98Schristos 582fec65c98Schristos[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin" 583fec65c98Schristos[ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin" 58414e7489eSchristos[ -z "${BIN_FROM_SBIN}" ] && BIN_FROM_SBIN="../bin" 585fec65c98Schristos[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc" 586fec65c98Schristos[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc" 587fec65c98Schristos[ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man" 588fec65c98Schristos 589fec65c98Schristos[ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs" 590fec65c98Schristos[ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin" 591fec65c98Schristos 592fec65c98Schristos[ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555" 593fec65c98Schristos[ -z "${INSTALL_LIB}" ] && INSTALL_LIB="${INSTALL} -m 0444" 594fec65c98Schristos[ -z "${INSTALL_MAN}" ] && INSTALL_MAN="${INSTALL} -m 0444" 595fec65c98Schristos[ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444" 596fec65c98Schristos 59737ef69edSchristosBUILD_TARGETS= 59837ef69edSchristos[ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="man.cgi" 59937ef69edSchristos[ ${BUILD_CATMAN} -gt 0 ] && \ 60037ef69edSchristos BUILD_TARGETS="${BUILD_TARGETS} mandocd catman" 60137ef69edSchristosINSTALL_TARGETS= 60237ef69edSchristos[ ${INSTALL_LIBMANDOC} -gt 0 ] && INSTALL_TARGETS="lib-install" 603fec65c98Schristos[ ${BUILD_CGI} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} cgi-install" 60437ef69edSchristos[ ${BUILD_CATMAN} -gt 0 ] && \ 60537ef69edSchristos INSTALL_TARGETS="${INSTALL_TARGETS} catman-install" 606fec65c98Schristos 607fec65c98Schristoscat << __HEREDOC__ 608fec65c98SchristosBUILD_TARGETS = ${BUILD_TARGETS} 609fec65c98SchristosINSTALL_TARGETS = ${INSTALL_TARGETS} 610f47368cfSchristosCC = ${CC} 611fec65c98SchristosCFLAGS = ${CFLAGS} 612f47368cfSchristosLDADD = ${LDADD} 613f47368cfSchristosLDFLAGS = ${LDFLAGS} 614fec65c98SchristosSTATIC = ${STATIC} 615fec65c98SchristosPREFIX = ${PREFIX} 616fec65c98SchristosBINDIR = ${BINDIR} 617fec65c98SchristosSBINDIR = ${SBINDIR} 61814e7489eSchristosBIN_FROM_SBIN = ${BIN_FROM_SBIN} 619fec65c98SchristosINCLUDEDIR = ${INCLUDEDIR} 620fec65c98SchristosLIBDIR = ${LIBDIR} 621fec65c98SchristosMANDIR = ${MANDIR} 622fec65c98SchristosWWWPREFIX = ${WWWPREFIX} 623fec65c98SchristosHTDOCDIR = ${HTDOCDIR} 624fec65c98SchristosCGIBINDIR = ${CGIBINDIR} 625fec65c98SchristosBINM_APROPOS = ${BINM_APROPOS} 62637ef69edSchristosBINM_CATMAN = ${BINM_CATMAN} 627fec65c98SchristosBINM_MAKEWHATIS = ${BINM_MAKEWHATIS} 628f47368cfSchristosBINM_MAN = ${BINM_MAN} 629f47368cfSchristosBINM_SOELIM = ${BINM_SOELIM} 630f47368cfSchristosBINM_WHATIS = ${BINM_WHATIS} 631fec65c98SchristosMANM_MAN = ${MANM_MAN} 632f47368cfSchristosMANM_MANCONF = ${MANM_MANCONF} 633fec65c98SchristosMANM_MDOC = ${MANM_MDOC} 634fec65c98SchristosMANM_ROFF = ${MANM_ROFF} 635fec65c98SchristosMANM_EQN = ${MANM_EQN} 636fec65c98SchristosMANM_TBL = ${MANM_TBL} 637fec65c98SchristosINSTALL = ${INSTALL} 638fec65c98SchristosINSTALL_PROGRAM = ${INSTALL_PROGRAM} 639fec65c98SchristosINSTALL_LIB = ${INSTALL_LIB} 640fec65c98SchristosINSTALL_MAN = ${INSTALL_MAN} 641fec65c98SchristosINSTALL_DATA = ${INSTALL_DATA} 64237ef69edSchristosLN = ${LN} 643fec65c98Schristos__HEREDOC__ 644fec65c98Schristos 64514e7489eSchristosecho "file Makefile.local: written" 1>&2 64614e7489eSchristosecho "file Makefile.local: written" 1>&3 64770f041f9Sjoerg 64870f041f9Sjoergexit 0 649