Home | History | Annotate | Line # | Download | only in dist
      1 #!/bin/sh
      2 #
      3 # Id: configure,v 1.81 2021/09/20 10:19:51 schwarze Exp 
      4 #
      5 # Copyright (c) 2014-2021 Ingo Schwarze <schwarze (at] openbsd.org>
      6 #
      7 # Permission to use, copy, modify, and distribute this software for any
      8 # purpose with or without fee is hereby granted, provided that the above
      9 # copyright notice and this permission notice appear in all copies.
     10 #
     11 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     12 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     13 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     14 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     15 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     16 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     17 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     18 
     19 set -e
     20 
     21 [ -w config.log ] && mv config.log config.log.old
     22 [ -w config.h   ] && mv config.h config.h.old
     23 
     24 # Output file descriptor usage:
     25 # 1 (stdout): config.h, Makefile.local
     26 # 2 (stderr): original stderr, usually to the console
     27 # 3: config.log
     28 
     29 exec 3> config.log
     30 echo "file config.log: writing..."
     31 
     32 # --- default settings -------------------------------------------------
     33 # Initialize all variables here,
     34 # such that nothing can leak in from the environment.
     35 
     36 SOURCEDIR=`dirname "${0}"`
     37 
     38 MANPATH_BASE="/usr/share/man:/usr/X11R6/man"
     39 MANPATH_DEFAULT="/usr/share/man:/usr/X11R6/man:/usr/local/man"
     40 OSENUM=
     41 OSNAME=
     42 MAKEFLAGS=
     43 UTF8_LOCALE=
     44 
     45 AR=ar
     46 : "${CC:=cc}"
     47 CFLAGS=
     48 FATAL=0
     49 LDADD=
     50 LDFLAGS=
     51 LD_NANOSLEEP=
     52 LD_OHASH=
     53 LD_RECVMSG=
     54 STATIC=
     55 
     56 BUILD_CGI=0
     57 BUILD_CATMAN=0
     58 INSTALL_LIBMANDOC=0
     59 
     60 HAVE_ATTRIBUTE=
     61 HAVE_CMSG=
     62 HAVE_DIRENT_NAMLEN=
     63 HAVE_EFTYPE=
     64 HAVE_ENDIAN=
     65 HAVE_ERR=
     66 HAVE_FTS=
     67 HAVE_FTS_COMPARE_CONST=
     68 HAVE_GETLINE=
     69 HAVE_GETSUBOPT=
     70 HAVE_ISBLANK=
     71 HAVE_LESS_T=
     72 HAVE_MKDTEMP=
     73 HAVE_MKSTEMPS=
     74 HAVE_NANOSLEEP=
     75 HAVE_NTOHL=
     76 HAVE_O_DIRECTORY=
     77 HAVE_OHASH=
     78 HAVE_PATH_MAX=
     79 HAVE_PLEDGE=
     80 HAVE_PROGNAME=
     81 HAVE_REALLOCARRAY=
     82 HAVE_RECALLOCARRAY=
     83 HAVE_RECVMSG=
     84 HAVE_REWB_BSD=
     85 HAVE_REWB_SYSV=
     86 HAVE_SANDBOX_INIT=
     87 HAVE_STRCASESTR=
     88 HAVE_STRINGLIST=
     89 HAVE_STRLCAT=
     90 HAVE_STRLCPY=
     91 HAVE_STRNDUP=
     92 HAVE_STRPTIME=
     93 HAVE_STRSEP=
     94 HAVE_STRTONUM=
     95 HAVE_SYS_ENDIAN=
     96 HAVE_VASPRINTF=
     97 HAVE_WCHAR=
     98 
     99 NEED_GNU_SOURCE=0
    100 NEED_OPENBSD_SOURCE=0
    101 NEED_XPG4_2=0
    102 
    103 MANDOC_COBJS=
    104 SOELIM_COBJS=
    105 
    106 PREFIX="/usr/local"
    107 BINDIR=
    108 SBINDIR=
    109 BIN_FROM_SBIN=
    110 INCLUDEDIR=
    111 LIBDIR=
    112 MANDIR=
    113 READ_ALLOWED_PATH=
    114 
    115 WWWPREFIX="/var/www"
    116 HTDOCDIR=
    117 CGIBINDIR=
    118 
    119 BINM_APROPOS="apropos"
    120 BINM_CATMAN="catman"
    121 BINM_MAKEWHATIS="makewhatis"
    122 BINM_MAN="man"
    123 BINM_SOELIM="soelim"
    124 BINM_WHATIS="whatis"
    125 BINM_PAGER=
    126 MANM_MAN="man"
    127 MANM_MANCONF="man.conf"
    128 MANM_MDOC="mdoc"
    129 MANM_ROFF="roff"
    130 MANM_EQN="eqn"
    131 MANM_TBL="tbl"
    132 
    133 INSTALL="install"
    134 INSTALL_PROGRAM=
    135 INSTALL_LIB=
    136 INSTALL_MAN=
    137 INSTALL_DATA=
    138 LN="ln -f"
    139 
    140 # --- manual settings from configure.local -----------------------------
    141 
    142 if [ -r ./configure.local ]; then
    143 	echo "file configure.local: reading..." 1>&2
    144 	echo "file configure.local: reading..." 1>&3
    145 	cat ./configure.local 1>&3
    146 	. ./configure.local
    147 else
    148 	echo "file configure.local: no (fully automatic configuration)" 1>&2
    149 	echo "file configure.local: no (fully automatic configuration)" 1>&3
    150 fi
    151 echo 1>&3
    152 
    153 # --- tests functions --------------------------------------------------
    154 
    155 # Check whether this HAVE_ setting is manually overridden.
    156 # If yes, use the override, if no, do not decide anything yet.
    157 # Arguments: test file name, test var name, manual value
    158 ismanual() {
    159 	[ -z "${3}" ] && return 1
    160 	echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&2
    161 	echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&3
    162 	echo 1>&3
    163 	return 0
    164 }
    165 
    166 # Run a single autoconfiguration test.
    167 # In case of success, enable the feature.
    168 # In case of failure, do not decide anything yet.
    169 # Arguments: test file name, test var name, additional CFLAGS
    170 singletest() {
    171 	n=${1}${3}
    172 	cat 1>&3 << __HEREDOC__
    173 testing ${n} ...
    174 ${COMP} -o test-${1} test-${1}.c ${3}
    175 __HEREDOC__
    176 
    177 	if ${COMP} -o "test-${1}" "${SOURCEDIR}/test-${1}.c" ${3} 1>&3 2>&3
    178 	then
    179 		echo "partial result of ${n}: ${CC} succeeded" 1>&3
    180 	else
    181 		echo "tested ${n}: no (compilation failed)" 1>&2
    182 		echo "result of ${n}: ${CC} failed with exit status $?" 1>&3
    183 		echo "result of compiling ${n}: no" 1>&3
    184 		echo 1>&3
    185 		return 1
    186 	fi
    187 
    188 	if ./test-${1} 1>&3 2>&3; then
    189 		echo "tested ${n}: yes" 1>&2
    190 		echo "result of running ${n}: yes" 1>&3
    191 		echo 1>&3
    192 		eval HAVE_${2}=1
    193 		[ "${3}" = "-D_GNU_SOURCE" ] && NEED_GNU_SOURCE=1
    194 		[ "${3}" = "-D_OPENBSD_SOURCE" ] && NEED_OPENBSD_SOURCE=1
    195 		[ "${3}" = "-D_XPG4_2" ] && NEED_XPG4_2=1
    196 		[ "${3}" = "-lrt" ] && LD_NANOSLEEP="-lrt"
    197 		[ "${3}" = "-lsocket" ] && LD_RECVMSG="-lsocket"
    198 		[ "${3}" = "-lutil" ] && LD_OHASH="-lutil"
    199 		rm "test-${1}"
    200 		return 0
    201 	else
    202 		echo "tested ${n}: no (execution failed)" 1>&2
    203 		echo "result of ${n}: execution failed with exit status $?" 1>&3
    204 		echo "result of running ${n}: no" 1>&3
    205 		echo 1>&3
    206 		rm "test-${1}"
    207 		return 1
    208 	fi
    209 }
    210 
    211 # Run a complete autoconfiguration test, including the check for
    212 # a manual override and disabling the feature on failure.
    213 # Arguments: test file name, test var name, additional CFLAGS
    214 # The final argument can optionally be repeated a second time.
    215 runtest() {
    216 	eval _manual=\${HAVE_${2}}
    217 	ismanual "${1}" "${2}" "${_manual}" && return 0
    218 	singletest "${1}" "${2}" "${3}" && return 0
    219 	[ -n "${4}" ] && singletest "${1}" "${2}" "${4}" && return 0
    220 	eval HAVE_${2}=0
    221 	return 1
    222 }
    223 
    224 # Select a UTF-8 locale.
    225 get_locale() {
    226 	[ -n "${HAVE_WCHAR}" ] && [ "${HAVE_WCHAR}" -eq 0 ] && return 0
    227 	ismanual UTF8_LOCALE UTF8_LOCALE "${UTF8_LOCALE}" && return 0
    228 	echo "testing UTF8_LOCALE ..." 1>&3
    229 	UTF8_LOCALE=`locale -a | grep -i '^en_US\.UTF-*8$' | head -n 1`
    230 	if [ -z "${UTF8_LOCALE}" ]; then
    231 		UTF8_LOCALE=`locale -a | grep -i '\.UTF-*8' | head -n 1`
    232 		[ -n "${UTF8_LOCALE}" ] || return 1
    233 	fi
    234 	echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&2
    235 	echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&3
    236 	echo 1>&3
    237 	return 0;
    238 }
    239 
    240 # --- operating system -------------------------------------------------
    241 
    242 if [ -n "${OSENUM}" ]; then
    243 	echo "OSENUM specified manually: ${OSENUM}" 1>&2
    244 	echo "OSENUM specified manually: ${OSENUM}" 1>&3
    245 else
    246 	OSDETECT=`uname`
    247 	if [ "${OSDETECT}" = "NetBSD" ]; then
    248 		OSENUM=MANDOC_OS_NETBSD
    249 	elif [ "${OSDETECT}" = "OpenBSD" ]; then
    250 		OSENUM=MANDOC_OS_OPENBSD
    251 	else
    252 		OSENUM=MANDOC_OS_OTHER
    253 	fi
    254 	echo "tested operating system: ${OSDETECT} -> OSENUM=${OSENUM}" 1>&2
    255 	echo "tested operating system: ${OSDETECT} -> OSENUM=${OSENUM}" 1>&3
    256 	unset OSDETECT
    257 fi
    258 echo 1>&3
    259 
    260 # --- compiler options -------------------------------------------------
    261 
    262 DEFCFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter"
    263 
    264 if [ -n "${CFLAGS}" ]; then
    265 	COMP="${CC} ${CFLAGS} -Wno-unused -Werror"
    266 else
    267 	COMP="${CC} ${DEFCFLAGS} -Wno-unused -Werror"
    268 fi
    269 printf "%s" "tested ${CC} -W: " 1>&2
    270 printf "%s" "testing ${CC} -W: " 1>&3
    271 runtest noop WFLAG || true
    272 
    273 if [ -n "${CFLAGS}" ]; then
    274 	echo "CFLAGS specified manually:" 1>&3
    275 elif [ ${HAVE_WFLAG} -eq 0 ]; then
    276 	CFLAGS="-g"
    277 else
    278 	CFLAGS="${DEFCFLAGS}"
    279 fi
    280 echo "selected CFLAGS=\"${CFLAGS}\"" 1>&2
    281 echo "selected CFLAGS=\"${CFLAGS}\"" 1>&3
    282 echo 1>&3
    283 
    284 COMP="${CC} ${CFLAGS}"
    285 [ ${HAVE_WFLAG} -eq 0 ] || COMP="${COMP} -Wno-unused -Werror"
    286 
    287 if [ -n "${STATIC}" ]; then
    288 	echo "selected STATIC=\"${STATIC}\" (manual)" 1>&2
    289 	echo "selected STATIC=\"${STATIC}\" (manual)" 1>&3
    290 	echo 1>&3
    291 else
    292 	runtest noop STATIC -static || true
    293 	[ ${HAVE_STATIC} -eq 0 ] || STATIC="-static"
    294 	echo "selected STATIC=\"${STATIC}\"" 1>&2
    295 	echo "selected STATIC=\"${STATIC}\"" 1>&3
    296 	echo 1>&3
    297 fi
    298 
    299 # --- tests for config.h  ----------------------------------------------
    300 
    301 # --- library functions ---
    302 runtest attribute	ATTRIBUTE	|| true
    303 runtest cmsg		CMSG		"" "-D_XPG4_2" || true
    304 runtest dirent-namlen	DIRENT_NAMLEN	|| true
    305 runtest be32toh		ENDIAN		|| true
    306 runtest be32toh		SYS_ENDIAN	-DSYS_ENDIAN || true
    307 runtest EFTYPE		EFTYPE		|| true
    308 runtest err		ERR		|| true
    309 runtest getline		GETLINE		|| true
    310 runtest getsubopt	GETSUBOPT	"" -D_GNU_SOURCE || true
    311 runtest isblank		ISBLANK		|| true
    312 runtest mkdtemp		MKDTEMP		|| true
    313 runtest mkstemps	MKSTEMPS	|| true
    314 runtest nanosleep	NANOSLEEP	"${LD_NANOSLEEP}" "-lrt" || true
    315 runtest ntohl		NTOHL		|| true
    316 runtest O_DIRECTORY	O_DIRECTORY	|| true
    317 runtest PATH_MAX	PATH_MAX	|| true
    318 runtest pledge		PLEDGE		|| true
    319 runtest sandbox_init	SANDBOX_INIT	|| true
    320 runtest progname	PROGNAME	|| true
    321 runtest reallocarray	REALLOCARRAY	"" -D_OPENBSD_SOURCE || true
    322 runtest recallocarray	RECALLOCARRAY	"" -D_OPENBSD_SOURCE || true
    323 runtest recvmsg		RECVMSG		"${LD_RECVMSG}" "-lsocket" || true
    324 runtest rewb-bsd	REWB_BSD	|| true
    325 runtest rewb-sysv	REWB_SYSV	|| true
    326 runtest strcasestr	STRCASESTR	"" -D_GNU_SOURCE || true
    327 runtest stringlist	STRINGLIST	|| true
    328 runtest strlcat		STRLCAT		|| true
    329 runtest strlcpy		STRLCPY		|| true
    330 runtest strndup		STRNDUP		|| true
    331 runtest strptime	STRPTIME	"" -D_GNU_SOURCE || true
    332 runtest strsep		STRSEP		|| true
    333 runtest strtonum	STRTONUM	"" -D_OPENBSD_SOURCE || true
    334 runtest vasprintf	VASPRINTF	"" -D_GNU_SOURCE || true
    335 
    336 # --- fts ---
    337 if [ "${1}" = "-depend" ]; then
    338 	HAVE_FTS=0
    339 	HAVE_FTS_COMPARE_CONST=0
    340 	echo "tested fts: HAVE_FTS=0 (for make depend)" 1>&2
    341 	echo "tested fts: HAVE_FTS=0 (for make depend)" 1>&3
    342 	echo 1>&3
    343 elif ismanual fts FTS ${HAVE_FTS}; then
    344 	HAVE_FTS_COMPARE_CONST=0
    345 elif runtest fts FTS_COMPARE_CONST -DFTS_COMPARE_CONST; then
    346 	HAVE_FTS=1
    347 else
    348 	runtest fts FTS || true
    349 fi
    350 
    351 # --- pager ---
    352 manual=
    353 if [ -n "${BINM_PAGER}" ]; then
    354 	manual=" (manual)"
    355 elif less test-noop.c 1>/dev/null 2>&3; then
    356 	BINM_PAGER=less
    357 	echo "tested less: yes" 1>&2
    358 	echo "tested less: yes" 1>&3
    359 else
    360 	BINM_PAGER=more
    361 	echo "tested less: no" 1>&2
    362 	echo "tested less: no" 1>&3
    363 fi
    364 echo "selected BINM_PAGER=${BINM_PAGER}${manual}" 1>&2
    365 echo "selected BINM_PAGER=${BINM_PAGER}${manual}" 1>&3
    366 
    367 # --- tagging support in the pager ---
    368 if ismanual "${BINM_PAGER} -T" LESS_T ${HAVE_LESS_T}; then
    369 	:
    370 elif ${BINM_PAGER} -T /dev/null test-noop.c 1>/dev/null 2>&3; then
    371 	HAVE_LESS_T=1
    372 	echo "tested ${BINM_PAGER} -T: yes" 1>&2
    373 	echo "tested ${BINM_PAGER} -T: yes" 1>&3
    374 	echo 1>&3
    375 else
    376 	HAVE_LESS_T=0
    377 	echo "tested ${BINM_PAGER} -T: no" 1>&2
    378 	echo "tested ${BINM_PAGER} -T: no" 1>&3
    379 	echo 1>&3
    380 fi
    381 
    382 # --- wide character and locale support ---
    383 if get_locale; then
    384 	runtest wchar WCHAR "-DUTF8_LOCALE=\"${UTF8_LOCALE}\"" \
    385 	    "-D_GNU_SOURCE -DUTF8_LOCALE=\"${UTF8_LOCALE}\"" || true
    386 else
    387 	HAVE_WCHAR=0
    388 	echo "tested wchar: no (no UTF8_LOCALE)" 1>&2
    389 	echo "tested wchar: no (no UTF8_LOCALE)" 1>&3
    390 	echo 1>&3
    391 fi
    392 
    393 # --- ohash ---
    394 if [ "${1}" = "-depend" ]; then
    395 	HAVE_OHASH=0
    396 	echo "tested ohash: HAVE_OHASH=0 (for make depend)" 1>&2
    397 	echo "tested ohash: HAVE_OHASH=0 (for make depend)" 1>&3
    398 	echo 1>&3
    399 else
    400 	runtest ohash OHASH "${LD_OHASH}" "-lutil" || true
    401 fi
    402 if [ "${HAVE_OHASH}" -eq 0 ]; then
    403 	LD_OHASH=
    404 fi
    405 
    406 # --- required functions ---
    407 if [ ${HAVE_ENDIAN} -eq 0 -a \
    408      ${HAVE_SYS_ENDIAN} -eq 0 -a \
    409      ${HAVE_NTOHL} -eq 0 ]; then
    410 	echo "FATAL: no endian conversion functions found" 1>&2
    411 	echo "FATAL: no endian conversion functions found" 1>&3
    412 	FATAL=1
    413 fi
    414 if [ "${HAVE_NANOSLEEP}" -eq 0 ]; then
    415 	echo "FATAL: nanosleep: no" 1>&2
    416 	echo "FATAL: nanosleep: no" 1>&3
    417 	FATAL=1
    418 fi
    419 if [ ${BUILD_CATMAN} -gt 0 -a "${HAVE_RECVMSG}" -eq 0 ]; then
    420 	echo "FATAL: recvmsg: no" 1>&2
    421 	echo "FATAL: recvmsg: no" 1>&3
    422 	echo "Without recvmsg(2), you cannot BUILD_CATMAN." 1>&2
    423 	FATAL=1
    424 fi
    425 if [ ${BUILD_CATMAN} -gt 0 -a "${HAVE_CMSG}" -eq 0 ]; then
    426 	echo "FATAL: cmsg: no" 1>&2
    427 	echo "FATAL: cmsg: no" 1>&3
    428 	echo "Without CMSG_FIRSTHDR(3), you cannot BUILD_CATMAN." 1>&2
    429 	FATAL=1
    430 fi
    431 [ "${FATAL}" -eq 0 ] || exit 1
    432 
    433 # --- LDADD ---
    434 LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz"
    435 echo "selected LDADD=\"${LDADD}\"" 1>&2
    436 echo "selected LDADD=\"${LDADD}\"" 1>&3
    437 echo 1>&3
    438 
    439 # --- write config.h ---
    440 
    441 exec > config.h
    442 
    443 cat << __HEREDOC__
    444 #ifdef __cplusplus
    445 #error "Do not use C++.  See the INSTALL file."
    446 #endif
    447 
    448 #ifdef HAVE_NBTOOL_CONFIG_H
    449 #include "nbtool_config.h"
    450 #endif
    451 
    452 __HEREDOC__
    453 [ ${NEED_GNU_SOURCE} -eq 0 ] || echo "#define _GNU_SOURCE"
    454 [ ${NEED_OPENBSD_SOURCE} -eq 0 ] || echo "#define _OPENBSD_SOURCE"
    455 
    456 [ ${HAVE_GETLINE} -eq 0 -o \
    457   ${HAVE_REALLOCARRAY} -eq 0 -o ${HAVE_RECALLOCARRAY} -eq 0 -o \
    458   ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 -o \
    459   ${HAVE_STRNDUP} -eq 0 ] \
    460 	&& echo "#include <sys/types.h>"
    461 [ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include <stdarg.h>"
    462 [ ${HAVE_GETLINE} -eq 0 ] && echo "#include <stdio.h>"
    463 
    464 echo
    465 echo "#define MAN_CONF_FILE \"/etc/${MANM_MANCONF}\""
    466 echo "#define MANPATH_BASE \"${MANPATH_BASE}\""
    467 echo "#define MANPATH_DEFAULT \"${MANPATH_DEFAULT}\""
    468 echo "#define OSENUM ${OSENUM}"
    469 [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
    470 [ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\""
    471 [ -n "${READ_ALLOWED_PATH}" ] \
    472 	&& echo "#define READ_ALLOWED_PATH \"${READ_ALLOWED_PATH}\""
    473 [ ${HAVE_ATTRIBUTE} -eq 0 ] && echo "#define __attribute__(x)"
    474 [ ${HAVE_EFTYPE} -eq 0 ] && echo "#ifndef EFTYPE" && \
    475     echo "#define EFTYPE EINVAL" && echo "#endif"
    476 [ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0"
    477 [ ${HAVE_PATH_MAX} -eq 0 ] && echo "#define PATH_MAX 4096"
    478 if [ ${HAVE_ENDIAN} -eq 0 -a ${HAVE_SYS_ENDIAN} -eq 0 ]; then
    479 	echo "#define be32toh ntohl"
    480 	echo "#define htobe32 htonl"
    481 fi
    482 cat << __HEREDOC__
    483 #ifndef HAVE_NBTOOL_CONFIG_H
    484 #define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN}
    485 #define HAVE_ENDIAN ${HAVE_ENDIAN}
    486 #define HAVE_ERR ${HAVE_ERR}
    487 #define HAVE_FTS ${HAVE_FTS}
    488 #define HAVE_FTS_COMPARE_CONST ${HAVE_FTS_COMPARE_CONST}
    489 #define HAVE_GETLINE ${HAVE_GETLINE}
    490 #define HAVE_GETSUBOPT ${HAVE_GETSUBOPT}
    491 #define HAVE_ISBLANK ${HAVE_ISBLANK}
    492 #define HAVE_LESS_T ${HAVE_LESS_T}
    493 #define HAVE_MKDTEMP ${HAVE_MKDTEMP}
    494 #define HAVE_MKSTEMPS ${HAVE_MKSTEMPS}
    495 #define HAVE_NTOHL ${HAVE_NTOHL}
    496 #define HAVE_PLEDGE ${HAVE_PLEDGE}
    497 #define HAVE_PROGNAME ${HAVE_PROGNAME}
    498 #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
    499 #define HAVE_RECALLOCARRAY ${HAVE_RECALLOCARRAY}
    500 #define HAVE_REWB_BSD ${HAVE_REWB_BSD}
    501 #define HAVE_REWB_SYSV ${HAVE_REWB_SYSV}
    502 #define HAVE_SANDBOX_INIT ${HAVE_SANDBOX_INIT}
    503 #define HAVE_STRCASESTR ${HAVE_STRCASESTR}
    504 #define HAVE_STRINGLIST ${HAVE_STRINGLIST}
    505 #define HAVE_STRLCAT ${HAVE_STRLCAT}
    506 #define HAVE_STRLCPY ${HAVE_STRLCPY}
    507 #define HAVE_STRNDUP ${HAVE_STRNDUP}
    508 #define HAVE_STRPTIME ${HAVE_STRPTIME}
    509 #define HAVE_STRSEP ${HAVE_STRSEP}
    510 #define HAVE_STRTONUM ${HAVE_STRTONUM}
    511 #define HAVE_SYS_ENDIAN ${HAVE_SYS_ENDIAN}
    512 #define HAVE_VASPRINTF ${HAVE_VASPRINTF}
    513 #define HAVE_WCHAR ${HAVE_WCHAR}
    514 #define HAVE_OHASH ${HAVE_OHASH}
    515 #define NEED_XPG4_2 ${NEED_XPG4_2}
    516 #endif
    517 
    518 #define BINM_APROPOS "${BINM_APROPOS}"
    519 #define BINM_CATMAN "${BINM_CATMAN}"
    520 #define BINM_MAKEWHATIS "${BINM_MAKEWHATIS}"
    521 #define BINM_MAN "${BINM_MAN}"
    522 #define BINM_SOELIM "${BINM_SOELIM}"
    523 #define BINM_WHATIS "${BINM_WHATIS}"
    524 #define BINM_PAGER "${BINM_PAGER}"
    525 
    526 __HEREDOC__
    527 
    528 if [ ${HAVE_ERR} -eq 0 ]; then
    529 	echo "extern	void	  err(int, const char *, ...);"
    530 	echo "extern	void	  errx(int, const char *, ...);"
    531 	echo "extern	void	  warn(const char *, ...);"
    532 	echo "extern	void	  warnx(const char *, ...);"
    533 	MANDOC_COBJS="${MANDOC_COBJS} compat_err.o"
    534 	SOELIM_COBJS="${SOELIM_COBJS} compat_err.o"
    535 fi
    536 if [ ${HAVE_FTS} -eq 0 ]; then
    537 	MANDOC_COBJS="${MANDOC_COBJS} compat_fts.o"
    538 fi
    539 if [ ${HAVE_GETLINE} -eq 0 ]; then
    540 	echo "extern	ssize_t	  getline(char **, size_t *, FILE *);"
    541 	MANDOC_COBJS="${MANDOC_COBJS} compat_getline.o"
    542 	SOELIM_COBJS="${SOELIM_COBJS} compat_getline.o"
    543 fi
    544 if [ ${HAVE_GETSUBOPT} -eq 0 ]; then
    545 	echo "extern	int	  getsubopt(char **, char * const *, char **);"
    546 	MANDOC_COBJS="${MANDOC_COBJS} compat_getsubopt.o"
    547 fi
    548 if [ ${HAVE_ISBLANK} -eq 0 ]; then
    549 	echo "#undef isblank"
    550 	echo "extern	int	  isblank(int);"
    551 	MANDOC_COBJS="${MANDOC_COBJS} compat_isblank.o"
    552 fi
    553 if [ ${HAVE_MKDTEMP} -eq 0 ]; then
    554 	echo "extern	char	 *mkdtemp(char *);"
    555 	MANDOC_COBJS="${MANDOC_COBJS} compat_mkdtemp.o"
    556 fi
    557 if [ ${HAVE_MKSTEMPS} -eq 0 ]; then
    558 	echo "extern	int	  mkstemps(char *, int);"
    559 	MANDOC_COBJS="${MANDOC_COBJS} compat_mkstemps.o"
    560 fi
    561 if [ ${HAVE_OHASH} -eq 0 ]; then
    562 	MANDOC_COBJS="${MANDOC_COBJS} compat_ohash.o"
    563 fi
    564 if [ ${HAVE_PROGNAME} -eq 0 ]; then
    565 	echo "extern	const char *getprogname(void);"
    566 	echo "extern	void	  setprogname(const char *);"
    567 	MANDOC_COBJS="${MANDOC_COBJS} compat_progname.o"
    568 	SOELIM_COBJS="${SOELIM_COBJS} compat_progname.o"
    569 fi
    570 if [ ${HAVE_REALLOCARRAY} -eq 0 ]; then
    571 	echo "extern	void	 *reallocarray(void *, size_t, size_t);"
    572 	MANDOC_COBJS="${MANDOC_COBJS} compat_reallocarray.o"
    573 	SOELIM_COBJS="${SOELIM_COBJS} compat_reallocarray.o"
    574 fi
    575 if [ ${HAVE_RECALLOCARRAY} -eq 0 ]; then
    576 	echo "extern	void	 *recallocarray(void *, size_t, size_t, size_t);"
    577 	MANDOC_COBJS="${MANDOC_COBJS} compat_recallocarray.o"
    578 fi
    579 if [ ${HAVE_STRCASESTR} -eq 0 ]; then
    580 	echo "extern	char	 *strcasestr(const char *, const char *);"
    581 	MANDOC_COBJS="${MANDOC_COBJS} compat_strcasestr.o"
    582 fi
    583 if [ ${HAVE_STRINGLIST} -eq 0 ]; then
    584 	SOELIM_COBJS="${SOELIM_COBJS} compat_stringlist.o"
    585 fi
    586 if [ ${HAVE_STRLCAT} -eq 0 ]; then
    587 	echo "extern	size_t	  strlcat(char *, const char *, size_t);"
    588 	MANDOC_COBJS="${MANDOC_COBJS} compat_strlcat.o"
    589 fi
    590 if [ ${HAVE_STRLCPY} -eq 0 ]; then
    591 	echo "extern	size_t	  strlcpy(char *, const char *, size_t);"
    592 	MANDOC_COBJS="${MANDOC_COBJS} compat_strlcpy.o"
    593 fi
    594 if [ ${HAVE_STRNDUP} -eq 0 ]; then
    595 	echo "extern	char	 *strndup(const char *, size_t);"
    596 	MANDOC_COBJS="${MANDOC_COBJS} compat_strndup.o"
    597 fi
    598 if [ ${HAVE_STRSEP} -eq 0 ]; then
    599 	echo "extern	char	 *strsep(char **, const char *);"
    600 	MANDOC_COBJS="${MANDOC_COBJS} compat_strsep.o"
    601 fi
    602 if [ ${HAVE_STRTONUM} -eq 0 ]; then
    603 	echo "extern	long long strtonum(const char *, long long, long long, const char **);"
    604 	MANDOC_COBJS="${MANDOC_COBJS} compat_strtonum.o"
    605 fi
    606 if [ ${HAVE_VASPRINTF} -eq 0 ]; then
    607 	echo "extern	int	  vasprintf(char **, const char *, va_list);"
    608 	MANDOC_COBJS="${MANDOC_COBJS} compat_vasprintf.o"
    609 fi
    610 echo "file config.h: written" 1>&2
    611 echo "file config.h: written" 1>&3
    612 
    613 # --- tests for Makefile.local -----------------------------------------
    614 
    615 exec > Makefile.local
    616 
    617 [ -z "${BINDIR}"          ] && BINDIR="${PREFIX}/bin"
    618 [ -z "${SBINDIR}"         ] && SBINDIR="${PREFIX}/sbin"
    619 [ -z "${BIN_FROM_SBIN}"   ] && BIN_FROM_SBIN="../bin"
    620 [ -z "${INCLUDEDIR}"      ] && INCLUDEDIR="${PREFIX}/include/mandoc"
    621 [ -z "${LIBDIR}"          ] && LIBDIR="${PREFIX}/lib/mandoc"
    622 [ -z "${MANDIR}"          ] && MANDIR="${PREFIX}/man"
    623 
    624 [ -z "${HTDOCDIR}"        ] && HTDOCDIR="${WWWPREFIX}/htdocs"
    625 [ -z "${CGIBINDIR}"       ] && CGIBINDIR="${WWWPREFIX}/cgi-bin"
    626 
    627 [ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555"
    628 [ -z "${INSTALL_LIB}"     ] && INSTALL_LIB="${INSTALL} -m 0444"
    629 [ -z "${INSTALL_MAN}"     ] && INSTALL_MAN="${INSTALL} -m 0444"
    630 [ -z "${INSTALL_DATA}"    ] && INSTALL_DATA="${INSTALL} -m 0444"
    631 
    632 BUILD_TARGETS=
    633 [ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="man.cgi"
    634 [ ${BUILD_CATMAN} -gt 0 ] && \
    635 	BUILD_TARGETS="${BUILD_TARGETS} mandocd catman"
    636 INSTALL_TARGETS=
    637 [ ${INSTALL_LIBMANDOC} -gt 0 ] && INSTALL_TARGETS="lib-install"
    638 [ ${BUILD_CGI} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} cgi-install"
    639 [ ${BUILD_CATMAN} -gt 0 ] && \
    640 	INSTALL_TARGETS="${INSTALL_TARGETS} catman-install"
    641 
    642 cat << __HEREDOC__
    643 BUILD_TARGETS	= ${BUILD_TARGETS}
    644 INSTALL_TARGETS	= ${INSTALL_TARGETS}
    645 AR		= ${AR}
    646 CC		= ${CC}
    647 CFLAGS		= ${CFLAGS}
    648 LDADD		= ${LDADD}
    649 LDFLAGS		= ${LDFLAGS}
    650 MANDOC_COBJS	= ${MANDOC_COBJS}
    651 SOELIM_COBJS	= ${SOELIM_COBJS}
    652 STATIC		= ${STATIC}
    653 PREFIX		= ${PREFIX}
    654 BINDIR		= ${BINDIR}
    655 SBINDIR		= ${SBINDIR}
    656 BIN_FROM_SBIN	= ${BIN_FROM_SBIN}
    657 INCLUDEDIR	= ${INCLUDEDIR}
    658 LIBDIR		= ${LIBDIR}
    659 MANDIR		= ${MANDIR}
    660 WWWPREFIX	= ${WWWPREFIX}
    661 HTDOCDIR	= ${HTDOCDIR}
    662 CGIBINDIR	= ${CGIBINDIR}
    663 BINM_APROPOS	= ${BINM_APROPOS}
    664 BINM_CATMAN	= ${BINM_CATMAN}
    665 BINM_MAKEWHATIS	= ${BINM_MAKEWHATIS}
    666 BINM_MAN	= ${BINM_MAN}
    667 BINM_SOELIM	= ${BINM_SOELIM}
    668 BINM_WHATIS	= ${BINM_WHATIS}
    669 MANM_MAN	= ${MANM_MAN}
    670 MANM_MANCONF	= ${MANM_MANCONF}
    671 MANM_MDOC	= ${MANM_MDOC}
    672 MANM_ROFF	= ${MANM_ROFF}
    673 MANM_EQN	= ${MANM_EQN}
    674 MANM_TBL	= ${MANM_TBL}
    675 INSTALL		= ${INSTALL}
    676 INSTALL_PROGRAM	= ${INSTALL_PROGRAM}
    677 INSTALL_LIB	= ${INSTALL_LIB}
    678 INSTALL_MAN	= ${INSTALL_MAN}
    679 INSTALL_DATA	= ${INSTALL_DATA}
    680 LN		= ${LN}
    681 __HEREDOC__
    682 
    683 echo "file Makefile.local: written" 1>&2
    684 echo "file Makefile.local: written" 1>&3
    685 
    686 exit 0
    687