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