]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mdocml/configure
Merge ^/head r279313 through r279595.
[FreeBSD/FreeBSD.git] / contrib / mdocml / configure
1 #!/bin/sh
2 #
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
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 [ ${BUILD_DB} -eq 0 ]; then
241         HAVE_MANPATH=0
242 elif ismanual manpath "${HAVE_MANPATH}"; then
243         :
244 elif 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
249 else
250         echo "manpath: no" 1>&2
251         echo "manpath: no" 1>&3
252         echo 1>&3
253         HAVE_MANPATH=0
254 fi
255
256 # --- write config.h ---
257
258 exec > config.h
259
260 cat << __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
275 echo
276 [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
277 [ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\""
278
279 cat << __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
347 echo
348 echo "#endif /* MANDOC_CONFIG_H */"
349
350 echo "config.h: written" 1>&2
351 echo "config.h: written" 1>&3
352
353 # --- tests for Makefile.local -----------------------------------------
354
355 exec > 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
372 if [ ${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
376 fi
377
378 BUILD_TARGETS="base-build"
379 [ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="${BUILD_TARGETS} cgi-build"
380 INSTALL_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
384 cat << __HEREDOC__
385 BUILD_TARGETS   = ${BUILD_TARGETS}
386 INSTALL_TARGETS = ${INSTALL_TARGETS}
387 CFLAGS          = ${CFLAGS}
388 DBLIB           = ${DBLIB}
389 STATIC          = ${STATIC}
390 PREFIX          = ${PREFIX}
391 BINDIR          = ${BINDIR}
392 SBINDIR         = ${SBINDIR}
393 INCLUDEDIR      = ${INCLUDEDIR}
394 LIBDIR          = ${LIBDIR}
395 MANDIR          = ${MANDIR}
396 EXAMPLEDIR      = ${EXAMPLEDIR}
397 WWWPREFIX       = ${WWWPREFIX}
398 HTDOCDIR        = ${HTDOCDIR}
399 CGIBINDIR       = ${CGIBINDIR}
400 BINM_APROPOS    = ${BINM_APROPOS}
401 BINM_MAN        = ${BINM_MAN}
402 BINM_WHATIS     = ${BINM_WHATIS}
403 BINM_MAKEWHATIS = ${BINM_MAKEWHATIS}
404 MANM_MAN        = ${MANM_MAN}
405 MANM_MDOC       = ${MANM_MDOC}
406 MANM_ROFF       = ${MANM_ROFF}
407 MANM_EQN        = ${MANM_EQN}
408 MANM_TBL        = ${MANM_TBL}
409 INSTALL         = ${INSTALL}
410 INSTALL_PROGRAM = ${INSTALL_PROGRAM}
411 INSTALL_LIB     = ${INSTALL_LIB}
412 INSTALL_MAN     = ${INSTALL_MAN}
413 INSTALL_DATA    = ${INSTALL_DATA}
414 __HEREDOC__
415
416 [ ${BUILD_DB} -gt 0 ] && \
417         echo "MAIN_OBJS = \$(BASE_OBJS) \$(DB_OBJS)"
418
419 echo "Makefile.local: written" 1>&2
420 echo "Makefile.local: written" 1>&3
421
422 exit 0