Annotation of mandoc/configure, Revision 1.11
1.1 schwarze 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.11 ! schwarze 17: set -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:
! 27: exec 3> config.log
! 28: echo "config.log: writing..."
! 29:
! 30: # --- default settings -------------------------------------------------
! 31: # Initialize all variables here,
! 32: # such that nothing can leak in from the environment.
! 33:
! 34: VERSION="1.13.1"
! 35: echo "VERSION=\"${VERSION}\"" 1>&2
! 36: echo "VERSION=\"${VERSION}\"" 1>&3
! 37:
! 38: OSNAME=
! 39:
! 40: CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make -f -`
! 41: CFLAGS="-g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings"
! 42: DBLIB=
! 43: STATIC="-static"
! 44:
! 45: BUILD_DB=1
! 46: BUILD_CGI=0
! 47:
! 48: HAVE_DIRENT_NAMLEN=
! 49: HAVE_FGETLN=
! 50: HAVE_FTS=
! 51: HAVE_GETSUBOPT=
! 52: HAVE_MMAP=
! 53: HAVE_REALLOCARRAY=
! 54: HAVE_STRCASESTR=
! 55: HAVE_STRLCAT=
! 56: HAVE_STRLCPY=
! 57: HAVE_STRPTIME=
! 58: HAVE_STRSEP=
! 59: HAVE_WCHAR=
! 60:
! 61: HAVE_SQLITE3=
! 62: HAVE_SQLITE3_ERRSTR=
! 63: HAVE_OHASH=
! 64: HAVE_MANPATH=
! 65:
! 66: PREFIX="/usr/local"
! 67: BINDIR=
! 68: SBINDIR=
! 69: INCLUDEDIR=
! 70: LIBDIR=
! 71: MANDIR=
! 72: EXAMPLEDIR=
! 73:
! 74: WWWPREFIX="/var/www"
! 75: HTDOCDIR=
! 76: CGIBINDIR=
! 77:
! 78: INSTALL="install"
! 79: INSTALL_PROGRAM=
! 80: INSTALL_LIB=
! 81: INSTALL_MAN=
! 82: INSTALL_DATA=
! 83:
! 84: # --- manual settings from configure.local -----------------------------
1.8 schwarze 85:
1.11 ! schwarze 86: if [ -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
! 91: else
! 92: echo "configure.local: no (fully automatic configuration)" 1>&2
! 93: echo "configure.local: no (fully automatic configuration)" 1>&3
! 94: fi
! 95: echo 1>&3
! 96:
! 97: # --- tests for config.h ----------------------------------------------
! 98:
! 99: COMP="${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
! 104: ismanual() {
! 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
! 116: singletest() {
! 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
1.1 schwarze 129:
1.11 ! schwarze 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: }
1.1 schwarze 144:
1.11 ! schwarze 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
1.1 schwarze 148: runtest() {
1.11 ! schwarze 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
1.1 schwarze 155: }
156:
1.11 ! schwarze 157: # --- library functions ---
! 158: runtest dirent-namlen DIRENT_NAMLEN || true
! 159: runtest fgetln FGETLN || true
! 160: runtest fts FTS || true
! 161: runtest getsubopt GETSUBOPT || true
! 162: runtest mmap MMAP || true
! 163: runtest reallocarray REALLOCARRAY || true
! 164: runtest strcasestr STRCASESTR || true
! 165: runtest strlcat STRLCAT || true
! 166: runtest strlcpy STRLCPY || true
! 167: runtest strptime STRPTIME || true
! 168: runtest strsep STRSEP || true
! 169: runtest wchar WCHAR || true
! 170:
! 171: # --- sqlite3 ---
! 172: DETECTLIB=
! 173: if [ ${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
! 178: elif ismanual sqlite3 "${HAVE_SQLITE3}"; then
! 179: DETECTLIB="-lsqlite3"
! 180: elif [ -n "${DBLIB}" ]; then
! 181: runtest sqlite3 SQLITE3 "${DBLIB}" || true
! 182: elif singletest sqlite3 SQLITE3 "-lsqlite3"; then
! 183: DETECTLIB="-lsqlite3"
! 184: elif 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"
! 188: fi
! 189: if [ ${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
! 194: fi
! 195:
! 196: # --- sqlite3_errstr ---
! 197: if [ ${BUILD_DB} -eq 0 ]; then
! 198: HAVE_SQLITE3_ERRSTR=1
! 199: elif ismanual sqlite3_errstr "${HAVE_SQLITE3_ERRSTR}"; then
! 200: :
! 201: elif [ -n "${DBLIB}" ]; then
! 202: runtest sqlite3_errstr SQLITE3_ERRSTR "${DBLIB}" || true
! 203: else
! 204: runtest sqlite3_errstr SQLITE3_ERRSTR "${DETECTLIB}" || true
! 205: fi
! 206:
! 207: # --- ohash ---
! 208: if [ ${BUILD_DB} -eq 0 ]; then
! 209: HAVE_OHASH=1
! 210: elif ismanual ohash "${HAVE_OHASH}"; then
! 211: :
! 212: elif [ -n "${DBLIB}" ]; then
! 213: runtest ohash OHASH "${DBLIB}" || true
! 214: elif singletest ohash OHASH; then
! 215: :
! 216: elif runtest ohash OHASH "-lutil"; then
! 217: DETECTLIB="${DETECTLIB} -lutil"
! 218: fi
! 219:
! 220: # --- DBLIB ---
! 221: if [ ${BUILD_DB} -eq 0 ]; then
! 222: DBLIB=
! 223: elif [ -z "${DBLIB}" ]; then
! 224: DBLIB="${DETECTLIB}"
! 225: echo "DBLIB=\"${DBLIB}\"" 1>&2
! 226: echo "DBLIB=\"${DBLIB}\"" 1>&3
! 227: echo 1>&3
! 228: fi
! 229:
! 230: # --- manpath ---
! 231: if [ ${BUILD_DB} -eq 0 ]; then
! 232: HAVE_MANPATH=0
! 233: elif ismanual manpath "${HAVE_MANPATH}"; then
! 234: :
! 235: elif 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
! 240: else
! 241: echo "manpath: no" 1>&2
! 242: echo "manpath: no" 1>&3
! 243: echo 1>&3
! 244: HAVE_MANPATH=0
! 245: fi
! 246:
! 247: # --- write config.h ---
! 248:
! 249: exec > config.h
! 250:
! 251: cat << __HEREDOC__
! 252: #ifndef MANDOC_CONFIG_H
! 253: #define MANDOC_CONFIG_H
! 254:
! 255: #if defined(__linux__) || defined(__MINT__)
! 256: #define _GNU_SOURCE /* getsubopt(), strcasestr(), strptime() */
! 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:
1.1 schwarze 266: echo
267: echo "#define VERSION \"${VERSION}\""
1.11 ! schwarze 268: [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
! 269:
! 270: cat << __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_ERRSTR ${HAVE_SQLITE3_ERRSTR}
! 284: #define HAVE_OHASH ${HAVE_OHASH}
! 285: #define HAVE_MANPATH ${HAVE_MANPATH}
! 286:
! 287: #if !defined(__BEGIN_DECLS)
! 288: # ifdef __cplusplus
! 289: # define __BEGIN_DECLS extern "C" {
! 290: # else
! 291: # define __BEGIN_DECLS
! 292: # endif
! 293: #endif
! 294: #if !defined(__END_DECLS)
! 295: # ifdef __cplusplus
! 296: # define __END_DECLS }
! 297: # else
! 298: # define __END_DECLS
! 299: # endif
! 300: #endif
! 301:
! 302: __HEREDOC__
! 303:
! 304: [ ${HAVE_FGETLN} -eq 0 ] && \
! 305: echo "extern char *fgetln(FILE *, size_t *);"
! 306:
! 307: if [ ${HAVE_GETSUBOPT} -eq 0 ]; then
! 308: echo "extern int getsubopt(char **, char * const *, char **);"
! 309: echo "extern char *suboptarg;"
! 310: fi
! 311:
! 312: [ ${HAVE_REALLOCARRAY} -eq 0 ] && \
! 313: echo "extern void *reallocarray(void *, size_t, size_t);"
! 314:
! 315: [ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3_ERRSTR} -eq 0 ] &&
! 316: echo "extern const char *sqlite3_errstr(int);"
! 317:
! 318: [ ${HAVE_STRCASESTR} -eq 0 ] && \
! 319: echo "extern char *strcasestr(const char *, const char *);"
! 320:
! 321: [ ${HAVE_STRLCAT} -eq 0 ] && \
! 322: echo "extern size_t strlcat(char *, const char *, size_t);"
! 323:
! 324: [ ${HAVE_STRLCPY} -eq 0 ] && \
! 325: echo "extern size_t strlcpy(char *, const char *, size_t);"
! 326:
! 327: [ ${HAVE_STRSEP} -eq 0 ] && \
! 328: echo "extern char *strsep(char **, const char *);"
! 329:
1.1 schwarze 330: echo
1.11 ! schwarze 331: echo "#endif /* MANDOC_CONFIG_H */"
! 332:
! 333: echo "config.h: written" 1>&2
! 334: echo "config.h: written" 1>&3
! 335:
! 336: # --- tests for Makefile.local -----------------------------------------
! 337:
! 338: exec > Makefile.local
! 339:
! 340: [ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin"
! 341: [ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin"
! 342: [ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc"
! 343: [ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc"
! 344: [ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man"
! 345: [ -z "${EXAMPLEDIR}" ] && EXAMPLEDIR="${PREFIX}/share/examples/mandoc"
! 346:
! 347: [ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs"
! 348: [ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin"
! 349:
! 350: [ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555"
! 351: [ -z "${INSTALL_LIB}" ] && INSTALL_LIB="${INSTALL} -m 0444"
! 352: [ -z "${INSTALL_MAN}" ] && INSTALL_MAN="${INSTALL} -m 0444"
! 353: [ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444"
! 354:
! 355: if [ ${BUILD_DB} -eq 0 -a ${BUILD_CGI} -gt 0 ]; then
! 356: echo "BUILD_CGI=0 (no BUILD_DB)" 1>&2
! 357: echo "BUILD_CGI=0 (no BUILD_DB)" 1>&3
! 358: BUILD_CGI=0
! 359: fi
! 360:
! 361: BUILD_TARGETS="base-build"
! 362: [ ${BUILD_DB} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} db-build"
! 363: [ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} cgi-build"
! 364:
! 365: cat << __HEREDOC__
! 366: VERSION = ${VERSION}
! 367: BUILD_TARGETS = ${BUILD_TARGETS}
! 368: CFLAGS = ${CFLAGS}
! 369: DBLIB = ${DBLIB}
! 370: STATIC = ${STATIC}
! 371: PREFIX = ${PREFIX}
! 372: BINDIR = ${BINDIR}
! 373: SBINDIR = ${SBINDIR}
! 374: INCLUDEDIR = ${INCLUDEDIR}
! 375: LIBDIR = ${LIBDIR}
! 376: MANDIR = ${MANDIR}
! 377: EXAMPLEDIR = ${EXAMPLEDIR}
! 378: WWWPREFIX = ${WWWPREFIX}
! 379: HTDOCDIR = ${HTDOCDIR}
! 380: CGIBINDIR = ${CGIBINDIR}
! 381: INSTALL = ${INSTALL}
! 382: INSTALL_PROGRAM = ${INSTALL_PROGRAM}
! 383: INSTALL_LIB = ${INSTALL_LIB}
! 384: INSTALL_MAN = ${INSTALL_MAN}
! 385: INSTALL_DATA = ${INSTALL_DATA}
! 386: __HEREDOC__
! 387:
! 388: echo "Makefile.local: written" 1>&2
! 389: echo "Makefile.local: written" 1>&3
1.1 schwarze 390:
391: exit 0
CVSweb