1#!/bin/sh 2#
|
3# Copyright (c) 2014 Ingo Schwarze
|
3# Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> |
4# 5# Permission to use, copy, modify, and distribute this software for any 6# purpose with or without fee is hereby granted, provided that the above 7# copyright notice and this permission notice appear in all copies. 8# 9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 17set -e 18 19[ -e config.log ] && mv config.log config.log.old 20[ -e config.h ] && mv config.h config.h.old 21 22# Output file descriptor usage: 23# 1 (stdout): config.h, Makefile.local 24# 2 (stderr): original stderr, usually to the console 25# 3: config.log 26 27exec 3> config.log 28echo "config.log: writing..." 29 30# --- default settings ------------------------------------------------- 31# Initialize all variables here, 32# such that nothing can leak in from the environment. 33
|
34VERSION="1.13.2"
35echo "VERSION=\"${VERSION}\"" 1>&2
36echo "VERSION=\"${VERSION}\"" 1>&3
37
|
34OSNAME= 35 36CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make -f -` 37CFLAGS="-g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings" 38DBLIB= 39STATIC="-static" 40 41BUILD_DB=1 42BUILD_CGI=0 43 44HAVE_DIRENT_NAMLEN= 45HAVE_FGETLN= 46HAVE_FTS= 47HAVE_GETSUBOPT= 48HAVE_MMAP= 49HAVE_REALLOCARRAY= 50HAVE_STRCASESTR= 51HAVE_STRLCAT= 52HAVE_STRLCPY= 53HAVE_STRPTIME= 54HAVE_STRSEP=
|
55HAVE_STRTONUM= |
56HAVE_WCHAR= 57 58HAVE_SQLITE3= 59HAVE_SQLITE3_ERRSTR= 60HAVE_OHASH= 61HAVE_MANPATH= 62 63PREFIX="/usr/local" 64BINDIR= 65SBINDIR= 66INCLUDEDIR= 67LIBDIR= 68MANDIR= 69EXAMPLEDIR=
|
70HOMEBREWDIR= |
71 72WWWPREFIX="/var/www" 73HTDOCDIR= 74CGIBINDIR= 75 76BINM_APROPOS="apropos" 77BINM_MAN="man" 78BINM_WHATIS="whatis" 79BINM_MAKEWHATIS="makewhatis" 80MANM_MAN="man" 81MANM_MDOC="mdoc" 82MANM_ROFF="roff" 83MANM_EQN="eqn" 84MANM_TBL="tbl" 85 86INSTALL="install" 87INSTALL_PROGRAM= 88INSTALL_LIB= 89INSTALL_MAN= 90INSTALL_DATA= 91 92# --- manual settings from configure.local ----------------------------- 93 94if [ -e ./configure.local ]; then 95 echo "configure.local: reading..." 1>&2 96 echo "configure.local: reading..." 1>&3 97 cat ./configure.local 1>&3 98 . ./configure.local 99else 100 echo "configure.local: no (fully automatic configuration)" 1>&2 101 echo "configure.local: no (fully automatic configuration)" 1>&3 102fi 103echo 1>&3 104 105# --- tests for config.h ---------------------------------------------- 106 107COMP="${CC} ${CFLAGS} -Wno-unused -Werror" 108 109# Check whether this HAVE_ setting is manually overridden. 110# If yes, use the override, if no, do not decide anything yet. 111# Arguments: lower-case test name, manual value 112ismanual() { 113 [ -z "${2}" ] && return 1 114 echo "${1}: manual (${2})" 1>&2 115 echo "${1}: manual (${2})" 1>&3 116 echo 1>&3 117 return 0 118} 119 120# Run a single autoconfiguration test. 121# In case of success, enable the feature. 122# In case of failure, do not decide anything yet. 123# Arguments: lower-case test name, upper-case test name, additional CFLAGS 124singletest() { 125 cat 1>&3 << __HEREDOC__ 126${1}: testing... 127${COMP} ${3} -o test-${1} test-${1}.c 128__HEREDOC__ 129 130 if ${COMP} ${3} -o "test-${1}" "test-${1}.c" 1>&3 2>&3; then 131 echo "${1}: ${CC} succeeded" 1>&3 132 else 133 echo "${1}: ${CC} failed with $?" 1>&3 134 echo 1>&3 135 return 1 136 fi 137 138 if ./test-${1} 1>&3 2>&3; then 139 echo "${1}: yes" 1>&2 140 echo "${1}: yes" 1>&3 141 echo 1>&3 142 eval HAVE_${2}=1 143 rm "test-${1}" 144 return 0 145 else 146 echo "${1}: execution failed with $?" 1>&3 147 echo 1>&3 148 rm "test-${1}" 149 return 1 150 fi 151} 152 153# Run a complete autoconfiguration test, including the check for 154# a manual override and disabling the feature on failure. 155# Arguments: lower case name, upper case name, additional CFLAGS 156runtest() { 157 eval _manual=\${HAVE_${2}} 158 ismanual "${1}" "${_manual}" && return 0 159 singletest "${1}" "${2}" "${3}" && return 0 160 echo "${1}: no" 1>&2 161 eval HAVE_${2}=0 162 return 1 163} 164 165# --- library functions --- 166runtest dirent-namlen DIRENT_NAMLEN || true 167runtest fgetln FGETLN || true 168runtest fts FTS || true 169runtest getsubopt GETSUBOPT || true 170runtest mmap MMAP || true 171runtest reallocarray REALLOCARRAY || true 172runtest strcasestr STRCASESTR || true 173runtest strlcat STRLCAT || true 174runtest strlcpy STRLCPY || true 175runtest strptime STRPTIME || true 176runtest strsep STRSEP || true
|
177runtest strtonum STRTONUM || true |
178runtest wchar WCHAR || true 179 180# --- sqlite3 --- 181DETECTLIB= 182if [ ${BUILD_DB} -eq 0 ]; then 183 echo "BUILD_DB=0 (manual)" 1>&2 184 echo "BUILD_DB=0 (manual)" 1>&3 185 echo 1>&3 186 HAVE_SQLITE3=0 187elif ismanual sqlite3 "${HAVE_SQLITE3}"; then 188 DETECTLIB="-lsqlite3" 189elif [ -n "${DBLIB}" ]; then 190 runtest sqlite3 SQLITE3 "${DBLIB}" || true 191elif singletest sqlite3 SQLITE3 "-lsqlite3"; then 192 DETECTLIB="-lsqlite3" 193elif runtest sqlite3 SQLITE3 \ 194 "-I/usr/local/include -L/usr/local/lib -lsqlite3"; then 195 DETECTLIB="-L/usr/local/lib -lsqlite3" 196 CFLAGS="${CFLAGS} -I/usr/local/include" 197fi 198if [ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3} -eq 0 ]; then 199 echo "BUILD_DB=0 (no sqlite3)" 1>&2 200 echo "BUILD_DB=0 (no sqlite3)" 1>&3 201 echo 1>&3 202 BUILD_DB=0 203fi 204 205# --- sqlite3_errstr --- 206if [ ${BUILD_DB} -eq 0 ]; then 207 HAVE_SQLITE3_ERRSTR=1 208elif ismanual sqlite3_errstr "${HAVE_SQLITE3_ERRSTR}"; then 209 : 210elif [ -n "${DBLIB}" ]; then 211 runtest sqlite3_errstr SQLITE3_ERRSTR "${DBLIB}" || true 212else 213 runtest sqlite3_errstr SQLITE3_ERRSTR "${DETECTLIB}" || true 214fi 215 216# --- ohash --- 217if [ ${BUILD_DB} -eq 0 ]; then 218 HAVE_OHASH=1 219elif ismanual ohash "${HAVE_OHASH}"; then 220 : 221elif [ -n "${DBLIB}" ]; then 222 runtest ohash OHASH "${DBLIB}" || true 223elif singletest ohash OHASH; then 224 : 225elif runtest ohash OHASH "-lutil"; then 226 DETECTLIB="${DETECTLIB} -lutil" 227fi 228 229# --- DBLIB --- 230if [ ${BUILD_DB} -eq 0 ]; then 231 DBLIB= 232elif [ -z "${DBLIB}" ]; then 233 DBLIB="${DETECTLIB}" 234 echo "DBLIB=\"${DBLIB}\"" 1>&2 235 echo "DBLIB=\"${DBLIB}\"" 1>&3 236 echo 1>&3 237fi 238 239# --- manpath --- 240if [ ${BUILD_DB} -eq 0 ]; then 241 HAVE_MANPATH=0 242elif ismanual manpath "${HAVE_MANPATH}"; then 243 : 244elif manpath 1>&3 2>&3; then 245 echo "manpath: yes" 1>&2 246 echo "manpath: yes" 1>&3 247 echo 1>&3 248 HAVE_MANPATH=1 249else 250 echo "manpath: no" 1>&2 251 echo "manpath: no" 1>&3 252 echo 1>&3 253 HAVE_MANPATH=0 254fi 255 256# --- write config.h --- 257 258exec > config.h 259 260cat << __HEREDOC__ 261#ifndef MANDOC_CONFIG_H 262#define MANDOC_CONFIG_H 263 264#if defined(__linux__) || defined(__MINT__) 265#define _GNU_SOURCE /* See test-*.c what needs this. */ 266#endif 267 268__HEREDOC__ 269 270[ ${HAVE_FGETLN} -eq 0 -o ${HAVE_REALLOCARRAY} -eq 0 -o \ 271 ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 ] \ 272 && echo "#include <sys/types.h>" 273[ ${HAVE_FGETLN} -eq 0 ] && echo "#include <stdio.h>" 274 275echo
|
277echo "#define VERSION \"${VERSION}\""
|
276[ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
|
277[ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\"" |
278 279cat << __HEREDOC__ 280#define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN} 281#define HAVE_FGETLN ${HAVE_FGETLN} 282#define HAVE_FTS ${HAVE_FTS} 283#define HAVE_GETSUBOPT ${HAVE_GETSUBOPT} 284#define HAVE_MMAP ${HAVE_MMAP} 285#define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY} 286#define HAVE_STRCASESTR ${HAVE_STRCASESTR} 287#define HAVE_STRLCAT ${HAVE_STRLCAT} 288#define HAVE_STRLCPY ${HAVE_STRLCPY} 289#define HAVE_STRPTIME ${HAVE_STRPTIME} 290#define HAVE_STRSEP ${HAVE_STRSEP}
|
291#define HAVE_STRTONUM ${HAVE_STRTONUM} |
292#define HAVE_WCHAR ${HAVE_WCHAR} 293#define HAVE_SQLITE3 ${HAVE_SQLITE3} 294#define HAVE_SQLITE3_ERRSTR ${HAVE_SQLITE3_ERRSTR} 295#define HAVE_OHASH ${HAVE_OHASH} 296#define HAVE_MANPATH ${HAVE_MANPATH} 297 298#define BINM_APROPOS "${BINM_APROPOS}" 299#define BINM_MAN "${BINM_MAN}" 300#define BINM_WHATIS "${BINM_WHATIS}" 301#define BINM_MAKEWHATIS "${BINM_MAKEWHATIS}" 302 303#if !defined(__BEGIN_DECLS) 304# ifdef __cplusplus 305# define __BEGIN_DECLS extern "C" { 306# else 307# define __BEGIN_DECLS 308# endif 309#endif 310#if !defined(__END_DECLS) 311# ifdef __cplusplus 312# define __END_DECLS } 313# else 314# define __END_DECLS 315# endif 316#endif 317 318__HEREDOC__ 319 320[ ${HAVE_FGETLN} -eq 0 ] && \ 321 echo "extern char *fgetln(FILE *, size_t *);" 322 323[ ${HAVE_GETSUBOPT} -eq 0 ] && \ 324 echo "extern int getsubopt(char **, char * const *, char **);" 325 326[ ${HAVE_REALLOCARRAY} -eq 0 ] && \ 327 echo "extern void *reallocarray(void *, size_t, size_t);" 328 329[ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3_ERRSTR} -eq 0 ] && 330 echo "extern const char *sqlite3_errstr(int);" 331 332[ ${HAVE_STRCASESTR} -eq 0 ] && \ 333 echo "extern char *strcasestr(const char *, const char *);" 334 335[ ${HAVE_STRLCAT} -eq 0 ] && \ 336 echo "extern size_t strlcat(char *, const char *, size_t);" 337 338[ ${HAVE_STRLCPY} -eq 0 ] && \ 339 echo "extern size_t strlcpy(char *, const char *, size_t);" 340 341[ ${HAVE_STRSEP} -eq 0 ] && \ 342 echo "extern char *strsep(char **, const char *);" 343
|
344[ ${HAVE_STRTONUM} -eq 0 ] && \ 345 echo "extern long long strtonum(const char *, long long, long long, const char **);" 346 |
347echo 348echo "#endif /* MANDOC_CONFIG_H */" 349 350echo "config.h: written" 1>&2 351echo "config.h: written" 1>&3 352 353# --- tests for Makefile.local ----------------------------------------- 354 355exec > Makefile.local 356 357[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin" 358[ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin" 359[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc" 360[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc" 361[ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man" 362[ -z "${EXAMPLEDIR}" ] && EXAMPLEDIR="${PREFIX}/share/examples/mandoc" 363 364[ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs" 365[ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin" 366 367[ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555" 368[ -z "${INSTALL_LIB}" ] && INSTALL_LIB="${INSTALL} -m 0444" 369[ -z "${INSTALL_MAN}" ] && INSTALL_MAN="${INSTALL} -m 0444" 370[ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444" 371 372if [ ${BUILD_DB} -eq 0 -a ${BUILD_CGI} -gt 0 ]; then 373 echo "BUILD_CGI=0 (no BUILD_DB)" 1>&2 374 echo "BUILD_CGI=0 (no BUILD_DB)" 1>&3 375 BUILD_CGI=0 376fi 377 378BUILD_TARGETS="base-build" 379[ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} cgi-build" 380INSTALL_TARGETS="base-install" 381[ ${BUILD_DB} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} db-install" 382[ ${BUILD_CGI} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} cgi-install" 383 384cat << __HEREDOC__
|
382VERSION = ${VERSION}
|
385BUILD_TARGETS = ${BUILD_TARGETS} 386INSTALL_TARGETS = ${INSTALL_TARGETS} 387CFLAGS = ${CFLAGS} 388DBLIB = ${DBLIB} 389STATIC = ${STATIC} 390PREFIX = ${PREFIX} 391BINDIR = ${BINDIR} 392SBINDIR = ${SBINDIR} 393INCLUDEDIR = ${INCLUDEDIR} 394LIBDIR = ${LIBDIR} 395MANDIR = ${MANDIR} 396EXAMPLEDIR = ${EXAMPLEDIR} 397WWWPREFIX = ${WWWPREFIX} 398HTDOCDIR = ${HTDOCDIR} 399CGIBINDIR = ${CGIBINDIR} 400BINM_APROPOS = ${BINM_APROPOS} 401BINM_MAN = ${BINM_MAN} 402BINM_WHATIS = ${BINM_WHATIS} 403BINM_MAKEWHATIS = ${BINM_MAKEWHATIS} 404MANM_MAN = ${MANM_MAN} 405MANM_MDOC = ${MANM_MDOC} 406MANM_ROFF = ${MANM_ROFF} 407MANM_EQN = ${MANM_EQN} 408MANM_TBL = ${MANM_TBL} 409INSTALL = ${INSTALL} 410INSTALL_PROGRAM = ${INSTALL_PROGRAM} 411INSTALL_LIB = ${INSTALL_LIB} 412INSTALL_MAN = ${INSTALL_MAN} 413INSTALL_DATA = ${INSTALL_DATA} 414__HEREDOC__ 415 416[ ${BUILD_DB} -gt 0 ] && \ 417 echo "MAIN_OBJS = \$(BASE_OBJS) \$(DB_OBJS)" 418 419echo "Makefile.local: written" 1>&2 420echo "Makefile.local: written" 1>&3 421 422exit 0
|