3 # Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
4 # Copyright (c) 2017, 2018 Kristaps Dzonsons <kristaps@bsd.lv>
5 # Copyright (c) 2022 Omar Polo <op@omarpolo.com>
7 # Permission to use, copy, modify, and distribute this software for any
8 # purpose with or without fee is hereby granted, provided that the above
9 # copyright notice and this permission notice appear in all copies.
11 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 RELEASE="${RELEASE:-no}"
25 echo "usage: $0 [--help] [--prefix=prefix] [OPTION=VALUE...]" >&2
29 if command -v yacc 2>/dev/null >&2; then
31 elif command -v bison 2>/dev/null >&2; then
34 # assume yacc by default. Make will fail building parse.y if
35 # not from a release tarball, but at least it'll have a decent
40 if command -v pkg-config 2>/dev/null >&2; then
49 while [ $# -gt 0 ]; do
53 if [ "$key" = --help ]; then
57 if [ "$key" = --prefix ]; then
59 if [ "$1" = --prefix ]; then # no =, look at next arg
60 if !shift 2>&1 >/dev/null; then
61 echo "$0: missing value for --prefix" >&2
68 if [ "$1" = "$key" ]; then
69 echo "$0: invalid key-value: $1" >&2
83 LDADD_LIBEVENT="$val" ;;
85 LDADD_LIBSQLITE3="$val" ;;
87 LDADD_LIBSOCKET="$val" ;;
102 CDIAGFLAGS="${CDIAGFLAGS} -Wall -Wextra -Wpointer-arith -Wuninitialized"
103 CDIAGFLAGS="${CDIAGFLAGS} -Wstrict-prototypes -Wmissing-prototypes -Wunused"
104 CDIAGFLAGS="${CDIAGFLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter"
105 CDIAGFLAGS="${CDIAGFLAGS} -Wno-missing-field-initializers"
106 CDIAGFLAGS="${CDIAGFLAGS} -Wno-pointer-sign"
108 # don't ship releases with -Werror
109 test "$RELEASE" = no && CDIAGFLAGS="${CDIAGFLAGS} -Werror"
111 CFLAGS="${CFLAGS:--O2 -pipe} ${CDIAGFLAGS}"
114 LDFLAGS="${LDFLAGS:-}"
116 HOSTCC="${HOSTCC:-${CC}}"
117 HOSTCFLAGS="${HOSTCFLAGS:-${CFLAGS}}"
119 # echo "running configure for \`template':" >&2
120 # (cd ./template && ./configure CC="$HOSTCC" CFLAGS="$HOSTCFLAGS" YACC="$YACC")
121 # echo "returning to the configure for \`pkg_fcgi':" >&2
123 CFLAGS="${CFLAGS} -I. -Itemplate"
124 test -n "$db" && CFLAGS="${CFLAGS} -DPKG_FCGI_DB=\"\\\"$conf\\\"\""
125 test -n "$user" && CFLAGS="${CFLAGS} -DPKG_FCGI_USER=\"\\\"$user\\\"\""
126 test -n "$sock" && CFLAGS="${CFLAGS} -DPKG_FCGI_SOCK=\"\\\"$conf\\\"\""
128 [ -w config.log ] && mv config.log config.log.old
131 echo "config.log: writing..."
161 # singletest name var extra-cflags extra-libs msg
164 if [ -z "$msg" ]; then
165 if [ -n "$3" -a "$4" ]; then
167 elif [ -n "$3" ]; then
169 elif [ -n "$4" ]; then
172 elif [ "$msg" = no ]; then
178 $CC tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4
180 if $CC tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4 >&3 2>&3; then
181 rm -f test-${1} test-${1}.d
183 echo "${1}: $CC$msg succeeded" >&3
190 echo "${1}: $CC$msg failed with $?" >&3
199 if singletest "$1" "$2" "${CFLAGS}" "${LIBS}" no; then
204 if [ -f compat/${1}.c ]; then
205 COMPATS="compat/${1}.c $COMPATS"
212 # runtest name var extra-cflags extra-libs pkgconfig-name
214 if singletest "$1" "$2" "" ""; then
219 if [ -n "$3" -o -n "$4" ]; then
220 echo "retrying with ${3+$3 }$4" >&3
221 if singletest "$1" "$2" "$3" "$4"; then
225 if [ -n "${4}" ]; then
233 if [ -n "$5" -a -n "$pkgconfig" ]; then
234 if $pkgconfig "$5"; then
235 cflags="$($pkgconfig --cflags "$5")"
236 ldflags="$($pkgconfig --libs "$5")"
237 echo "retrying with pkg-config" >&3
238 if singletest "$1" "$2" "$3" "$cflags" "$ldflags"; then
239 CFLAGS="$CFLAGS $cflags"
240 LIBS="$LIBS $ldflags"
247 if [ -f compat/${1}.c ]; then
248 COMPATS="compat/${1}.c $COMPATS"
255 if singletest MMD _MMD -MMD >/dev/null; then
256 CFLAGS="${CFLAGS} -MMD"
257 echo "adding -MMD to CFLAGS" >&2
258 echo "adding -MMD to CFLAGS" >&3
261 if ! singletest WAIT_ANY WAIT_ANY; then
262 CFLAGS="${CFLAGS} -DWAIT_ANY=-1"
265 runtest accept4 ACCEPT4 -D_GNU_SOURCE || true
266 runtest err ERR || true
267 runtest freezero FREEZERO || true
268 runtest getdtablecount GETDTABLECOUNT || true
269 runtest getdtablesize GETDTABLESIZE || true
270 runtest getexecname GETEXECNAME || true
271 runtest getprogname GETPROGNAME || true
272 runtest libevent LIBEVENT "" "-levent" libevent_core || true
273 runtest libsqlite3 LIBSQLITE3 "-I/usr/local/include" "-L/usr/local/lib -lsqlite3" sqlite3 || true
274 runtest pledge PLEDGE || true
275 runtest reallocarray REALLOCARRAY -D_OPENBSD_SOURCE || true
276 runtest recallocarray RECALLOCARRAY -D_OPENBSD_SOURCE || true
277 runtest setgroups SETGROUPS -D_BSD_SOURCE || true
278 runtest setproctitle SETPROCTITLE || true
279 runtest setresgid SETRESGID -D_GNU_SOURCE || true
280 runtest setresuid SETRESUID -D_GNU_SOURCE || true
281 runtest strlcat STRLCAT || true
282 runtest strlcpy STRLCPY || true
283 runtest strtonum STRTONUM || true
284 runtest sys_queue SYS_QUEUE || true
285 runtest sys_tree SYS_TREE || true
286 runtest unveil UNVEIL || true
287 runtest vasprintf VASPRINTF -D_GNU_SOURCE || true
288 runtest __progname __PROGNAME || true
292 if [ "${HAVE_ACCEPT4}" -eq 0 ]; then
293 echo "Fatal: missing accept4(2)" >&2
294 echo "Fatal: missing accept4(2)" >&3
298 if [ "${HAVE_LIBEVENT}" -eq 0 ]; then
299 echo "Fatal: missing libevent" >&2
300 echo "Fatal: missing libevent" >&3
304 if [ "${HAVE_LIBSQLITE3}" -eq 0 ]; then
305 echo "Fatal: missing libsqlite3" >&2
306 echo "Fatal: missing libsqlite3" >&3
310 if [ "${HAVE_SETGROUPS}" -eq 0 ]; then
311 echo "Fatal: missing setgroups(2)" >&2
312 echo "Fatal: missing setgroups(2)" >&3
316 # things we can provide by ourselves:
318 if [ "${HAVE_SYS_QUEUE}" -eq 0 -o "${HAVE_SYS_TREE}" -eq 0 ]; then
319 CFLAGS="-I compat/sys ${CFLAGS}"
322 if [ -n "${COMPATS}" ]; then
323 CFLAGS="-I compat/ ${CFLAGS}"
327 echo "config.h: writing..." >&2
334 # error "Do not use C++: this is a C application."
337 #define HAVE_ACCEPT4 ${HAVE_ACCEPT4}
338 #define HAVE_ERR ${HAVE_ERR}
339 #define HAVE_FREEZERO ${HAVE_FREEZERO}
340 #define HAVE_GETDTABLECOUNT ${HAVE_GETDTABLECOUNT}
341 #define HAVE_GETDTABLESIZE ${HAVE_GETDTABLESIZE}
342 #define HAVE_GETEXECNAME ${HAVE_GETEXECNAME}
343 #define HAVE_GETPROGNAME ${HAVE_GETPROGNAME}
344 #define HAVE_LIBEVENT ${HAVE_LIBEVENT}
345 #define HAVE_LIBSQLITE3 ${HAVE_LIBSQLITE3}
346 #define HAVE_PLEDGE ${HAVE_PLEDGE}
347 #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
348 #define HAVE_RECALLOCARRAY ${HAVE_RECALLOCARRAY}
349 #define HAVE_SETGROUPS ${HAVE_SETGROUPS}
350 #define HAVE_SETPROCTITLE ${HAVE_SETPROCTITLE}
351 #define HAVE_SETRESGID ${HAVE_SETRESGID}
352 #define HAVE_SETRESUID ${HAVE_SETRESUID}
353 #define HAVE_STRLCAT ${HAVE_STRLCAT}
354 #define HAVE_STRLCPY ${HAVE_STRLCPY}
355 #define HAVE_STRTONUM ${HAVE_STRTONUM}
356 #define HAVE_SYS_QUEUE ${HAVE_SYS_QUEUE}
357 #define HAVE_SYS_TREE ${HAVE_SYS_TREE}
358 #define HAVE_UNVEIL ${HAVE_UNVEIL}
359 #define HAVE_VASPRINTF ${HAVE_VASPRINTF}
360 #define HAVE___PROGNAME ${HAVE___PROGNAME}
366 echo "config.mk: writing..." >&2
378 INSTALL_PROGRAM=\${INSTALL} -m 0555
379 INSTALL_LIB= \${INSTALL} -m 0444
380 INSTALL_MAN= \${INSTALL} -m 0444
381 INSTALL_DATA= \${INSTALL} -m 0444
388 echo "Now run \`make' to compile." >&2