1#!/bin/sh 2# 3# Copyright (c) 2014 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
| 1#!/bin/sh 2# 3# Copyright (c) 2014 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
|
17echo "/* RUNNING ./CONFIGURE - SHOULD BE USED ONLY VIA MAKE, READ INSTALL */" 18
| |
19set -e
| 17set -e
|
20exec > config.h 2> config.log
| |
21
| 18
|
22CFLAGS="${CFLAGS} -Wno-unused -Werror"
| 19[ -e config.log ] && mv config.log config.log.old 20[ -e config.h ] && mv config.h config.h.old
|
23
| 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.1" 35echo "VERSION=\"${VERSION}\"" 1>&2 36echo "VERSION=\"${VERSION}\"" 1>&3 37 38OSNAME= 39 40CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make -f -` 41CFLAGS="-g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings" 42DBLIB= 43STATIC="-static" 44 45BUILD_DB=1 46BUILD_CGI=0 47 48HAVE_DIRENT_NAMLEN= 49HAVE_FGETLN= 50HAVE_FTS= 51HAVE_GETSUBOPT= 52HAVE_MMAP= 53HAVE_REALLOCARRAY= 54HAVE_STRCASESTR= 55HAVE_STRLCAT= 56HAVE_STRLCPY= 57HAVE_STRPTIME= 58HAVE_STRSEP= 59HAVE_WCHAR= 60 61HAVE_SQLITE3= 62HAVE_SQLITE3_ERRSTR= 63HAVE_OHASH= 64HAVE_MANPATH= 65 66PREFIX="/usr/local" 67BINDIR= 68SBINDIR= 69INCLUDEDIR= 70LIBDIR= 71MANDIR= 72EXAMPLEDIR= 73 74WWWPREFIX="/var/www" 75HTDOCDIR= 76CGIBINDIR= 77 78INSTALL="install" 79INSTALL_PROGRAM= 80INSTALL_LIB= 81INSTALL_MAN= 82INSTALL_DATA= 83 84# --- manual settings from configure.local ----------------------------- 85 86if [ -e ./configure.local ]; then 87 echo "configure.local: reading..." 1>&2 88 echo "configure.local: reading..." 1>&3 89 cat ./configure.local 1>&3 90 . ./configure.local 91else 92 echo "configure.local: no (fully automatic configuration)" 1>&2 93 echo "configure.local: no (fully automatic configuration)" 1>&3 94fi 95echo 1>&3 96 97# --- tests for config.h ---------------------------------------------- 98 99COMP="${CC} ${CFLAGS} -Wno-unused -Werror" 100 101# Check whether this HAVE_ setting is manually overridden. 102# If yes, use the override, if no, do not decide anything yet. 103# Arguments: lower-case test name, manual value 104ismanual() { 105 [ -z "${2}" ] && return 1 106 echo "${1}: manual (${2})" 1>&2 107 echo "${1}: manual (${2})" 1>&3 108 echo 1>&3 109 return 0 110} 111 112# Run a single autoconfiguration test. 113# In case of success, enable the feature. 114# In case of failure, do not decide anything yet. 115# Arguments: lower-case test name, upper-case test name, additional CFLAGS 116singletest() { 117 cat 1>&3 << __HEREDOC__ 118${1}: testing... 119${COMP} ${3} -o test-${1} test-${1}.c 120__HEREDOC__ 121 122 if ${COMP} ${3} -o "test-${1}" "test-${1}.c" 1>&3 2>&3; then 123 echo "${1}: ${CC} succeeded" 1>&3 124 else 125 echo "${1}: ${CC} failed with $?" 1>&3 126 echo 1>&3 127 return 1 128 fi 129 130 if ./test-${1} 1>&3 2>&3; then 131 echo "${1}: yes" 1>&2 132 echo "${1}: yes" 1>&3 133 echo 1>&3 134 eval HAVE_${2}=1 135 rm "test-${1}" 136 return 0 137 else 138 echo "${1}: execution failed with $?" 1>&3 139 echo 1>&3 140 rm "test-${1}" 141 return 1 142 fi 143} 144 145# Run a complete autoconfiguration test, including the check for 146# a manual override and disabling the feature on failure. 147# Arguments: lower case name, upper case name, additional CFLAGS
|
24runtest() {
| 148runtest() {
|
25 echo ${CC} ${CFLAGS} ${3} -o test-${1} test-${1}.c 1>&2 26 ${CC} ${CFLAGS} ${3} -o "test-${1}" "test-${1}.c" 1>&2 || return 0 27 "./test-${1}" && echo "#define HAVE_${2}" \ 28 || echo FAILURE: test-${1} returned $? 1>&2 29 rm "test-${1}"
| 149 eval _manual=\${HAVE_${2}} 150 ismanual "${1}" "${_manual}" && return 0 151 singletest "${1}" "${2}" "${3}" && return 0 152 echo "${1}: no" 1>&2 153 eval HAVE_${2}=0 154 return 1
|
30} 31
| 155} 156
|
32cat config.h.pre
| 157# --- library functions --- 158runtest dirent-namlen DIRENT_NAMLEN || true 159runtest fgetln FGETLN || true 160runtest fts FTS || true 161runtest getsubopt GETSUBOPT || true 162runtest mmap MMAP || true 163runtest reallocarray REALLOCARRAY || true 164runtest strcasestr STRCASESTR || true 165runtest strlcat STRLCAT || true 166runtest strlcpy STRLCPY || true 167runtest strptime STRPTIME || true 168runtest strsep STRSEP || true 169runtest wchar WCHAR || true 170 171# --- sqlite3 --- 172DETECTLIB= 173if [ ${BUILD_DB} -eq 0 ]; then 174 echo "BUILD_DB=0 (manual)" 1>&2 175 echo "BUILD_DB=0 (manual)" 1>&3 176 echo 1>&3 177 HAVE_SQLITE3=0 178elif ismanual sqlite3 "${HAVE_SQLITE3}"; then 179 DETECTLIB="-lsqlite3" 180elif [ -n "${DBLIB}" ]; then 181 runtest sqlite3 SQLITE3 "${DBLIB}" || true 182elif singletest sqlite3 SQLITE3 "-lsqlite3"; then 183 DETECTLIB="-lsqlite3" 184elif runtest sqlite3 SQLITE3 \ 185 "-I/usr/local/include -L/usr/local/lib -lsqlite3"; then 186 DETECTLIB="-L/usr/local/lib -lsqlite3" 187 CFLAGS="${CFLAGS} -I/usr/local/include" 188fi 189if [ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3} -eq 0 ]; then 190 echo "BUILD_DB=0 (no sqlite3)" 1>&2 191 echo "BUILD_DB=0 (no sqlite3)" 1>&3 192 echo 1>&3 193 BUILD_DB=0 194fi 195 196# --- sqlite3_errstr --- 197if [ ${BUILD_DB} -eq 0 ]; then 198 HAVE_SQLITE3_ERRSTR=1 199elif ismanual sqlite3_errstr "${HAVE_SQLITE3_ERRSTR}"; then 200 : 201elif [ -n "${DBLIB}" ]; then 202 runtest sqlite3_errstr SQLITE3_ERRSTR "${DBLIB}" || true 203else 204 runtest sqlite3_errstr SQLITE3_ERRSTR "${DETECTLIB}" || true 205fi 206 207# --- ohash --- 208if [ ${BUILD_DB} -eq 0 ]; then 209 HAVE_OHASH=1 210elif ismanual ohash "${HAVE_OHASH}"; then 211 : 212elif [ -n "${DBLIB}" ]; then 213 runtest ohash OHASH "${DBLIB}" || true 214elif singletest ohash OHASH; then 215 : 216elif runtest ohash OHASH "-lutil"; then 217 DETECTLIB="${DETECTLIB} -lutil" 218fi 219 220# --- DBLIB --- 221if [ ${BUILD_DB} -eq 0 ]; then 222 DBLIB= 223elif [ -z "${DBLIB}" ]; then 224 DBLIB="${DETECTLIB}" 225 echo "DBLIB=\"${DBLIB}\"" 1>&2 226 echo "DBLIB=\"${DBLIB}\"" 1>&3 227 echo 1>&3 228fi 229 230# --- manpath --- 231if [ ${BUILD_DB} -eq 0 ]; then 232 HAVE_MANPATH=0 233elif ismanual manpath "${HAVE_MANPATH}"; then 234 : 235elif manpath 1>&3 2>&3; then 236 echo "manpath: yes" 1>&2 237 echo "manpath: yes" 1>&3 238 echo 1>&3 239 HAVE_MANPATH=1 240else 241 echo "manpath: no" 1>&2 242 echo "manpath: no" 1>&3 243 echo 1>&3 244 HAVE_MANPATH=0 245fi 246 247# --- write config.h --- 248 249exec > config.h 250 251cat << __HEREDOC__ 252#ifndef MANDOC_CONFIG_H 253#define MANDOC_CONFIG_H 254 255#if defined(__linux__) || defined(__MINT__) 256#define _GNU_SOURCE /* See test-*.c what needs this. */ 257#endif 258 259__HEREDOC__ 260 261[ ${HAVE_FGETLN} -eq 0 -o ${HAVE_REALLOCARRAY} -eq 0 -o \ 262 ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 ] \ 263 && echo "#include <sys/types.h>" 264[ ${HAVE_FGETLN} -eq 0 ] && echo "#include <stdio.h>" 265
|
33echo 34echo "#define VERSION \"${VERSION}\""
| 266echo 267echo "#define VERSION \"${VERSION}\""
|
35runtest fgetln FGETLN 36runtest getsubopt GETSUBOPT 37runtest mmap MMAP 38runtest ohash OHASH "${DBLIB}" 39runtest reallocarray REALLOCARRAY 40runtest sqlite3_errstr SQLITE3_ERRSTR "${DBLIB}" 41runtest strcasestr STRCASESTR 42runtest strlcat STRLCAT 43runtest strlcpy STRLCPY 44runtest strptime STRPTIME 45runtest strsep STRSEP
| 268[ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\"" 269 270cat << __HEREDOC__ 271#define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN} 272#define HAVE_FGETLN ${HAVE_FGETLN} 273#define HAVE_FTS ${HAVE_FTS} 274#define HAVE_GETSUBOPT ${HAVE_GETSUBOPT} 275#define HAVE_MMAP ${HAVE_MMAP} 276#define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY} 277#define HAVE_STRCASESTR ${HAVE_STRCASESTR} 278#define HAVE_STRLCAT ${HAVE_STRLCAT} 279#define HAVE_STRLCPY ${HAVE_STRLCPY} 280#define HAVE_STRPTIME ${HAVE_STRPTIME} 281#define HAVE_STRSEP ${HAVE_STRSEP} 282#define HAVE_WCHAR ${HAVE_WCHAR} 283#define HAVE_SQLITE3 ${HAVE_SQLITE3} 284#define HAVE_SQLITE3_ERRSTR ${HAVE_SQLITE3_ERRSTR} 285#define HAVE_OHASH ${HAVE_OHASH} 286#define HAVE_MANPATH ${HAVE_MANPATH} 287 288#if !defined(__BEGIN_DECLS) 289# ifdef __cplusplus 290# define __BEGIN_DECLS extern "C" { 291# else 292# define __BEGIN_DECLS 293# endif 294#endif 295#if !defined(__END_DECLS) 296# ifdef __cplusplus 297# define __END_DECLS } 298# else 299# define __END_DECLS 300# endif 301#endif 302 303__HEREDOC__ 304 305[ ${HAVE_FGETLN} -eq 0 ] && \ 306 echo "extern char *fgetln(FILE *, size_t *);" 307 308[ ${HAVE_GETSUBOPT} -eq 0 ] && \ 309 echo "extern int getsubopt(char **, char * const *, char **);" 310 311[ ${HAVE_REALLOCARRAY} -eq 0 ] && \ 312 echo "extern void *reallocarray(void *, size_t, size_t);" 313 314[ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3_ERRSTR} -eq 0 ] && 315 echo "extern const char *sqlite3_errstr(int);" 316 317[ ${HAVE_STRCASESTR} -eq 0 ] && \ 318 echo "extern char *strcasestr(const char *, const char *);" 319 320[ ${HAVE_STRLCAT} -eq 0 ] && \ 321 echo "extern size_t strlcat(char *, const char *, size_t);" 322 323[ ${HAVE_STRLCPY} -eq 0 ] && \ 324 echo "extern size_t strlcpy(char *, const char *, size_t);" 325 326[ ${HAVE_STRSEP} -eq 0 ] && \ 327 echo "extern char *strsep(char **, const char *);" 328
|
46echo
| 329echo
|
47cat config.h.post
| 330echo "#endif /* MANDOC_CONFIG_H */"
|
48
| 331
|
| 332echo "config.h: written" 1>&2 333echo "config.h: written" 1>&3 334 335# --- tests for Makefile.local ----------------------------------------- 336 337exec > Makefile.local 338 339[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin" 340[ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin" 341[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc" 342[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc" 343[ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man" 344[ -z "${EXAMPLEDIR}" ] && EXAMPLEDIR="${PREFIX}/share/examples/mandoc" 345 346[ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs" 347[ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin" 348 349[ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555" 350[ -z "${INSTALL_LIB}" ] && INSTALL_LIB="${INSTALL} -m 0444" 351[ -z "${INSTALL_MAN}" ] && INSTALL_MAN="${INSTALL} -m 0444" 352[ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444" 353 354if [ ${BUILD_DB} -eq 0 -a ${BUILD_CGI} -gt 0 ]; then 355 echo "BUILD_CGI=0 (no BUILD_DB)" 1>&2 356 echo "BUILD_CGI=0 (no BUILD_DB)" 1>&3 357 BUILD_CGI=0 358fi 359 360BUILD_TARGETS="base-build" 361[ ${BUILD_DB} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} db-build" 362[ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} cgi-build" 363 364cat << __HEREDOC__ 365VERSION = ${VERSION} 366BUILD_TARGETS = ${BUILD_TARGETS} 367CFLAGS = ${CFLAGS} 368DBLIB = ${DBLIB} 369STATIC = ${STATIC} 370PREFIX = ${PREFIX} 371BINDIR = ${BINDIR} 372SBINDIR = ${SBINDIR} 373INCLUDEDIR = ${INCLUDEDIR} 374LIBDIR = ${LIBDIR} 375MANDIR = ${MANDIR} 376EXAMPLEDIR = ${EXAMPLEDIR} 377WWWPREFIX = ${WWWPREFIX} 378HTDOCDIR = ${HTDOCDIR} 379CGIBINDIR = ${CGIBINDIR} 380INSTALL = ${INSTALL} 381INSTALL_PROGRAM = ${INSTALL_PROGRAM} 382INSTALL_LIB = ${INSTALL_LIB} 383INSTALL_MAN = ${INSTALL_MAN} 384INSTALL_DATA = ${INSTALL_DATA} 385__HEREDOC__ 386 387[ ${BUILD_DB} -gt 0 ] && \ 388 echo "MAN_OBJS = \$(MANDOC_OBJS) \$(APROPOS_OBJS)" 389 390echo "Makefile.local: written" 1>&2 391echo "Makefile.local: written" 1>&3 392
|
49exit 0
| 393exit 0
|