1dnl                                               -*- Autoconf -*-
2dnl Process this file with autoconf to produce a configure script.
3dnl
4dnl Indentation rules:
5dnl - closing braces not at the beginning of a line must match opening
6dnl   braces earlier on that line
7dnl - closing braces at the beginning of a line:
8dnl   - must not be followed by anything else apart from "," or comments
9dnl   - must match opening braces from another line and indented the
10dnl     same as that other line
11dnl - if one argument was put on a new line, all following arguments
12dnl   must be on their own line too
13dnl - if an argument uses more than one line and is not a single
14dnl   function call, the argument should be on different lines than the
15dnl   wrapping braces
16AC_PREREQ([2.60])
17AC_INIT([lighttpd],[1.4.63],[https://redmine.lighttpd.net/projects/lighttpd/boards/2],[lighttpd],[https://www.lighttpd.net/])
18AC_CONFIG_SRCDIR([src/server.c])
19AC_CONFIG_HEADERS([config.h])
20AC_CONFIG_MACRO_DIR([m4])
21
22AC_CANONICAL_HOST
23
24AM_INIT_AUTOMAKE([1.13 -Wall -Wno-portability -Wno-override foreign dist-xz tar-ustar serial-tests silent-rules subdir-objects])
25
26dnl @synopsis TRY_CFLAGS [compiler flags]
27dnl @summary check whether compiler supports given flags and adds them to CFLAGS
28AC_DEFUN([TRY_CFLAGS],
29[dnl
30  AC_MSG_CHECKING([if $CC supports $1])
31  AC_LANG_PUSH([C])
32  ac_try_cflags_saved_cflags="${CFLAGS}"
33  CFLAGS="${CFLAGS} $1"
34  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
35    [AC_MSG_RESULT([yes])],
36    [
37      AC_MSG_ERROR([no])
38      CFLAGS="${ac_try_cflags_saved_cflags}"
39    ]
40  )
41  AC_LANG_POP([C])
42])
43
44dnl @synopsis TRY_LDFLAGS [linker flags]
45dnl @summary check whether linker supports given flags and adds them to LDFLAGS
46AC_DEFUN([TRY_LDFLAGS],
47[dnl
48  AC_MSG_CHECKING([if $LD supports $1])
49  AC_LANG_PUSH([C])
50  ac_try_ldflags_saved_ldflags="${LDFLAGS}"
51  LDFLAGS="${LDFLAGS} $1"
52  AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
53    [AC_MSG_RESULT([yes])],
54    [
55      AC_MSG_ERROR([no])
56      LDFLAGS="${ac_try_ldflags_saved_cflags}"
57    ]
58  )
59  AC_LANG_POP([C])
60])
61
62dnl Checks for programs.
63AC_PROG_CC
64AC_PROG_CC_C99
65AX_PROG_CC_FOR_BUILD
66LT_PATH_LD
67AC_PROG_INSTALL
68AC_PROG_CPP
69AC_PROG_MAKE_SET
70
71AC_USE_SYSTEM_EXTENSIONS
72AM_PROG_AR
73AC_C_INLINE
74AC_C_RESTRICT
75
76dnl AC_CANONICAL_HOST
77case "$host_os" in
78*darwin*|*cygwin*|*aix*|*mingw*|*midipix* ) NO_RDYNAMIC=yes ;;
79* ) NO_RDYNAMIC=no ;;
80esac
81AM_CONDITIONAL([NO_RDYNAMIC], [test "$NO_RDYNAMIC" = yes])
82
83AM_CONDITIONAL([LIGHTTPD_STATIC], [test "$LIGHTTPD_STATIC" = yes])
84
85AC_EXEEXT
86
87dnl libtool
88LT_INIT([dlopen disable-static shared])
89
90dnl for solaris
91CPPFLAGS="${CPPFLAGS} -D_REENTRANT"
92
93dnl Checks for header files.
94
95dnl checks for sys/wait.h => HAVE_SYS_WAIT_H
96AC_HEADER_SYS_WAIT
97AC_CHECK_HEADERS([\
98  getopt.h \
99  inttypes.h \
100  malloc.h \
101  poll.h \
102  port.h \
103  pwd.h \
104  stdlib.h \
105  stdint.h \
106  strings.h \
107  sys/devpoll.h \
108  sys/epoll.h \
109  sys/event.h \
110  sys/filio.h \
111  sys/inotify.h \
112  sys/loadavg.h \
113  sys/mman.h \
114  sys/poll.h \
115  sys/prctl.h \
116  sys/resource.h \
117  sys/select.h \
118  sys/sendfile.h \
119  sys/time.h \
120  sys/uio.h \
121  sys/un.h \
122  syslog.h \
123  uuid/uuid.h \
124])
125
126dnl Checks for typedefs, structures, and compiler characteristics.
127AC_C_CONST
128AC_C_INLINE
129AC_TYPE_OFF_T
130AC_TYPE_PID_T
131AC_TYPE_SIZE_T
132
133AC_CHECK_MEMBER([struct tm.tm_gmtoff],
134  [AC_DEFINE([HAVE_STRUCT_TM_GMTOFF], [1], [gmtoff in struct tm])],
135  [],
136  [#include <time.h>]
137)
138AC_CHECK_TYPES([socklen_t],
139  [], dnl defines HAVE_SOCKLEN_T
140  [],
141  [
142    #include <sys/types.h>
143    #include <sys/socket.h>
144  ]
145)
146
147dnl openssl on solaris needs -lsocket -lnsl
148AC_SEARCH_LIBS([socket], [socket])
149AC_SEARCH_LIBS([gethostbyname], [nsl socket])
150
151dnl On Haiku accept() and friends are in libnetwork
152AC_SEARCH_LIBS([accept], [network])
153
154dnl clock_gettime() needs -lrt with glibc < 2.17, and possibly other platforms
155AC_SEARCH_LIBS([clock_gettime], [rt])
156
157dnl FreeBSD elftc_copyfile()
158save_LIBS=$LIBS
159LIBS=
160AC_SEARCH_LIBS([elftc_copyfile], [elftc], [
161  AC_CHECK_HEADERS([libelftc.h], [
162    ELFTC_LIB=$LIBS
163    AC_DEFINE([HAVE_LIBELFTC], [1], [libelftc])
164    AC_DEFINE([HAVE_ELFTC_COPYFILE], [1], [elftc_copyfile])
165  ])
166])
167LIBS=$save_LIBS
168AC_SUBST([ELFTC_LIB])
169
170dnl need dlopen/-ldl to load plugins (when not on windows)
171save_LIBS=$LIBS
172LIBS=
173AC_SEARCH_LIBS([dlopen], [dl], [
174  AC_CHECK_HEADERS([dlfcn.h], [
175    DL_LIB=$LIBS
176    AC_DEFINE([HAVE_LIBDL], [1], [libdl])
177    AC_DEFINE([HAVE_DLFCN_H], [1])
178  ])
179])
180LIBS=$save_LIBS
181AC_SUBST([DL_LIB])
182
183dnl prepare pkg-config usage below
184PKG_PROG_PKG_CONFIG
185
186dnl checking for libev
187AC_MSG_NOTICE([----------------------------------------])
188AC_MSG_CHECKING([for libev support])
189AC_ARG_WITH([libev],
190  [AS_HELP_STRING([--with-libev@<:@=PATH@:>@],
191    [Include libev support for fdevent handlers in PATH/include and PATH/lib]
192  )],
193  [WITH_LIBEV=$withval],
194  [WITH_LIBEV=no]
195)
196AC_MSG_RESULT([$WITH_LIBEV])
197
198LIBEV_CFLAGS=
199LIBEV_LIBS=
200
201if test "$WITH_LIBEV" != no; then
202  PKG_CHECK_MODULES([LIBEV], [libev], [], [
203    dnl no pkg-config for libev, searching manually:
204
205    if test "$WITH_LIBEV" != yes; then
206      LIBEV_CFLAGS="-I$WITH_LIBEV/include"
207      LIBEV_LIBS="-L$WITH_LIBEV/lib -lev"
208    else
209      AC_CHECK_HEADERS([ev.h],
210        [AC_CHECK_LIB([ev], [ev_time],
211          [
212            LIBEV_CFLAGS=
213            LIBEV_LIBS="-lev"
214          ],
215          [AC_MSG_ERROR([libev not found])]
216        )],
217        [AC_MSG_ERROR([libev header not found])]
218      )
219    fi
220  ])
221
222  AC_DEFINE([HAVE_LIBEV], [1], [libev support])
223fi
224
225AC_SUBST([LIBEV_CFLAGS])
226AC_SUBST([LIBEV_LIBS])
227
228dnl Checks for mysql
229AC_MSG_NOTICE([----------------------------------------])
230AC_MSG_CHECKING([for MySQL support])
231AC_ARG_WITH([mysql],
232  [AS_HELP_STRING([--with-mysql@<:@=PATH@:>@],
233    [Include MySQL support. PATH is the path to 'mysql_config']
234  )],
235  [WITH_MYSQL=$withval],
236  [WITH_MYSQL=no]
237)
238AC_MSG_RESULT([$WITH_MYSQL])
239
240MYSQL_CFLAGS=
241MYSQL_LIBS=
242
243if test "$WITH_MYSQL" != no; then
244  if test "$WITH_MYSQL" = yes; then
245    PKG_CHECK_MODULES([MYSQL],[mariadb],[
246      MYSQL_CONFIG=$PKG_CONFIG
247    ],[
248      PKG_CHECK_MODULES([MYSQL],[mysqlclient],[
249        MYSQL_CONFIG=$PKG_CONFIG
250      ],[
251        AC_PATH_PROG([MYSQL_CONFIG], [mysql_config])
252      ])
253    ])
254  else
255    MYSQL_CONFIG=$WITH_MYSQL
256  fi
257
258  if test "$MYSQL_CONFIG" != "$PKG_CONFIG"; then
259    if test -z "$MYSQL_CONFIG"; then
260      AC_MSG_ERROR([mysql_config is not found])
261    fi
262    if test ! -x "$MYSQL_CONFIG"; then
263      AC_MSG_ERROR([mysql_config not exists or not executable, use --with-mysql=path-to-mysql_config])
264    fi
265
266    if "$MYSQL_CONFIG" | grep -- '--include' > /dev/null ; then
267      MYSQL_CFLAGS=`"$MYSQL_CONFIG" --include | sed s/\'//g`
268    else
269      MYSQL_CFLAGS=`"$MYSQL_CONFIG" --cflags | sed s/\'//g`
270    fi
271    MYSQL_LIBS=`"$MYSQL_CONFIG" --libs | sed s/\'//g`
272  fi
273
274  AC_MSG_CHECKING([for MySQL includes at])
275  AC_MSG_RESULT([$MYSQL_CFLAGS])
276
277  AC_MSG_CHECKING([for MySQL libraries at])
278  AC_MSG_RESULT([$MYSQL_LIBS])
279
280  AC_DEFINE([HAVE_MYSQL], [1], [mysql support])
281fi
282AM_CONDITIONAL([BUILD_WITH_MYSQL], [test "$WITH_MYSQL" != no])
283
284AC_SUBST([MYSQL_LIBS])
285AC_SUBST([MYSQL_CFLAGS])
286
287dnl Checks for pgsql
288AC_MSG_NOTICE([----------------------------------------])
289AC_MSG_CHECKING([for PgSQL support])
290AC_ARG_WITH([pgsql],
291  [AS_HELP_STRING([--with-pgsql@<:@=PATH@:>@],
292    [Include PgSQL support. PATH is the path to 'pg_config']
293  )],
294  [WITH_PGSQL=$withval],
295  [WITH_PGSQL=no]
296)
297AC_MSG_RESULT([$WITH_PGSQL])
298
299PGSQL_CFLAGS=
300PGSQL_LIBS=
301
302if test "$WITH_PGSQL" != no; then
303  if test "$WITH_PGSQL" = yes; then
304    PKG_CHECK_MODULES([PGSQL],[libpq],[
305      PGSQL_CONFIG=$PKG_CONFIG
306    ],[
307      AC_PATH_PROG([PGSQL_CONFIG], [pg_config])
308    ])
309  else
310    PGSQL_CONFIG=$WITH_PGSQL
311  fi
312
313  if test "$PGSQL_CONFIG" != "$PKG_CONFIG"; then
314    if test -z "$PGSQL_CONFIG"; then
315      AC_MSG_ERROR([pg_config is not found])
316    fi
317    if test ! -x "$PGSQL_CONFIG"; then
318      AC_MSG_ERROR([pg_config not exists or not executable, use --with-pgsql=path-to-pg_config])
319    fi
320
321    PGSQL_CFLAGS="-I`"$PGSQL_CONFIG" --includedir`"
322    PGSQL_LIBS="-L`"$PGSQL_CONFIG" --libdir` -lpq"
323  fi
324
325  AC_MSG_CHECKING([for PgSQL includes at])
326  AC_MSG_RESULT([$PGSQL_CFLAGS])
327
328  AC_MSG_CHECKING([for PgSQL libraries at])
329  AC_MSG_RESULT([$PGSQL_LIBS])
330
331  AC_DEFINE([HAVE_PGSQL], [1], [pgsql support])
332fi
333AM_CONDITIONAL([BUILD_WITH_PGSQL], [test "$WITH_PGSQL" != no])
334
335AC_SUBST([PGSQL_LIBS])
336AC_SUBST([PGSQL_CFLAGS])
337
338dnl Checks for libdbi library
339AC_MSG_NOTICE([----------------------------------------])
340AC_MSG_CHECKING([for LibDBI support])
341AC_ARG_WITH([dbi],
342  [AS_HELP_STRING([--with-dbi@<:@=PATH@:>@],
343    [Include DBI support in PATH/include/dbi.h and PATH/lib]
344  )],
345  [WITH_DBI=$withval],
346  [WITH_DBI=no]
347)
348AC_MSG_RESULT([$WITH_DBI])
349
350DBI_INCLUDE=
351DBI_LIBS=
352
353if test "$WITH_DBI" != no; then
354  if test "$WITH_DBI" != yes; then
355    DBI_CFLAGS="-I$WITH_DBI/include"
356    DBI_LIBS="-L$WITH_DBI/lib -ldbi"
357  else
358    AC_CHECK_HEADERS([dbi/dbi.h],
359      [AC_CHECK_LIB([dbi], [dbi_version],
360        [
361          DBI_CFLAGS=
362          DBI_LIBS="-ldbi"
363        ],
364        [AC_MSG_ERROR([LibDBI not found])]
365      )],
366      [AC_MSG_ERROR([LibDBI header not found])]
367    )
368  fi
369
370  AC_DEFINE([HAVE_DBI], [1], [LibDBI support])
371fi
372AM_CONDITIONAL([BUILD_WITH_DBI], [test "$WITH_DBI" != no])
373
374AC_SUBST([DBI_LIBS])
375AC_SUBST([DBI_CFLAGS])
376
377dnl Checks for libsasl2 library
378AC_MSG_NOTICE([----------------------------------------])
379AC_MSG_CHECKING([for LibSASL support])
380AC_ARG_WITH([sasl],
381  [AS_HELP_STRING([--with-sasl@<:@=PATH@:>@],
382    [Include SASL support in PATH/include/sasl/sasl.h and PATH/lib]
383  )],
384  [WITH_SASL=$withval],
385  [WITH_SASL=no]
386)
387AC_MSG_RESULT([$WITH_SASL])
388
389SASL_INCLUDE=
390SASL_LIBS=
391
392if test "$WITH_SASL" != no; then
393  if test "$WITH_SASL" != yes; then
394    SASL_CFLAGS="-I$WITH_SASL/include"
395    SASL_LIBS="-L$WITH_SASL/lib -lsasl2"
396  else
397    AC_CHECK_HEADERS([sasl/sasl.h],
398      [AC_CHECK_LIB([sasl2], [sasl_server_init],
399        [
400          SASL_CFLAGS=
401          SASL_LIBS="-lsasl2"
402        ],
403        [AC_MSG_ERROR([libsasl2 not found])]
404      )],
405      [AC_MSG_ERROR([SASL header not found])]
406    )
407  fi
408
409  AC_DEFINE([HAVE_SASL], [1], [LibSASL support])
410fi
411AM_CONDITIONAL([BUILD_WITH_SASL], [test "$WITH_SASL" != no])
412
413AC_SUBST([SASL_LIBS])
414AC_SUBST([SASL_CFLAGS])
415
416
417dnl Check for LDAP
418AC_MSG_NOTICE([----------------------------------------])
419AC_MSG_CHECKING([for LDAP support])
420AC_ARG_WITH([ldap],
421  [AS_HELP_STRING([--with-ldap], [enable LDAP support])],
422  [WITH_LDAP=$withval],
423  [WITH_LDAP=no]
424)
425AC_MSG_RESULT([$WITH_LDAP])
426
427if test "$WITH_LDAP" != no; then
428  AC_CHECK_LIB([ldap], [ldap_sasl_bind_s],
429    [AC_CHECK_HEADERS([ldap.h],
430      [
431        LDAP_LIB=-lldap
432        AC_DEFINE([HAVE_LIBLDAP], [1], [libldap])
433        AC_DEFINE([HAVE_LDAP_H], [1])
434      ],
435      [AC_MSG_ERROR([ldap headers not found, install them or build without --with-ldap])]
436    )],
437    [AC_MSG_ERROR([ldap library not found, install it or build without --with-ldap])]
438  )
439  AC_SUBST([LDAP_LIB])
440  AC_CHECK_LIB([lber], [ber_printf],
441    [AC_CHECK_HEADERS([lber.h],
442      [
443        LBER_LIB=-llber
444        AC_DEFINE([HAVE_LIBLBER], [1], [liblber])
445        AC_DEFINE([HAVE_LBER_H], [1])
446      ],
447      [AC_MSG_ERROR([lber headers not found, install them or build without --with-ldap])]
448    )],
449    [AC_MSG_ERROR([lber library not found, install it or build without --with-ldap])]
450  )
451  AC_SUBST([LBER_LIB])
452fi
453AM_CONDITIONAL([BUILD_WITH_LDAP], [test "$WITH_LDAP" != no])
454
455dnl Check for PAM
456AC_MSG_NOTICE([----------------------------------------])
457AC_MSG_CHECKING(for PAM support)
458AC_ARG_WITH([pam],
459  [AS_HELP_STRING([--with-pam],[enable PAM support])],
460  [WITH_PAM=$withval],
461  [WITH_PAM=no]
462)
463AC_MSG_RESULT([$withval])
464
465if test "$WITH_PAM" != "no"; then
466  AC_CHECK_LIB([pam], [pam_start],
467    [AC_CHECK_HEADERS([security/pam_appl.h],[
468      PAM_LIB=-lpam
469      AC_DEFINE([HAVE_PAM], [1], [libpam])
470      AC_DEFINE([HAVE_SECURITY_PAM_APPL_H], [1])
471      ],
472      [AC_MSG_ERROR([pam headers not found, install them or build without --with-pam])]
473    )],
474    [AC_MSG_ERROR([pam library not found, install it or build without --with-pam])]
475  )
476  AC_SUBST(PAM_LIB)
477fi
478AM_CONDITIONAL([BUILD_WITH_PAM], [test "$WITH_PAM" != no])
479
480dnl Check for xattr
481AC_MSG_NOTICE([----------------------------------------])
482AC_MSG_CHECKING([for extended attributes support])
483AC_ARG_WITH([attr],
484  [AS_HELP_STRING([--with-attr], [enable extended attribute support])],
485  [WITH_ATTR=$withval],
486  [WITH_ATTR=no]
487)
488AC_MSG_RESULT([$WITH_ATTR])
489
490if test "$WITH_ATTR" != no; then
491  have_xattr=no
492  # libattr (linux only?)
493  AC_CHECK_LIB([attr], [attr_get], [
494    AC_CHECK_HEADERS([attr/attributes.h], [
495      ATTR_LIB=-lattr
496      AC_DEFINE([HAVE_XATTR], [1], [libattr])
497      AC_DEFINE([HAVE_ATTR_ATTRIBUTES_H], [1])
498      have_xattr=yes
499    ])
500  ])
501  AC_SUBST([ATTR_LIB])
502
503  # Linux getxattr
504  AC_CHECK_FUNC([getxattr], [
505    AC_CHECK_HEADERS([sys/xattr.h], [
506      AC_DEFINE([HAVE_XATTR], [1], [Linux extended attributes])
507      AC_DEFINE([HAVE_SYS_XATTR_H], [1])
508      have_xattr=yes
509    ])
510  ])
511
512  # (Free)BSD extattr
513  AC_CHECK_FUNC([extattr_get_file], [
514    AC_CHECK_HEADERS([sys/extattr.h], [
515      AC_DEFINE([HAVE_EXTATTR], [1], [BSD extended attributes])
516      AC_DEFINE([HAVE_SYS_EXTATTR_H], [1])
517      have_xattr=yes
518    ])
519  ])
520
521  if test "$have_xattr" = no; then
522    AC_MSG_ERROR([no backend found implementing extended attributes])
523  fi
524fi
525
526dnl Check for valgrind
527AC_MSG_NOTICE([----------------------------------------])
528AC_MSG_CHECKING([for valgrind])
529AC_ARG_WITH([valgrind],
530  [AS_HELP_STRING([--with-valgrind],
531    [enable internal support for valgrind]
532  )],
533  [WITH_VALGRIND=$withval],
534  [WITH_VALGRIND=no]
535)
536AC_MSG_RESULT([$WITH_VALGRIND])
537
538if test "$WITH_VALGRIND" != no; then
539  AC_CHECK_HEADERS([valgrind/valgrind.h], [], [
540    AC_MSG_ERROR([valgrind headers not found. install them or build without --with-valgrind])
541  ])
542fi
543
544dnl Checking for libunwind
545AC_MSG_NOTICE([----------------------------------------])
546AC_MSG_CHECKING([for libunwind])
547AC_ARG_WITH([libunwind],
548  [AS_HELP_STRING([--with-libunwind],
549    [Include libunwind support for backtraces on assert failures]
550  )],
551  [WITH_LIBUNWIND=$withval],
552  [WITH_LIBUNWIND=no]
553)
554AC_MSG_RESULT([$WITH_LIBUNWIND])
555
556if test "$WITH_LIBUNWIND" != no; then
557  PKG_CHECK_MODULES([LIBUNWIND], [libunwind], [], [
558    AC_MSG_ERROR([libunwind not found. install it or build without --with-libunwind])
559  ])
560  AC_DEFINE([HAVE_LIBUNWIND], [1], [Have libunwind support])
561fi
562
563dnl Checking for kerberos5
564AC_MSG_NOTICE([----------------------------------------])
565AC_MSG_CHECKING([for kerberos5])
566AC_ARG_WITH([krb5],
567  [AS_HELP_STRING([--with-krb5@<:@=DIR@:>@], [Use Kerberos 5])],
568  [WITH_KRB5=$withval],
569  [WITH_KRB5=no]
570)
571AC_MSG_RESULT([$WITH_KRB5])
572
573if test "$WITH_KRB5" != no; then
574  if test "$WITH_KRB5" != yes; then
575    krb5_append_CPPFLAGS=" -I$WITH_KRB5/include"
576    krb5_append_LDFLAGS=" -L$WITH_KRB5/lib"
577  fi
578fi
579
580AC_MSG_CHECKING([custom include directory for kerberos5])
581AC_ARG_WITH([krb5-includes],
582  [AS_HELP_STRING([--with-krb5-includes=DIR], [Kerberos includes])],
583  [
584    if test "$WITH_KRB5" = no; then
585      AC_MSG_ERROR([build --with-krb5 to use --with-krb5-includes])
586    fi
587    krb5_append_CPPFLAGS=" -I$withval"
588    AC_MSG_RESULT([$withval])
589  ],
590  [AC_MSG_RESULT([no])]
591)
592
593AC_MSG_CHECKING([custom lib directory for kerberos5])
594AC_ARG_WITH([krb5-libs],
595  [AS_HELP_STRING([--with-krb5-libs=DIR], [Kerberos libraries])],
596  [
597    if test "$WITH_KRB5" = no; then
598      AC_MSG_ERROR([build --with-krb5 to use --with-krb5-libs])
599    fi
600    krb5_append_LDFLAGS=" -L$withval"
601    AC_MSG_RESULT([$withval])
602  ],
603  [AC_MSG_RESULT([no])]
604)
605
606if test "$WITH_KRB5" != no; then
607  CPPFLAGS="${CPPFLAGS}${krb5_append_CPPFLAGS}"
608  LDFLAGS="${LDFLAGS}${krb5_append_LDFLAGS}"
609
610  AC_CHECK_LIB([gssapi_krb5], [gss_acquire_cred],
611    [AC_CHECK_HEADERS([gssapi/gssapi_krb5.h],
612      [
613        KRB5_LIB="-lkrb5 -lgssapi_krb5"
614        AC_DEFINE([HAVE_KRB5], [1], [libgssapi_krb5])
615      ],
616      [AC_MSG_ERROR([gssapi_krb5 headers were not found, install them or build without --with-krb5])]
617    )],
618    [AC_MSG_ERROR([gssapi_krb5 libs were not found, install them or build without --with-krb5])]
619  )
620  case "$host_os" in
621  *darwin*|*cygwin* ) KRB5_LIB="$KRB5_LIB -lcom_err" ;;
622  * ) ;;
623  esac
624fi
625
626AM_CONDITIONAL([BUILD_WITH_KRB5], [test "$WITH_KRB5" != no])
627AC_SUBST([KRB5_LIB])
628
629dnl Check for openssl
630AC_MSG_NOTICE([----------------------------------------])
631AC_MSG_CHECKING([for OpenSSL])
632AC_ARG_WITH([openssl],
633  [AS_HELP_STRING([--with-openssl@<:@=DIR@:>@],
634    [Include openssl support (default no)]
635  )],
636  [WITH_OPENSSL=$withval],
637  [WITH_OPENSSL=no]
638)
639AC_MSG_RESULT([$WITH_OPENSSL])
640AM_CONDITIONAL([BUILD_WITH_OPENSSL], test ! "$WITH_OPENSSL" = no)
641
642if test "$WITH_OPENSSL" != no; then
643  if test "$WITH_OPENSSL" != yes; then
644    openssl_append_CPPFLAGS=" -I$WITH_OPENSSL/include"
645    openssl_append_LDFLAGS=" -L$WITH_OPENSSL/lib"
646  fi
647fi
648
649AC_MSG_CHECKING([custom include directory for openssl])
650AC_ARG_WITH([openssl-includes],
651  [AS_HELP_STRING([--with-openssl-includes=DIR], [OpenSSL includes])],
652  [
653    if test "$WITH_OPENSSL" = no; then
654      AC_MSG_ERROR([build --with-openssl to use --with-openssl-includes])
655    fi
656    openssl_append_CPPFLAGS=" -I$withval"
657    AC_MSG_RESULT([$withval])
658  ],
659  [AC_MSG_RESULT([no])]
660)
661
662AC_MSG_CHECKING([custom lib directory for openssl])
663AC_ARG_WITH([openssl-libs],
664  [AS_HELP_STRING([--with-openssl-libs=DIR], [OpenSSL libraries])],
665  [
666    if test "$WITH_OPENSSL" = no; then
667      AC_MSG_ERROR([build --with-openssl to use --with-openssl-libs])
668    fi
669    openssl_append_LDFLAGS=" -L$withval"
670    AC_MSG_RESULT([$withval])
671  ],
672  [AC_MSG_RESULT([no])]
673)
674
675if test "$WITH_OPENSSL" != no; then
676  if test "$WITH_KRB5" != no; then
677    AC_DEFINE([USE_OPENSSL_KERBEROS], [1], [with kerberos])
678  fi
679
680  CPPFLAGS="${CPPFLAGS}${openssl_append_CPPFLAGS}"
681  LDFLAGS="${LDFLAGS}${openssl_append_LDFLAGS}"
682
683  AC_CHECK_HEADERS([openssl/ssl.h], [], [
684    AC_MSG_ERROR([openssl headers not found. install them or build without --with-openssl])
685  ])
686  AC_CHECK_LIB([crypto], [RAND_bytes],
687    [CRYPTO_LIB="-lcrypto"],
688    [AC_MSG_ERROR([openssl crypto library not found. install it or build without --with-openssl])]
689  )
690  AC_CHECK_LIB([ssl], [SSL_new],
691    [OPENSSL_LIBS="${openssl_append_LDFLAGS} -lssl -lcrypto"],
692    [AC_MSG_ERROR([openssl ssl library not found. install it or build without --with-openssl])],
693    [ -lcrypto "$DL_LIB" ]
694  )
695
696  AC_DEFINE([HAVE_LIBSSL], [1], [Have libssl])
697  OPENSSL_CFLAGS="${openssl_append_CPPFLAGS}"
698  AC_SUBST([OPENSSL_CFLAGS])
699  AC_SUBST([OPENSSL_LIBS])
700  AC_SUBST([CRYPTO_LIB])
701fi
702
703dnl Check for wolfSSL
704AC_MSG_NOTICE([----------------------------------------])
705AC_MSG_CHECKING([for wolfSSL])
706AC_ARG_WITH([wolfssl],
707  [AS_HELP_STRING([--with-wolfssl@<:@=DIR@:>@],
708    [Include wolfSSL support (default no)]
709  )],
710  [WITH_WOLFSSL=$withval],
711  [WITH_WOLFSSL=no]
712)
713AC_MSG_RESULT([$WITH_WOLFSSL])
714AM_CONDITIONAL([BUILD_WITH_WOLFSSL], test ! "$WITH_WOLFSSL" = no)
715
716if test "$WITH_WOLFSSL" != no; then
717  CPPFLAGS_SAVE="${CPPFLAGS}"
718  LDFLAGS_SAVE="${LDFLAGS}"
719  if test "$WITH_WOLFSSL" != yes; then
720    WOLFSSL_CFLAGS="-I$WITH_WOLFSSL/include -I$WITH_WOLFSSL/include/wolfssl"
721    WOLFSSL_LIBS="-L$WITH_WOLFSSL/lib -lwolfssl"
722    LDFLAGS="${LDFLAGS} -L$WITH_WOLFSSL/lib"
723  else
724    PKG_CHECK_MODULES([WOLFSSL], [wolfssl], [], [
725      AC_MSG_ERROR([wolfssl not found, install it or build without --with-wolfssl])
726    ])
727    if test "$WOLFSSL_LIBS" != "-lwolfssl"; then
728      LDFLAGS="${LDFLAGS} ${WOLFSSL_LIBS% -lwolfssl}"
729    fi
730  fi
731
732  CPPFLAGS="${CPPFLAGS} $WOLFSSL_CFLAGS"
733  AC_CHECK_HEADERS([wolfssl/ssl.h], [], [
734    AC_MSG_ERROR([wolfssl headers not found. install them or build without --with-wolfssl])
735  ])
736  AC_CHECK_LIB([wolfssl], [wolfSSL_Init],
737    [WOLFSSL_CRYPTO_LIB="-lwolfssl"],
738    [AC_MSG_ERROR([wolfssl crypto library not found. install it or build without --with-wolfssl])]
739  )
740  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
741    #include <wolfssl/options.h>
742    #if !defined(HAVE_LIGHTY) && !defined(OPENSSL_EXTRA)
743    #error HAVE_LIGHTY macro not defined
744    #endif
745  ]])], [], [AC_MSG_ERROR([wolfssl must be built with ./configure --enable-lighty])])
746
747  AC_SUBST([WOLFSSL_CFLAGS])
748  AC_SUBST([WOLFSSL_LIBS])
749  if test "$WITH_OPENSSL" = no; then
750    CRYPTO_LIB="$WOLFSSL_CRYPTO_LIB"
751    AC_SUBST([CRYPTO_LIB])
752  else
753    CPPFLAGS="${CPPFLAGS_SAVE}"
754    LDFLAGS="${LDFLAGS_SAVE}"
755  fi
756fi
757
758dnl Check for mbedTLS
759AC_MSG_NOTICE([----------------------------------------])
760AC_MSG_CHECKING([for mbedTLS])
761AC_ARG_WITH([mbedtls],
762  AS_HELP_STRING([--with-mbedtls@<:@=DIR@:>@],[Include mbedTLS support. DIR points to the installation root. (default no)]),
763  [WITH_MBEDTLS=$withval],
764  [WITH_MBEDTLS=no]
765)
766
767if test "$WITH_MBEDTLS" != "no"; then
768  use_mbedtls=yes
769  if test "$WITH_MBEDTLS" != "yes"; then
770      CPPFLAGS="$CPPFLAGS -I$WITH_MBEDTLS/include"
771      LDFLAGS="$LDFLAGS -L$WITH_MBEDTLS/lib"
772  fi
773else
774  use_mbedtls=no
775fi
776AC_MSG_RESULT([$use_mbedtls])
777AM_CONDITIONAL(BUILD_WITH_MBEDTLS, test ! $WITH_MBEDTLS = no)
778
779if test "x$use_mbedtls" = "xyes"; then
780  AC_CHECK_HEADERS([mbedtls/ssl.h])
781  OLDLIBS="$LIBS"
782  AC_CHECK_LIB(mbedcrypto,mbedtls_base64_encode,
783    [AC_CHECK_LIB(mbedx509, mbedtls_x509_get_name,
784      [AC_CHECK_LIB(mbedtls, mbedtls_cipher_info_from_type,
785        [MTLS_LIBS="-lmbedtls -lmbedx509 -lmbedcrypto"
786         CRYPTO_LIB="-lmbedcrypto"
787         AC_DEFINE(HAVE_LIBMBEDTLS, [1], [Have libmbedtls library])
788         AC_DEFINE(HAVE_LIBMBEDX509, [1], [Have libmbedx509 library])
789         AC_DEFINE(HAVE_LIBMBEDCRYPTO, [1], [Have libmbedcrypto library]) ],
790        [],[-lmbedcrypto "$DL_LIB"])
791      ],[],[-lmbedcrypto "$DL_LIB"])
792    ],[],[])
793  LIBS="$OLDLIBS"
794  AC_SUBST(MTLS_LIBS)
795  AC_SUBST(CRYPTO_LIB)
796fi
797
798dnl Check for Nettle (and overwrite CRYPTO_LIB if set by OpenSSL or wolfSSL)
799AC_MSG_NOTICE([----------------------------------------])
800AC_MSG_CHECKING([for Nettle])
801AC_ARG_WITH([nettle],
802  [AS_HELP_STRING([--with-nettle@<:@=DIR@:>@],
803    [Include Nettle support (default no)]
804  )],
805  [WITH_NETTLE=$withval],
806  [WITH_NETTLE=no]
807)
808AC_MSG_RESULT([$WITH_NETTLE])
809
810if test "$WITH_NETTLE" != no; then
811  if test "$WITH_NETTLE" != yes; then
812    CPPFLAGS="${CPPFLAGS} -I$WITH_NETTLE/include"
813    LDFLAGS="${LDFLAGS} -L$WITH_NETTLE/lib"
814  fi
815
816  AC_CHECK_HEADERS([nettle/nettle-types.h], [], [
817    AC_MSG_ERROR([nettle headers not found. install them or build without --with-nettle])
818  ])
819  AC_CHECK_LIB([nettle], [nettle_md5_init],
820    [CRYPTO_LIB="-lnettle"],
821    [AC_MSG_ERROR([nettle crypto library not found. install it or build without --with-nettle])]
822  )
823
824  AC_SUBST([CRYPTO_LIB])
825fi
826
827dnl Check for GnuTLS
828AC_MSG_NOTICE([----------------------------------------])
829AC_MSG_CHECKING([for GnuTLS])
830AC_ARG_WITH([gnutls],
831  AS_HELP_STRING([--with-gnutls@<:@=DIR@:>@],[Include GnuTLS support. DIR points to the installation root. (default no)]),
832  [WITH_GNUTLS=$withval],
833  [WITH_GNUTLS=no]
834)
835
836if test "$WITH_GNUTLS" != "no"; then
837  use_gnutls=yes
838else
839  use_gnutls=no
840fi
841AC_MSG_RESULT([$use_gnutls])
842AM_CONDITIONAL(BUILD_WITH_GNUTLS, test ! $WITH_GNUTLS = no)
843
844GNUTLS_CFLAGS=
845GNUTLS_LIBS=
846
847if test "x$use_gnutls" = "xyes"; then
848  if test "$WITH_GNUTLS" != "yes"; then
849      GNUTLS_CFLAGS="-I$WITH_GNUTLS/include"
850      GNUTLS_LIBS="-L$WITH_GNUTLS/lib -lgnutls"
851  else
852      dnl oldest GnuTLS supported release is 3.3.x at time this is being written
853      PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.3.0])
854  fi
855  AC_SUBST([GNUTLS_CFLAGS])
856  AC_SUBST([GNUTLS_LIBS])
857  AC_DEFINE([HAVE_GNUTLS_CRYPTO_H], [1], [gnutls/crypto.h])
858  if test "$WITH_OPENSSL" = no && test "$WITH_WOLFSSL" = no && \
859     test "$WITH_MBEDTLS" = no && test "$WITH_NETTLE" = no; then
860      AC_SUBST([CRYPTO_LIB],[$GNUTLS_LIBS])
861  fi
862fi
863
864dnl Check for NSS
865AC_MSG_NOTICE([----------------------------------------])
866AC_MSG_CHECKING([for NSS])
867AC_ARG_WITH([nss],
868  AS_HELP_STRING([--with-nss@<:@=DIR@:>@],[Include NSS support. DIR points to the installation root. (default no)]),
869  [WITH_NSS=$withval],
870  [WITH_NSS=no]
871)
872
873if test "$WITH_NSS" != "no"; then
874  use_nss=yes
875else
876  use_nss=no
877fi
878AC_MSG_RESULT([$use_nss])
879AM_CONDITIONAL(BUILD_WITH_NSS, test ! $WITH_NSS = no)
880
881NSS_CFLAGS=
882NSS_LIBS=
883
884if test "x$use_nss" = "xyes"; then
885  if test "$WITH_NSS" != "yes"; then
886      NSS_CFLAGS="-I$WITH_NSS/include"
887      NSS_LIBS="-L$WITH_NSS/lib -lnss3"
888  else
889      PKG_CHECK_MODULES([NSS],[nss])
890      if test "x$CRYPTO_LIB" = "x"; then
891        PKG_CHECK_MODULES([NSPR],[nspr])
892        CPPFLAGS="$CPPFLAGS $NSPR_CFLAGS"
893      fi
894  fi
895  AC_DEFINE([HAVE_NSS_NSS_H], [1], [nss/nss.h])
896  AC_DEFINE([HAVE_NSS3_NSS_H], [1], [nss3/nss.h])
897  AC_SUBST([NSS_CFLAGS])
898  AC_SUBST([NSS_LIBS])
899  if test "x$CRYPTO_LIB" = "x"; then
900    CRYPTO_LIB="-lnss3"
901    AC_SUBST([CRYPTO_LIB])
902  fi
903fi
904
905
906dnl pcre2 support
907AC_MSG_NOTICE([----------------------------------------])
908AC_MSG_CHECKING([for perl regular expressions support])
909AC_ARG_WITH([pcre2],
910  [AS_HELP_STRING([--with-pcre2], [Enable pcre2 support (default no)])],
911  [WITH_PCRE2=$withval],
912  [WITH_PCRE2=no]
913)
914AC_MSG_RESULT([$WITH_PCRE2])
915
916if test "$WITH_PCRE2" != no; then
917  if test "$WITH_PCRE2" != yes; then
918    PCRE_LIB="-L$WITH_PCRE2/lib -lpcre2-8"
919    CPPFLAGS="$CPPFLAGS -I$WITH_PCRE/include"
920  else
921    AC_PATH_PROG([PCRE2CONFIG], [pcre2-config])
922    if test -n "$PCRE2CONFIG"; then
923      PCRE_LIB=`"$PCRE2CONFIG" --libs8`
924      CPPFLAGS="$CPPFLAGS `"$PCRE2CONFIG" --cflags`"
925    fi
926  fi
927
928  if test -z "$PCRE_LIB"; then
929    AC_MSG_ERROR([pcre2-config not found, install the pcre2-devel package or build with --without-pcre2])
930  fi
931
932  AC_DEFINE([HAVE_PCRE], [1], [libpcre2-8])
933  AC_DEFINE([HAVE_PCRE2_H], [1], [pcre.h])
934  AC_SUBST([PCRE_LIB])
935fi
936
937dnl pcre support
938AC_MSG_NOTICE([----------------------------------------])
939AC_MSG_CHECKING([for perl regular expressions support])
940AC_ARG_WITH([pcre],
941  [AS_HELP_STRING([--with-pcre], [Enable pcre support (default yes)])],
942  [WITH_PCRE=$withval],
943  [WITH_PCRE=yes]
944)
945AC_MSG_RESULT([$WITH_PCRE])
946
947if test "$WITH_PCRE" != no && test "$WITH_PCRE2" = "no"; then
948  if test "$WITH_PCRE" != yes; then
949    PCRE_LIB="-L$WITH_PCRE/lib -lpcre"
950    CPPFLAGS="$CPPFLAGS -I$WITH_PCRE/include"
951  else
952    AC_PATH_PROG([PCRECONFIG], [pcre-config])
953    if test -n "$PCRECONFIG"; then
954      PCRE_LIB=`"$PCRECONFIG" --libs`
955      CPPFLAGS="$CPPFLAGS `"$PCRECONFIG" --cflags`"
956    fi
957  fi
958
959  if test -z "$PCRE_LIB"; then
960    AC_MSG_ERROR([pcre-config not found, install the pcre-devel package or build with --without-pcre])
961  fi
962
963  AC_DEFINE([HAVE_PCRE], [1], [libpcre])
964  AC_DEFINE([HAVE_PCRE_H], [1], [pcre.h])
965  AC_SUBST([PCRE_LIB])
966fi
967
968dnl zlib
969AC_MSG_NOTICE([----------------------------------------])
970AC_MSG_CHECKING([for zlib support])
971AC_ARG_WITH([zlib],
972  [AS_HELP_STRING([--with-zlib],
973    [Enable zlib support for mod_deflate]
974  )],
975  [WITH_ZLIB=$withval],
976  [WITH_ZLIB=yes]
977)
978AC_MSG_RESULT([$WITH_ZLIB])
979
980if test "$WITH_ZLIB" != no; then
981  if test "$WITH_ZLIB" != yes; then
982    Z_LIB="-L$WITH_ZLIB -lz"
983    CPPFLAGS="$CPPFLAGS -I$WITH_ZLIB"
984  else
985    AC_CHECK_HEADERS([zlib.h], [],
986      [AC_MSG_ERROR([zlib headers not found, install them or build without --with-zlib])]
987    )
988    AC_CHECK_LIB([z], [deflate],
989      [Z_LIB=-lz],
990      [AC_MSG_ERROR([zlib library not found, install it or build without --with-zlib])]
991    )
992  fi
993
994  AC_DEFINE([HAVE_LIBZ], [1], [libz])
995  AC_DEFINE([HAVE_ZLIB_H], [1])
996  AC_SUBST([Z_LIB])
997fi
998
999dnl zstd
1000AC_MSG_NOTICE([----------------------------------------])
1001AC_MSG_CHECKING([for zstd support])
1002AC_ARG_WITH([zstd],
1003  [AS_HELP_STRING([--with-zstd],
1004    [Enable zstd support for mod_deflate]
1005  )],
1006  [WITH_ZSTD=$withval],
1007  [WITH_ZSTD=no]
1008)
1009AC_MSG_RESULT([$WITH_ZSTD])
1010
1011if test "$WITH_ZSTD" != no; then
1012  if test "$WITH_ZSTD" != yes; then
1013    ZSTD_LIB="-L$WITH_ZSTD -lzstd"
1014    CPPFLAGS="$CPPFLAGS -I$WITH_ZSTD"
1015  else
1016    AC_CHECK_HEADERS([zstd.h], [],
1017      [AC_MSG_ERROR([zstd headers not found, install them or build without --with-zstd])]
1018    )
1019    AC_CHECK_LIB([zstd], [ZSTD_versionNumber],
1020      [ZSTD_LIB=-lzstd],
1021      [AC_MSG_ERROR([zstd library not found, install it or build without --with-zstd])]
1022    )
1023  fi
1024
1025  AC_DEFINE([HAVE_ZSTD], [1], [libzstd])
1026  AC_DEFINE([HAVE_ZSTD_H], [1])
1027  AC_SUBST([ZSTD_LIB])
1028fi
1029
1030dnl bzip2
1031AC_MSG_NOTICE([----------------------------------------])
1032AC_MSG_CHECKING([for bzip2 support])
1033AC_ARG_WITH([bzip2],
1034  [AS_HELP_STRING([--with-bzip2],
1035    [Enable bzip2 support for mod_deflate]
1036  )],
1037  [WITH_BZIP2=$withval],
1038  [WITH_BZIP2=no]
1039)
1040AC_MSG_RESULT([$WITH_BZIP2])
1041
1042if test "$WITH_BZIP2" != no; then
1043  if test "$WITH_BZIP2" != yes; then
1044    BZ_LIB="-L$WITH_BZIP2 -lbz2"
1045    CPPFLAGS="$CPPFLAGS -I$WITH_BZIP2"
1046  else
1047    AC_CHECK_HEADERS([bzlib.h], [], [
1048      AC_MSG_ERROR([bzip2 headers not found, install them or build without --with-bzip2])
1049    ])
1050    AC_CHECK_LIB([bz2], [BZ2_bzCompress],
1051      [BZ_LIB=-lbz2],
1052      [AC_MSG_ERROR([bzip2 library not found, install it or build without --with-bzip2])]
1053    )
1054  fi
1055
1056  AC_DEFINE([HAVE_LIBBZ2], [1], [libbz2])
1057  AC_DEFINE([HAVE_BZLIB_H], [1])
1058  AC_SUBST([BZ_LIB])
1059fi
1060
1061dnl brotli
1062AC_MSG_NOTICE([----------------------------------------])
1063AC_MSG_CHECKING([for brotli support])
1064AC_ARG_WITH([brotli],
1065  [AS_HELP_STRING([--with-brotli],
1066    [Enable brotli support for mod_deflate]
1067  )],
1068  [WITH_BROTLI=$withval],
1069  [WITH_BROTLI=no]
1070)
1071AC_MSG_RESULT([$WITH_BROTLI])
1072
1073if test "$WITH_BROTLI" != no; then
1074  if test "$WITH_BROTLI" != yes; then
1075    BROTLI_LIBS="-L$WITH_BROTLI -lbrotlienc"
1076    CPPFLAGS="$CPPFLAGS -I$WITH_BROTLI"
1077  else
1078    PKG_CHECK_MODULES([BROTLI], [libbrotlienc], [], [
1079      AC_MSG_ERROR([brotli not found, install it or build without --with-brotli])
1080    ])
1081  fi
1082
1083  AC_DEFINE([HAVE_BROTLI_ENCODE_H], [1], [brotli/encode.h])
1084  AC_DEFINE([HAVE_BROTLI], [1], [libbrotlienc])
1085  AC_SUBST([BROTLI_CFLAGS])
1086  AC_SUBST([BROTLI_LIBS])
1087fi
1088
1089dnl Check for fam/gamin
1090AC_MSG_NOTICE([----------------------------------------])
1091AC_MSG_CHECKING([for FAM])
1092AC_ARG_WITH([fam],
1093  [AS_HELP_STRING([--with-fam],
1094    [fam/gamin for reducing number of stat() calls]
1095  )],
1096  [WITH_FAM=$withval],
1097  [WITH_FAM=no]
1098)
1099AC_MSG_RESULT([$WITH_FAM])
1100
1101dnl "$ac_cv_func_kqueue" is set further below
1102case "$host_os" in
1103*bsd*|*darwin* ) WITH_FAM=no ;;
1104* ) ;;
1105esac
1106
1107if test "$ac_cv_header_sys_inotify_h" != no; then
1108  WITH_FAM=no
1109fi
1110
1111if test "$WITH_FAM" != no; then
1112  if test "$WITH_FAM" != yes; then
1113    FAM_LIBS="-L$WITH_FAM -lfam"
1114    CPPFLAGS="$CPPFLAGS -I$WITH_FAM"
1115  else
1116    AC_CHECK_LIB([fam], [FAMOpen2], [
1117      AC_CHECK_HEADERS([fam.h], [FAM_LIBS=-lfam])
1118    ])
1119    dnl fam has no pkg-config so far, so just search for gamin as fallback
1120    if test -z "$FAM_LIBS"; then
1121      PKG_CHECK_MODULES([FAM], [gamin >= 0.1.0])
1122    fi
1123  fi
1124
1125  if test -z "$FAM_LIBS"; then
1126    AC_MSG_ERROR([fam/gamin headers and/or libs were not found, install them or build without --with-fam])
1127  fi
1128
1129  OLD_LIBS=$LIBS
1130  LIBS=$FAM_LIBS
1131  AC_CHECK_FUNCS([FAMNoExists])
1132  LIBS=$OLD_LIBS
1133
1134  AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
1135  AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
1136  AC_SUBST([FAM_LIBS])
1137fi
1138
1139
1140dnl webdav props (xml2 and sqlite3)
1141AC_MSG_NOTICE([----------------------------------------])
1142AC_MSG_CHECKING([for properties in mod_webdav])
1143AC_ARG_WITH([webdav-props],
1144  [AS_HELP_STRING([--with-webdav-props], [properties in mod_webdav])],
1145  [WITH_WEBDAV_PROPS=$withval],
1146  [WITH_WEBDAV_PROPS=no]
1147)
1148AC_MSG_RESULT([$WITH_WEBDAV_PROPS])
1149
1150if test "$WITH_WEBDAV_PROPS" != no; then
1151  AC_MSG_CHECKING([for libxml2])
1152  AC_ARG_WITH([libxml],
1153    [AS_HELP_STRING([--with-libxml],
1154      [libxml2 for properties in mod_webdav]
1155    )],
1156    [WITH_LIBXML=$withval],
1157    [WITH_LIBXML=yes]
1158  )
1159  AC_MSG_RESULT([$WITH_LIBXML])
1160
1161  if test "$WITH_LIBXML" = no; then
1162    AC_MSG_ERROR([--with-webdav-props requires libxml])
1163  fi
1164
1165  if test "$WITH_LIBXML" != yes; then
1166    XML_LIBS="-L$WITH_LIBXML/.libs -lxml2"
1167    XML_CFLAGS="-I$WITH_LIBXML/include"
1168  else
1169    PKG_CHECK_MODULES([XML], [libxml-2.0], [], [
1170      AC_MSG_ERROR([libxml2 not found, install it or build without --with-webdav-props])
1171    ])
1172  fi
1173
1174  AC_DEFINE([HAVE_LIBXML2], [1], [libxml2])
1175  AC_DEFINE([HAVE_LIBXML_H], [1], [libxml.h])
1176  AC_SUBST([XML_LIBS])
1177  AC_SUBST([XML_CFLAGS])
1178
1179  AC_MSG_CHECKING([for sqlite])
1180  AC_ARG_WITH([sqlite],
1181    [AS_HELP_STRING([--with-sqlite],
1182      [sqlite for properties in mod_webdav]
1183    )],
1184    [WITH_SQLITE=$withval],
1185    [WITH_SQLITE=yes]
1186  )
1187  AC_MSG_RESULT([$WITH_SQLITE])
1188
1189  if test "$WITH_SQLITE" = no; then
1190    AC_MSG_ERROR([--with-webdav-props requires sqlite])
1191  fi
1192
1193  if test "$WITH_SQLITE" != yes; then
1194    SQLITE_LIBS="-L$WITH_SQLITE/.libs -lsqlite3"
1195    SQLITE_CFLAGS="-I$WITH_SQLITE"
1196  else
1197    PKG_CHECK_MODULES([SQLITE], [sqlite3], [], [
1198      AC_MSG_ERROR([sqlite3 not found, install it or build without --with-webdav-props])
1199    ])
1200  fi
1201
1202  AC_DEFINE([HAVE_SQLITE3], [1], [libsqlite3])
1203  AC_DEFINE([HAVE_SQLITE3_H], [1], [sqlite3.h])
1204  AC_SUBST([SQLITE_LIBS])
1205  AC_SUBST([SQLITE_CFLAGS])
1206fi
1207
1208
1209dnl webdav locks (uuid)
1210AC_MSG_NOTICE([----------------------------------------])
1211AC_MSG_CHECKING([for locks in mod_webdav])
1212AC_ARG_WITH([webdav-locks],
1213  [AS_HELP_STRING([--with-webdav-locks],
1214    [locks in mod_webdav (requires webdav properties)]
1215  )],
1216  [WITH_WEBDAV_LOCKS=$withval],
1217  [WITH_WEBDAV_LOCKS=no]
1218)
1219AC_MSG_RESULT([$WITH_WEBDAV_LOCKS])
1220
1221if test "$WITH_WEBDAV_LOCKS" != no; then
1222  if test "$WITH_WEBDAV_PROPS" = no; then
1223    AC_MSG_ERROR([--with-webdav-locks requires --with-webdav-props])
1224  fi
1225
1226  AC_MSG_CHECKING([for libuuid])
1227  AC_ARG_WITH([uuid],
1228    [AS_HELP_STRING([--with-uuid], [uuid for locks in mod_webdav])],
1229    [WITH_UUID=$withval],
1230    [WITH_UUID=yes]
1231  )
1232  AC_MSG_RESULT([$WITH_UUID])
1233
1234  if test "$WITH_UUID" = no; then
1235    AC_MSG_ERROR([--with-webdav-locks requires uuid])
1236  fi
1237
1238  if test "$WITH_UUID" != yes; then
1239    UUID_LIBS="-L$WITH_UUID -luuid"
1240    CPPFLAGS="$CPPFLAGS -I$WITH_UUID"
1241  else
1242    AC_CHECK_LIB([uuid], [uuid_unparse],
1243      [UUID_LIBS=-luuid],
1244      [AC_MSG_ERROR([uuid lib not found, install it or build without --with-webdav-locks])]
1245    )
1246    AC_CHECK_HEADERS([uuid/uuid.h], [],
1247      [AC_MSG_ERROR([uuid headers not found, install them or build without --with-webdav-locks])]
1248    )
1249  fi
1250
1251  AC_DEFINE([HAVE_LIBUUID], [1], [libuuid])
1252  AC_DEFINE([HAVE_UUID_UUID_H], [1], [uuid/uuid.h is available])
1253  AC_SUBST([UUID_LIBS])
1254fi
1255
1256dnl xxhash
1257AC_MSG_NOTICE([----------------------------------------])
1258AC_MSG_CHECKING([for xxhash support])
1259AC_ARG_WITH([xxhash],
1260  [AS_HELP_STRING([--with-xxhash],
1261    [Enable system-provided xxhash]
1262  )],
1263  [WITH_XXHASH=$withval],
1264  [WITH_XXHASH=no]
1265)
1266AC_MSG_RESULT([$WITH_XXHASH])
1267
1268if test "$WITH_XXHASH" != no; then
1269  if test "$WITH_XXHASH" != yes; then
1270    XXHASH_LIBS="-L$WITH_XXHASH -lxxhash"
1271    CPPFLAGS="$CPPFLAGS -I$WITH_XXHASH"
1272  else
1273    PKG_CHECK_MODULES([XXHASH], [libxxhash], [], [
1274      AC_CHECK_LIB([xxhash], [XXH_versionNumber],
1275        [XXHASH_LIBS=-lxxhash],
1276        [AC_MSG_ERROR([xxhash not found, install it or build without --with-xxhash])]
1277      )
1278      AC_CHECK_HEADERS([xxhash.h], [],
1279        [AC_MSG_ERROR([xxhash not found, install it or build without --with-xxhash])]
1280      )
1281    ])
1282  fi
1283
1284  AC_DEFINE([HAVE_XXHASH_H], [1], [xxhash.h])
1285  AC_DEFINE([HAVE_XXHASH], [1], [xxhash])
1286  AC_SUBST([XXHASH_CFLAGS])
1287  AC_SUBST([XXHASH_LIBS])
1288fi
1289
1290dnl Check for gdbm
1291AC_MSG_NOTICE([----------------------------------------])
1292AC_MSG_CHECKING([for gdbm])
1293AC_ARG_WITH([gdbm],
1294  [AS_HELP_STRING([--with-gdbm], [gdbm storage for mod_trigger_b4_dl])],
1295  [WITH_GDBM=$withval],
1296  [WITH_GDBM=no]
1297)
1298AC_MSG_RESULT([$WITH_GDBM])
1299
1300if test "$WITH_GDBM" != no; then
1301  if test "$WITH_GDBM" != yes; then
1302    GDBM_LIB="-L$WITH_GDBM -lgdbm"
1303    CPPFLAGS="$CPPFLAGS -I$WITH_GDBM"
1304  else
1305    AC_CHECK_LIB([gdbm], [gdbm_open],
1306      [GDBM_LIB=-lgdbm],
1307      [AC_MSG_ERROR([gdbm lib not found, install it or build without --with-gdbm])]
1308    )
1309    AC_CHECK_HEADERS([gdbm.h], [],
1310      [AC_MSG_ERROR([gdbm headers not found, install them or build without --with-gdbm])]
1311    )
1312  fi
1313
1314  AC_DEFINE([HAVE_GDBM], [1], [libgdbm])
1315  AC_DEFINE([HAVE_GDBM_H], [1])
1316  AC_SUBST([GDBM_LIB])
1317fi
1318AM_CONDITIONAL([BUILD_WITH_GDBM], [test "$WITH_GDBM" != no])
1319
1320dnl Check for GeoIP
1321AC_MSG_NOTICE([----------------------------------------])
1322AC_MSG_CHECKING([for GeoIP])
1323AC_ARG_WITH([geoip],
1324  [AS_HELP_STRING([--with-geoip], [IP-based geolocation lookup])],
1325  [WITH_GEOIP=$withval],
1326  [WITH_GEOIP=no]
1327)
1328AC_MSG_RESULT([$WITH_GEOIP])
1329
1330if test "$WITH_GEOIP" != no; then
1331  if test "$WITH_GEOIP" != yes; then
1332    GEOIP_LIB="-L$WITH_GEOIP -lGeoIP"
1333    CPPFLAGS="$CPPFLAGS -I$WITH_GEOIP"
1334  else
1335    AC_CHECK_LIB([GeoIP], [GeoIP_country_name_by_addr],
1336      [GEOIP_LIB=-lGeoIP],
1337      [AC_MSG_ERROR([GeoIP lib not found, install it or build without --with-geoip])]
1338    )
1339    AC_CHECK_HEADERS([GeoIP.h], [],
1340      [AC_MSG_ERROR([GeoIP headers not found, install them or build without --with-geoip])]
1341    )
1342  fi
1343
1344  AC_DEFINE([HAVE_GEOIP], [1], [libGeoIP])
1345  AC_DEFINE([HAVE_GEOIP_H], [1])
1346  AC_SUBST([GEOIP_LIB])
1347fi
1348AM_CONDITIONAL([BUILD_WITH_GEOIP], [test "$WITH_GEOIP" != no])
1349
1350dnl Check for maxminddb
1351AC_MSG_NOTICE([----------------------------------------])
1352AC_MSG_CHECKING([for maxminddb])
1353AC_ARG_WITH([maxminddb],
1354  [AS_HELP_STRING([--with-maxminddb], [IP-based geolocation lookup])],
1355  [WITH_MAXMINDDB=$withval],
1356  [WITH_MAXMINDDB=no]
1357)
1358AC_MSG_RESULT([$WITH_MAXMINDDB])
1359
1360if test "$WITH_MAXMINDDB" != no; then
1361  if test "$WITH_MAXMINDDB" != yes; then
1362    MAXMINDDB_LIB="-L$WITH_MAXMINDDB -lmaxminddb"
1363    CPPFLAGS="$CPPFLAGS -I$WITH_MAXMINDDB"
1364  else
1365    AC_CHECK_LIB([maxminddb], [MMDB_open],
1366      [MAXMINDDB_LIB=-lmaxminddb],
1367      [AC_MSG_ERROR([maxminddb lib not found, install it or build without --with-maxminddb])]
1368    )
1369    AC_CHECK_HEADERS([maxminddb.h], [],
1370      [AC_MSG_ERROR([maxminddb headers not found, install them or build without --with-maxminddb])]
1371    )
1372  fi
1373
1374  AC_DEFINE([HAVE_MAXMINDDB], [1], [libmaxminddb])
1375  AC_DEFINE([HAVE_MAXMINDDB_H], [1])
1376  AC_SUBST([MAXMINDDB_LIB])
1377fi
1378AM_CONDITIONAL([BUILD_WITH_MAXMINDDB], [test "$WITH_MAXMINDDB" != no])
1379
1380dnl Check for memcached
1381AC_MSG_NOTICE([----------------------------------------])
1382AC_MSG_CHECKING([for memcached])
1383AC_ARG_WITH([memcached],
1384  [AS_HELP_STRING([--with-memcached],
1385    [memcached storage for mod_trigger_b4_dl/mod_cml]
1386  )],
1387  [WITH_MEMCACHED=$withval],
1388  [WITH_MEMCACHED=no]
1389)
1390AC_MSG_RESULT([$WITH_MEMCACHED])
1391
1392if test "$WITH_MEMCACHED" != no; then
1393  if test "$WITH_MEMCACHED" != yes; then
1394    MEMCACHED_LIB="-L$WITH_MEMCACHED -lMEMCACHED"
1395    CPPFLAGS="$CPPFLAGS -I$WITH_MEMCACHED"
1396  else
1397    AC_CHECK_LIB([memcached], [memcached],
1398      [ MEMCACHED_LIB=-lmemcached ],
1399      [AC_MSG_ERROR([memcached lib not found, install it or build without --with-memcached])]
1400    )
1401    AC_CHECK_HEADERS([libmemcached/memcached.h], [],
1402      [AC_MSG_ERROR([memcached headers not found, install them or build without --with-memcached])]
1403    )
1404  fi
1405
1406  AC_DEFINE([USE_MEMCACHED], [1], [libmemcached])
1407  AC_SUBST([MEMCACHED_LIB])
1408fi
1409AM_CONDITIONAL([BUILD_WITH_MEMCACHED], [test "$WITH_MEMCACHED" != no])
1410
1411BUILD_MOD_TRIGGER_B4_DL=no
1412if test "$WITH_MEMCACHED" != no || test "$WITH_GDBM" != no ; then
1413  BUILD_MOD_TRIGGER_B4_DL=yes
1414fi
1415
1416AM_CONDITIONAL([BUILD_MOD_TRIGGER_B4_DL], [test "$BUILD_MOD_TRIGGER_B4_DL" != no])
1417
1418dnl Check for lua
1419AC_MSG_NOTICE([----------------------------------------])
1420AC_MSG_CHECKING([if lua-support is requested])
1421AC_ARG_WITH([lua],
1422  [AS_HELP_STRING([--with-lua], [lua engine for mod_magnet/mod_cml])],
1423  [WITH_LUA=$withval],
1424  [WITH_LUA=no]
1425)
1426AC_MSG_RESULT([$WITH_LUA])
1427
1428if test "$WITH_LUA" != no; then
1429  found_lua=0
1430  if test "$WITH_LUA" != yes; then
1431    PKG_CHECK_MODULES([LUA], [$WITH_LUA >= 5.1],
1432      [found_lua=1],
1433      [AC_MSG_NOTICE([Couldn\'t find requested lua pkg-config module $WITH_LUA])]
1434    )
1435    if test "$found_lua" = "0"; then
1436      LUA_LIBS="-L$WITH_LUA -llua"
1437      LUA_CFLAGS="-I$WITH_LUA"
1438    fi
1439  else
1440    for luaname in lua5.4 lua-5.4 lua5.3 lua-5.3 lua5.2 lua-5.2 lua5.1 lua-5.1 lua; do
1441      if test "$found_lua" = "0"; then
1442        PKG_CHECK_MODULES([LUA], [$luaname >= 5.1],
1443          [found_lua=1],
1444          [AC_MSG_NOTICE([Couldn\'t find $luaname])]
1445        )
1446      fi
1447    done
1448    if test "$found_lua" = "0"; then
1449      AC_MSG_ERROR([Couldn\'t find any lua pkg-config module])
1450    fi
1451  fi
1452
1453  AC_DEFINE([HAVE_LUA], [1], [liblua])
1454  AC_DEFINE([HAVE_LUA_H], [1], [lua.h])
1455  AC_SUBST([LUA_LIBS])
1456  AC_SUBST([LUA_CFLAGS])
1457fi
1458AM_CONDITIONAL([BUILD_WITH_LUA], [test "$WITH_LUA" != no])
1459
1460dnl "--with-FEATURE" blocks end
1461AC_MSG_NOTICE([----------------------------------------])
1462
1463dnl search for crypt_r and (fallback) for crypt
1464save_LIBS=$LIBS
1465LIBS=
1466found_crypt=no
1467AC_SEARCH_LIBS([crypt_r], [crypt],
1468  [
1469    AC_DEFINE([HAVE_CRYPT_R], [1], [crypt_r])
1470    AC_CHECK_HEADERS([crypt.h])
1471    CRYPT_LIB=$LIBS
1472    found_crypt=crypt_r
1473  ],
1474  [AC_SEARCH_LIBS([crypt], [crypt], [
1475    AC_DEFINE([HAVE_CRYPT], [1], [crypt])
1476    AC_CHECK_HEADERS([crypt.h])
1477    CRYPT_LIB=$LIBS
1478    found_crypt=crypt
1479  ])]
1480)
1481LIBS=$save_LIBS
1482AC_SUBST([CRYPT_LIB])
1483
1484AC_MSG_CHECKING([crypt_r/crypt support])
1485AC_MSG_RESULT([$found_crypt])
1486
1487dnl check whether sendfilev needs -lsendfile
1488AC_MSG_NOTICE([----------------------------------------])
1489save_LIBS=$LIBS
1490LIBS=
1491have_sendfilev=no
1492AC_SEARCH_LIBS([sendfilev], [sendfile], [
1493  if test -z "$LIBS"; then
1494    have_sendfilev=yes
1495  else
1496    have_sendfilev=$LIBS
1497  fi
1498  SENDFILE_LIB=$LIBS
1499  AC_DEFINE([HAVE_SENDFILEV], [1], [solaris sendfilev])
1500])
1501LIBS=$save_LIBS
1502AC_SUBST([SENDFILE_LIB])
1503
1504AC_MSG_CHECKING([solaris sendfilev present])
1505AC_MSG_RESULT([$have_sendfilev])
1506
1507AC_MSG_NOTICE([----------------------------------------])
1508
1509case "$host_os" in
1510*mingw* ) LIBS="$LIBS -lwsock32" ;;
1511* ) ;;
1512esac
1513
1514AC_CHECK_FUNCS([\
1515  arc4random_buf \
1516  chroot \
1517  clock_gettime \
1518  copy_file_range \
1519  epoll_ctl \
1520  explicit_bzero \
1521  explicit_memset \
1522  fork \
1523  getloadavg \
1524  getrlimit \
1525  getuid \
1526  gmtime_r \
1527  inet_aton \
1528  inet_pton \
1529  issetugid \
1530  jrand48 \
1531  kqueue \
1532  localtime_r \
1533  lstat \
1534  madvise \
1535  malloc_trim \
1536  mallopt \
1537  memcpy \
1538  mempcpy \
1539  memset \
1540  memset_s \
1541  mkostemp \
1542  mmap \
1543  pathconf \
1544  pipe2 \
1545  poll \
1546  port_create \
1547  pread \
1548  preadv \
1549  pwrite \
1550  pwritev \
1551  select \
1552  send_file \
1553  sendfile \
1554  sendfile64 \
1555  sigaction \
1556  signal \
1557  splice \
1558  srandom \
1559  strerror_r \
1560  timegm \
1561  writev \
1562])
1563AC_CHECK_HEADERS([sys/random.h], [AC_CHECK_FUNCS([getentropy])])
1564AC_CHECK_HEADERS([linux/random.h], [AC_CHECK_FUNCS([getrandom])])
1565
1566AC_MSG_NOTICE([----------------------------------------])
1567AC_MSG_CHECKING([if weak symbols are supported])
1568AC_LINK_IFELSE(
1569  [AC_LANG_PROGRAM([[
1570    __attribute__((weak)) void __dummy(void *x) { }
1571    void f(void *x) { __dummy(x); }
1572  ]])],
1573  [
1574    AC_MSG_RESULT([yes])
1575    AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [weak symbols are supported])
1576  ],
1577  [AC_MSG_RESULT([no])]
1578)
1579
1580AC_MSG_NOTICE([----------------------------------------])
1581AC_MSG_CHECKING([for Large File System support])
1582AC_ARG_ENABLE([lfs],
1583  [AS_HELP_STRING([--enable-lfs],
1584    [Turn on Large File System (default)]
1585  )],
1586  [
1587    case "${enableval}" in
1588    yes) ENABLE_LFS=yes ;;
1589    no) ENABLE_LFS=no ;;
1590    *) AC_MSG_ERROR([bad value ${enableval} for --enable-lfs]) ;;
1591    esac
1592  ],
1593  [ ENABLE_LFS=yes ]
1594)
1595AC_MSG_RESULT([$ENABLE_LFS])
1596if test "$ENABLE_LFS" = yes; then
1597  CPPFLAGS="${CPPFLAGS} -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES"
1598  AC_SYS_LARGEFILE
1599fi
1600
1601dnl check if sendfile works
1602if test "$ac_cv_func_sendfile" = yes; then
1603  AC_MSG_NOTICE([----------------------------------------])
1604  AC_MSG_CHECKING([if sendfile works])
1605  if test "$cross_compiling" = no; then
1606    AC_RUN_IFELSE([AC_LANG_SOURCE(
1607      [[
1608        #ifdef HAVE_SYS_SENDFILE_H
1609        #include <sys/sendfile.h>
1610        #endif /* HAVE_SYS_SENDFILE_H */
1611        #include <errno.h>
1612        int main() {
1613          int o = 0;
1614          if (-1 == sendfile(-1, 0, &o, 0) && errno == ENOSYS) return -1;
1615          return 0;
1616        }
1617      ]])],
1618      [AC_MSG_RESULT([yes])],
1619      [
1620        AC_MSG_RESULT([no])
1621        AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])
1622      ],[]
1623    )
1624  fi
1625fi
1626
1627dnl Check for IPv6 support
1628AC_MSG_NOTICE([----------------------------------------])
1629AC_ARG_ENABLE([ipv6],
1630  [AS_HELP_STRING([--disable-ipv6], [disable IPv6 support])],
1631  [
1632    case "${enableval}" in
1633    yes) ipv6=true ;;
1634    no) ipv6=false ;;
1635    *) AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6]) ;;
1636    esac
1637  ],
1638  [ipv6=true]
1639)
1640
1641if test "$ipv6" = true; then
1642  AC_CACHE_CHECK([for IPv6 support], [ac_cv_ipv6_support], [
1643    AC_LINK_IFELSE([AC_LANG_PROGRAM(
1644      [[
1645        #include <sys/types.h>
1646        #include <sys/socket.h>
1647        #include <netinet/in.h>
1648      ]],
1649      [[
1650        struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;
1651      ]])],
1652      [ac_cv_ipv6_support=yes],
1653      [ac_cv_ipv6_support=no]
1654    )
1655  ])
1656
1657  if test "$ac_cv_ipv6_support" = yes; then
1658    AC_DEFINE([HAVE_IPV6], [1], [Whether to enable IPv6 support])
1659  else
1660    AC_MSG_ERROR([IPv6 seems broken.  Fix it or build with --disable-ipv6])
1661  fi
1662fi
1663
1664# disable mmap by default
1665# lighttpd may always use mmap with files it owns (created tmp files)
1666AC_MSG_NOTICE([----------------------------------------])
1667AC_MSG_CHECKING([use mmap if available])
1668AC_ARG_ENABLE([mmap],
1669  [AS_HELP_STRING([--enable-mmap],
1670    [use mmap if available]
1671  )],
1672  [
1673    case "${enableval}" in
1674    yes) mmap=true ;;
1675    no) mmap=false ;;
1676    *) AC_MSG_ERROR([bad value ${enableval} for --enable-mmap]) ;;
1677    esac
1678  ],
1679  [mmap=false]
1680)
1681AC_MSG_RESULT([$mmap])
1682
1683if test "$mmap" = true; then
1684  AC_DEFINE([ENABLE_MMAP], [1], [Use mmap if available])
1685fi
1686
1687
1688AC_MSG_NOTICE([----------------------------------------])
1689dnl check for extra compiler options (warning options)
1690if test "${GCC}" = yes; then
1691  TRY_CFLAGS([-pipe -Wall -W -Wshadow -pedantic])
1692fi
1693
1694AC_ARG_ENABLE([extra-warnings],
1695  [AS_HELP_STRING([--enable-extra-warnings],
1696    [enable extra warnings (gcc specific)]
1697  )],
1698  [
1699    case "${enableval}" in
1700    error) extrawarnings=error ;;
1701    yes) extrawarnings=true ;;
1702    no) extrawarnings=false ;;
1703    *) AC_MSG_ERROR([bad value ${enableval} for --enable-extra-warnings]) ;;
1704    esac
1705  ],
1706  [extrawarnings=false]
1707)
1708
1709if test "$extrawarnings" = true || test "$extrawarnings" = error; then
1710  TRY_CFLAGS([-g -O2 -g2 -Wall -Wmissing-declarations -Wcast-align -Wsign-compare -Wnested-externs -Wpointer-arith -D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security])
1711  case "$host_os" in
1712    *darwin* ) ;;
1713    * ) TRY_LDFLAGS([-Wl,--as-needed]) ;;
1714  esac
1715  if test "$extrawarnings" = error; then
1716    AS_VAR_APPEND([CFLAGS], [" -Werror"])
1717    case "$host_os" in
1718      *darwin* ) ;;
1719      * ) AS_VAR_APPEND([LDFLAGS], [" -Wl,--fatal-warnings"]) ;;
1720    esac
1721  fi
1722fi
1723
1724dnl build version-id
1725LIGHTTPD_VERSION_ID=m4_format([0x%x%02x%02x], m4_unquote(m4_split(AC_PACKAGE_VERSION, [\.])))
1726AC_DEFINE_UNQUOTED([LIGHTTPD_VERSION_ID], [$LIGHTTPD_VERSION_ID], [lighttpd-version-id])
1727
1728AC_CONFIG_FILES([\
1729  distribute.sh \
1730  doc/config/conf.d/Makefile \
1731  doc/config/Makefile \
1732  doc/config/vhosts.d/Makefile \
1733  doc/Makefile \
1734  doc/outdated/Makefile \
1735  doc/scripts/Makefile \
1736  doc/systemd/Makefile \
1737  Makefile \
1738  src/Makefile \
1739  tests/docroot/Makefile \
1740  tests/Makefile \
1741])
1742AC_OUTPUT
1743
1744do_build="\
1745  mod_access \
1746  mod_accesslog \
1747  mod_ajp13 \
1748  mod_alias \
1749  mod_auth \
1750  mod_authn_file \
1751  mod_cgi \
1752  mod_deflate \
1753  mod_dirlisting \
1754  mod_evhost \
1755  mod_expire \
1756  mod_extforward \
1757  mod_fastcgi \
1758  mod_flv_streaming \
1759  mod_indexfile \
1760  mod_proxy \
1761  mod_redirect \
1762  mod_rewrite \
1763  mod_rrdtool \
1764  mod_scgi \
1765  mod_secdownload \
1766  mod_setenv \
1767  mod_simple_vhost \
1768  mod_sockproxy \
1769  mod_ssi \
1770  mod_staticfile \
1771  mod_status \
1772  mod_userdir \
1773  mod_usertrack \
1774  mod_vhostdb \
1775  mod_webdav \
1776  mod_wstunnel \
1777"
1778
1779lighty_track_feature() {
1780  if eval "$3"; then
1781    enable_feature="$enable_feature $1"
1782    do_build="$do_build $2"
1783  else
1784    disable_feature="$disable_feature $1"
1785    no_build="$no_build $2"
1786  fi
1787}
1788
1789lighty_track_feature "regex-conditionals" "" \
1790  'test "$WITH_PCRE" != no'
1791
1792lighty_track_feature "storage-gdbm" "" \
1793  'test "$WITH_GDBM" != no'
1794
1795lighty_track_feature "storage-memcached" "" \
1796  'test "$WITH_MEMCACHED" != no'
1797
1798lighty_track_feature "" "mod_trigger_b4_dl" \
1799  'test "$BUILD_MOD_TRIGGER_B4_DL" != no'
1800
1801lighty_track_feature "mysql" "mod_authn_mysql mod_mysql_vhost mod_vhostdb_mysql" \
1802  'test "$WITH_MYSQL" != no'
1803
1804lighty_track_feature "postgresql" "mod_vhostdb_pgsql" \
1805  'test "$WITH_PGSQL" != no'
1806
1807lighty_track_feature "dbi" "mod_authn_dbi mod_vhostdb_dbi" \
1808  'test "$WITH_DBI" != no'
1809
1810lighty_track_feature "lua" "mod_cml mod_magnet" \
1811  'test "$WITH_LUA" != no'
1812
1813lighty_track_feature "geoip" "mod_geoip" \
1814  'test "$WITH_GEOIP" != no'
1815
1816lighty_track_feature "maxminddb" "mod_maxminddb" \
1817  'test "$WITH_MAXMINDDB" != no'
1818
1819lighty_track_feature "compress-gzip compress-deflate" "" \
1820  'test "$WITH_ZLIB" != no'
1821
1822lighty_track_feature "compress-bzip2" "" \
1823  'test "$WITH_BZIP2" != no'
1824
1825lighty_track_feature "compress-brotli" "" \
1826  'test "$WITH_BROTLI" != no'
1827
1828lighty_track_feature "kerberos" "mod_authn_gssapi" \
1829  'test "$WITH_KRB5" != no'
1830
1831lighty_track_feature "ldap" "mod_authn_ldap mod_vhostdb_ldap" \
1832  'test "$WITH_LDAP" != no'
1833
1834lighty_track_feature "pam" "mod_authn_pam" \
1835  'test "$WITH_PAM" != no'
1836
1837lighty_track_feature "network-openssl" "mod_openssl" \
1838  'test "$WITH_OPENSSL" != no'
1839
1840lighty_track_feature "network-mbedtls" "mod_mbedtls" \
1841  'test "$WITH_MBEDTLS" != no'
1842
1843lighty_track_feature "network-gnutls" "mod_gnutls" \
1844  'test "$WITH_GNUTLS" != no'
1845
1846lighty_track_feature "network-nss" "mod_nss" \
1847  'test "$WITH_NSS" != no'
1848
1849lighty_track_feature "network-wolfssl" "mod_wolfssl" \
1850  'test "$WITH_WOLFSSL" != no'
1851
1852lighty_track_feature "auth-crypt" "" \
1853  'test "$found_crypt" != no'
1854
1855lighty_track_feature "network-ipv6" "" \
1856  'test "$ac_cv_ipv6_support" != no'
1857
1858lighty_track_feature "large-files" "" \
1859  'test "$ENABLE_LFS" = yes'
1860
1861case "$host_os" in
1862*linux* )
1863lighty_track_feature "stat-cache-inotify" "" \
1864  'test "$ac_cv_header_sys_inotify_h" != no'
1865    ;;
1866* ) ;;
1867esac
1868
1869case "$host_os" in
1870*bsd*|*darwin* )
1871lighty_track_feature "stat-cache-kqueue" "" \
1872  'test "$ac_cv_func_kqueue" != no'
1873    ;;
1874* ) ;;
1875esac
1876
1877case "$host_os" in
1878*bsd*|*darwin*|*linux* )
1879    ;;
1880* )
1881lighty_track_feature "stat-cache-fam" "" \
1882  'test "$WITH_FAM" != no'
1883    ;;
1884esac
1885
1886lighty_track_feature "webdav-properties" "" \
1887  'test "$WITH_WEBDAV_PROPS" != no'
1888
1889lighty_track_feature "webdav-locks" "" \
1890  'test "$WITH_WEBDAV_LOCKS" != no'
1891
1892dnl output
1893
1894$ECHO
1895$ECHO "Plugins:"
1896$ECHO
1897
1898$ECHO "enabled: "
1899for p in $do_build; do
1900  $ECHO "  $p"
1901done | sort
1902
1903$ECHO "disabled: "
1904for p in $no_build; do
1905  $ECHO "  $p"
1906done | sort
1907
1908$ECHO
1909$ECHO "Features:"
1910$ECHO
1911
1912$ECHO "enabled: "
1913for p in $enable_feature; do
1914  $ECHO "  $p"
1915done | sort
1916
1917$ECHO "disabled: "
1918for p in $disable_feature; do
1919  $ECHO "  $p"
1920done | sort
1921
1922$ECHO
1923