Home | History | Annotate | Line # | Download | only in dist
configure revision 1.2
      1 #!/bin/sh
      2 #
      3 # Copyright (c) 2014, 2015 Ingo Schwarze <schwarze (at] 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 
     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 OSNAME=
     35 
     36 CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make -f -`
     37 CFLAGS="-g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings"
     38 DBLIB=
     39 STATIC="-static"
     40 
     41 BUILD_DB=1
     42 BUILD_CGI=0
     43 
     44 HAVE_DIRENT_NAMLEN=
     45 HAVE_FGETLN=
     46 HAVE_FTS=
     47 HAVE_GETSUBOPT=
     48 HAVE_MMAP=
     49 HAVE_REALLOCARRAY=
     50 HAVE_STRCASESTR=
     51 HAVE_STRLCAT=
     52 HAVE_STRLCPY=
     53 HAVE_STRPTIME=
     54 HAVE_STRSEP=
     55 HAVE_STRTONUM=
     56 HAVE_WCHAR=
     57 
     58 HAVE_SQLITE3=
     59 HAVE_SQLITE3_ERRSTR=
     60 HAVE_OHASH=
     61 HAVE_MANPATH=
     62 
     63 PREFIX="/usr/local"
     64 BINDIR=
     65 SBINDIR=
     66 INCLUDEDIR=
     67 LIBDIR=
     68 MANDIR=
     69 EXAMPLEDIR=
     70 HOMEBREWDIR=
     71 
     72 WWWPREFIX="/var/www"
     73 HTDOCDIR=
     74 CGIBINDIR=
     75 
     76 BINM_APROPOS="apropos"
     77 BINM_MAN="man"
     78 BINM_WHATIS="whatis"
     79 BINM_MAKEWHATIS="makewhatis"
     80 MANM_MAN="man"
     81 MANM_MDOC="mdoc"
     82 MANM_ROFF="roff"
     83 MANM_EQN="eqn"
     84 MANM_TBL="tbl"
     85 
     86 INSTALL="install"
     87 INSTALL_PROGRAM=
     88 INSTALL_LIB=
     89 INSTALL_MAN=
     90 INSTALL_DATA=
     91 
     92 # --- manual settings from configure.local -----------------------------
     93 
     94 if [ -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
     99 else
    100 	echo "configure.local: no (fully automatic configuration)" 1>&2
    101 	echo "configure.local: no (fully automatic configuration)" 1>&3
    102 fi
    103 echo 1>&3
    104 
    105 # --- tests for config.h  ----------------------------------------------
    106 
    107 COMP="${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
    112 ismanual() {
    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
    124 singletest() {
    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
    156 runtest() {
    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 ---
    166 runtest dirent-namlen	DIRENT_NAMLEN	|| true
    167 runtest fgetln		FGETLN		|| true
    168 runtest fts		FTS		|| true
    169 runtest getsubopt	GETSUBOPT	|| true
    170 runtest mmap		MMAP		|| true
    171 runtest reallocarray	REALLOCARRAY	|| true
    172 runtest strcasestr	STRCASESTR	|| true
    173 runtest strlcat		STRLCAT		|| true
    174 runtest strlcpy		STRLCPY		|| true
    175 runtest strptime	STRPTIME	|| true
    176 runtest strsep		STRSEP		|| true
    177 runtest strtonum	STRTONUM	|| true
    178 runtest wchar		WCHAR		|| true
    179 
    180 # --- sqlite3 ---
    181 DETECTLIB=
    182 if [ ${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
    187 elif ismanual sqlite3 "${HAVE_SQLITE3}"; then
    188 	DETECTLIB="-lsqlite3"
    189 elif [ -n "${DBLIB}" ]; then
    190 	runtest sqlite3 SQLITE3 "${DBLIB}" || true
    191 elif singletest sqlite3 SQLITE3 "-lsqlite3"; then
    192 	DETECTLIB="-lsqlite3"
    193 elif 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"
    197 fi
    198 if [ ${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
    203 fi
    204 
    205 # --- sqlite3_errstr ---
    206 if [ ${BUILD_DB} -eq 0 ]; then
    207 	HAVE_SQLITE3_ERRSTR=1
    208 elif ismanual sqlite3_errstr "${HAVE_SQLITE3_ERRSTR}"; then
    209 	:
    210 elif [ -n "${DBLIB}" ]; then
    211 	runtest sqlite3_errstr SQLITE3_ERRSTR "${DBLIB}" || true
    212 else
    213 	runtest sqlite3_errstr SQLITE3_ERRSTR "${DETECTLIB}" || true
    214 fi
    215 
    216 # --- ohash ---
    217 if [ ${BUILD_DB} -eq 0 ]; then
    218 	HAVE_OHASH=1
    219 elif ismanual ohash "${HAVE_OHASH}"; then
    220 	:
    221 elif [ -n "${DBLIB}" ]; then
    222 	runtest ohash OHASH "${DBLIB}" || true
    223 elif singletest ohash OHASH; then
    224 	:
    225 elif runtest ohash OHASH "-lutil"; then
    226 	DETECTLIB="${DETECTLIB} -lutil"
    227 fi
    228 
    229 # --- DBLIB ---
    230 if [ ${BUILD_DB} -eq 0 ]; then
    231 	DBLIB=
    232 elif [ -z "${DBLIB}" ]; then
    233 	DBLIB="${DETECTLIB}"
    234 	echo "DBLIB=\"${DBLIB}\"" 1>&2
    235 	echo "DBLIB=\"${DBLIB}\"" 1>&3
    236 	echo 1>&3
    237 fi
    238 
    239 # --- manpath ---
    240 if ismanual manpath "${HAVE_MANPATH}"; then
    241 	:
    242 elif manpath 1>&3 2>&3; then
    243 	echo "manpath: yes" 1>&2
    244 	echo "manpath: yes" 1>&3
    245 	echo 1>&3
    246 	HAVE_MANPATH=1
    247 else
    248 	echo "manpath: no" 1>&2
    249 	echo "manpath: no" 1>&3
    250 	echo 1>&3
    251 	HAVE_MANPATH=0
    252 fi
    253 
    254 # --- write config.h ---
    255 
    256 exec > config.h
    257 
    258 cat << __HEREDOC__
    259 #ifndef MANDOC_CONFIG_H
    260 #define MANDOC_CONFIG_H
    261 
    262 #ifdef HAVE_NBTOOL_CONFIG_H
    263 #include "nbtool_config.h"
    264 #endif
    265 
    266 #if defined(__linux__) || defined(__MINT__)
    267 #define _GNU_SOURCE	/* See test-*.c what needs this. */
    268 #endif
    269 
    270 __HEREDOC__
    271 
    272 [ ${HAVE_FGETLN} -eq 0 -o ${HAVE_REALLOCARRAY} -eq 0 -o \
    273   ${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 ] \
    274 	&& echo "#include <sys/types.h>"
    275 [ ${HAVE_FGETLN} -eq 0 ] && echo "#include <stdio.h>"
    276 
    277 echo
    278 [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
    279 [ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\""
    280 
    281 cat << __HEREDOC__
    282 #ifndef HAVE_NBTOOL_CONFIG_H
    283 #define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN}
    284 #define HAVE_FGETLN ${HAVE_FGETLN}
    285 #define HAVE_FTS ${HAVE_FTS}
    286 #define HAVE_GETSUBOPT ${HAVE_GETSUBOPT}
    287 #define HAVE_MMAP ${HAVE_MMAP}
    288 #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
    289 #define HAVE_STRCASESTR ${HAVE_STRCASESTR}
    290 #define HAVE_STRLCAT ${HAVE_STRLCAT}
    291 #define HAVE_STRLCPY ${HAVE_STRLCPY}
    292 #define HAVE_STRPTIME ${HAVE_STRPTIME}
    293 #define HAVE_STRSEP ${HAVE_STRSEP}
    294 #define HAVE_STRTONUM ${HAVE_STRTONUM}
    295 #define HAVE_WCHAR ${HAVE_WCHAR}
    296 #define HAVE_SQLITE3 ${HAVE_SQLITE3}
    297 #define HAVE_SQLITE3_ERRSTR ${HAVE_SQLITE3_ERRSTR}
    298 #define HAVE_OHASH ${HAVE_OHASH}
    299 #define HAVE_MANPATH ${HAVE_MANPATH}
    300 #endif
    301 
    302 #define BINM_APROPOS "${BINM_APROPOS}"
    303 #define BINM_MAN "${BINM_MAN}"
    304 #define BINM_WHATIS "${BINM_WHATIS}"
    305 #define BINM_MAKEWHATIS "${BINM_MAKEWHATIS}"
    306 
    307 #if !defined(__BEGIN_DECLS)
    308 #  ifdef __cplusplus
    309 #  define	__BEGIN_DECLS		extern "C" {
    310 #  else
    311 #  define	__BEGIN_DECLS
    312 #  endif
    313 #endif
    314 #if !defined(__END_DECLS)
    315 #  ifdef __cplusplus
    316 #  define	__END_DECLS		}
    317 #  else
    318 #  define	__END_DECLS
    319 #  endif
    320 #endif
    321 
    322 __HEREDOC__
    323 
    324 [ ${HAVE_FGETLN} -eq 0 ] && \
    325 	echo "extern	char	 *fgetln(FILE *, size_t *);"
    326 
    327 [ ${HAVE_GETSUBOPT} -eq 0 ] && \
    328 	echo "extern	int	  getsubopt(char **, char * const *, char **);"
    329 
    330 [ ${HAVE_REALLOCARRAY} -eq 0 ] && \
    331 	echo "extern	void	 *reallocarray(void *, size_t, size_t);"
    332 
    333 [ ${BUILD_DB} -gt 0 -a ${HAVE_SQLITE3_ERRSTR} -eq 0 ] &&
    334 	echo "extern	const char *sqlite3_errstr(int);"
    335 
    336 [ ${HAVE_STRCASESTR} -eq 0 ] && \
    337 	echo "extern	char	 *strcasestr(const char *, const char *);"
    338 
    339 [ ${HAVE_STRLCAT} -eq 0 ] && \
    340 	echo "extern	size_t	  strlcat(char *, const char *, size_t);"
    341 
    342 [ ${HAVE_STRLCPY} -eq 0 ] && \
    343 	echo "extern	size_t	  strlcpy(char *, const char *, size_t);"
    344 
    345 [ ${HAVE_STRSEP} -eq 0 ] && \
    346 	echo "extern	char	 *strsep(char **, const char *);"
    347 
    348 [ ${HAVE_STRTONUM} -eq 0 ] && \
    349 	echo "extern	long long strtonum(const char *, long long, long long, const char **);"
    350 
    351 echo
    352 echo "#endif /* MANDOC_CONFIG_H */"
    353 
    354 echo "config.h: written" 1>&2
    355 echo "config.h: written" 1>&3
    356 
    357 # --- tests for Makefile.local -----------------------------------------
    358 
    359 exec > Makefile.local
    360 
    361 [ -z "${BINDIR}"     ] && BINDIR="${PREFIX}/bin"
    362 [ -z "${SBINDIR}"    ] && SBINDIR="${PREFIX}/sbin"
    363 [ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc"
    364 [ -z "${LIBDIR}"     ] && LIBDIR="${PREFIX}/lib/mandoc"
    365 [ -z "${MANDIR}"     ] && MANDIR="${PREFIX}/man"
    366 [ -z "${EXAMPLEDIR}" ] && EXAMPLEDIR="${PREFIX}/share/examples/mandoc"
    367 
    368 [ -z "${HTDOCDIR}"   ] && HTDOCDIR="${WWWPREFIX}/htdocs"
    369 [ -z "${CGIBINDIR}"  ] && CGIBINDIR="${WWWPREFIX}/cgi-bin"
    370 
    371 [ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555"
    372 [ -z "${INSTALL_LIB}"     ] && INSTALL_LIB="${INSTALL} -m 0444"
    373 [ -z "${INSTALL_MAN}"     ] && INSTALL_MAN="${INSTALL} -m 0444"
    374 [ -z "${INSTALL_DATA}"    ] && INSTALL_DATA="${INSTALL} -m 0444"
    375 
    376 if [ ${BUILD_DB} -eq 0 -a ${BUILD_CGI} -gt 0 ]; then
    377 	echo "BUILD_CGI=0 (no BUILD_DB)" 1>&2
    378 	echo "BUILD_CGI=0 (no BUILD_DB)" 1>&3
    379 	BUILD_CGI=0
    380 fi
    381 
    382 BUILD_TARGETS="base-build"
    383 [ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} cgi-build"
    384 INSTALL_TARGETS="base-install"
    385 [ ${BUILD_DB}  -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} db-install"
    386 [ ${BUILD_CGI} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} cgi-install"
    387 
    388 cat << __HEREDOC__
    389 BUILD_TARGETS	= ${BUILD_TARGETS}
    390 INSTALL_TARGETS	= ${INSTALL_TARGETS}
    391 CFLAGS		= ${CFLAGS}
    392 DBLIB		= ${DBLIB}
    393 STATIC		= ${STATIC}
    394 PREFIX		= ${PREFIX}
    395 BINDIR		= ${BINDIR}
    396 SBINDIR		= ${SBINDIR}
    397 INCLUDEDIR	= ${INCLUDEDIR}
    398 LIBDIR		= ${LIBDIR}
    399 MANDIR		= ${MANDIR}
    400 EXAMPLEDIR	= ${EXAMPLEDIR}
    401 WWWPREFIX	= ${WWWPREFIX}
    402 HTDOCDIR	= ${HTDOCDIR}
    403 CGIBINDIR	= ${CGIBINDIR}
    404 BINM_APROPOS	= ${BINM_APROPOS}
    405 BINM_MAN	= ${BINM_MAN}
    406 BINM_WHATIS	= ${BINM_WHATIS}
    407 BINM_MAKEWHATIS	= ${BINM_MAKEWHATIS}
    408 MANM_MAN	= ${MANM_MAN}
    409 MANM_MDOC	= ${MANM_MDOC}
    410 MANM_ROFF	= ${MANM_ROFF}
    411 MANM_EQN	= ${MANM_EQN}
    412 MANM_TBL	= ${MANM_TBL}
    413 INSTALL		= ${INSTALL}
    414 INSTALL_PROGRAM	= ${INSTALL_PROGRAM}
    415 INSTALL_LIB	= ${INSTALL_LIB}
    416 INSTALL_MAN	= ${INSTALL_MAN}
    417 INSTALL_DATA	= ${INSTALL_DATA}
    418 __HEREDOC__
    419 
    420 [ ${BUILD_DB} -gt 0 ] && \
    421 	echo "MAIN_OBJS	= \$(BASE_OBJS) \$(DB_OBJS)"
    422 
    423 echo "Makefile.local: written" 1>&2
    424 echo "Makefile.local: written" 1>&3
    425 
    426 exit 0
    427