[mod_cgi] kill CGI if fail to write request body
[lighttpd.git] / configure.ac
blobe09b59be8be35e691b659289b6e0b8bf44e682a5
1 dnl                                               -*- Autoconf -*-
2 dnl Process this file with autoconf to produce a configure script.
3 AC_PREREQ(2.57)
4 AC_INIT([lighttpd], [1.4.40], [contact@lighttpd.net])
5 AC_CONFIG_SRCDIR([src/server.c])
6 AC_CONFIG_HEADER([config.h])
7 AC_CONFIG_MACRO_DIR([m4])
9 AC_CANONICAL_TARGET
11 dnl HOW FUCKING BROKEN IS AUTOMAKE...
12 dnl serial-tests is not recognized before 1.12, and required for serial tests with 1.13, sane version checks "impossible"
13 dnl if you don't use the default (symlinked) automake on your box, set AUTOMAKE to the path you're using
14 m4_define([serial_tests], [
15     m4_esyscmd([case `${AUTOMAKE:-automake} --version | head -n 1` in
16       *1.11.*|*1.10.*|*1.9.*);;
17       *) echo serial-tests;;
18       esac])
21 AM_INIT_AUTOMAKE([-Wall -Wno-portability -Wno-override foreign dist-xz tar-ustar] serial_tests)
23 dnl enable with --enable-silent-rules or make V=0 (needs automake >= 1.11)
24 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
27 dnl @synopsis TRY_CFLAGS [compiler flags]
28 dnl @summary check whether compiler supports given flags and adds them to CFLAGS
29 AC_DEFUN([TRY_CFLAGS],
30 [dnl
31   AC_MSG_CHECKING([if $CC supports $1])
32   AC_LANG_PUSH([C])
33   ac_try_cflags_saved_cflags="${CFLAGS}"
34   CFLAGS="${CFLAGS} $1"
35   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
36     [AC_MSG_RESULT([yes])],
37     [
38       AC_MSG_ERROR([no])
39       CFLAGS="${ac_try_cflags_saved_cflags}"
40     ]
41   )
42   AC_LANG_POP([C])
45 dnl @synopsis TRY_LDFLAGS [linker flags]
46 dnl @summary check whether linker supports given flags and adds them to LDFLAGS
47 AC_DEFUN([TRY_LDFLAGS],
48 [dnl
49   AC_MSG_CHECKING([if $LD supports $1])
50   AC_LANG_PUSH([C])
51   ac_try_ldflags_saved_ldflags="${LDFLAGS}"
52   LDFLAGS="${LDFLAGS} $1"
53   AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
54     [AC_MSG_RESULT([yes])],
55     [
56       AC_MSG_ERROR([no])
57       LDFLAGS="${ac_try_ldflags_saved_cflags}"
58     ]
59   )
60   AC_LANG_POP([C])
63 dnl Checks for programs.
64 AC_PROG_CC
65 AM_PROG_CC_C_O
66 AC_PROG_LD
67 AC_PROG_INSTALL
68 AC_PROG_AWK
69 AC_PROG_CPP
70 dnl AC_PROG_CXX
71 AC_PROG_LN_S
72 AC_PROG_MAKE_SET
74 dnl AM_PROG_AR is needed for some linker stuff
75 dnl AC_USE_SYSTEM_EXTENSIONS requires autoconf 2.60
76 m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_USE_SYSTEM_EXTENSIONS])
77 dnl AM_PROG_AR requires automake 1.11 (and uses AC_COMPILE_IFELSE which wants AC_USE_SYSTEM_EXTENSIONS)
78 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
80 dnl check environment
81 AC_AIX
82 AC_ISC_POSIX
83 AC_MINIX
85 dnl AC_CANONICAL_HOST
86 case $host_os in
87         *darwin*|*cygwin*|*aix*|*mingw* ) NO_RDYNAMIC=yes;;
88         * ) NO_RDYNAMIC=no;;
89 esac
90 AM_CONDITIONAL(NO_RDYNAMIC, test x$NO_RDYNAMIC = xyes)
92 AC_EXEEXT
94 dnl libtool
95 AC_DISABLE_STATIC
96 AC_ENABLE_SHARED
98 AC_LIBTOOL_DLOPEN
99 AC_PROG_LIBTOOL
101 dnl for solaris
102 CPPFLAGS="${CPPFLAGS} -D_REENTRANT -D__EXTENSIONS__"
104 dnl Checks for header files.
105 AC_HEADER_STDC
106 AC_HEADER_SYS_WAIT
107 AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h \
108 sys/socket.h sys/time.h unistd.h sys/sendfile.h sys/uio.h \
109 getopt.h sys/epoll.h sys/select.h poll.h sys/poll.h sys/devpoll.h sys/filio.h \
110 sys/mman.h sys/event.h port.h pwd.h \
111 sys/resource.h sys/un.h syslog.h sys/prctl.h uuid/uuid.h])
113 dnl Checks for typedefs, structures, and compiler characteristics.
114 AC_C_CONST
115 AC_C_INLINE
116 AC_C_CHAR_UNSIGNED
117 AC_TYPE_OFF_T
118 AC_TYPE_PID_T
119 AC_TYPE_SIZE_T
121 AC_CHECK_MEMBER(struct tm.tm_gmtoff,[AC_DEFINE([HAVE_STRUCT_TM_GMTOFF],[1],[gmtoff in struct tm])],,[#include <time.h>])
122 AC_CHECK_TYPES(struct sockaddr_storage,,,[#include <sys/socket.h>])
123 AC_CHECK_TYPES(socklen_t,,,[#include <sys/types.h>
124 #include <sys/socket.h>])
126 dnl Checks for library functions.
127 AC_FUNC_FORK
128 dnl AC_FUNC_MALLOC
129 dnl AC_FUNC_MMAP
130 dnl AC_FUNC_REALLOC
131 AC_TYPE_SIGNAL
132 AC_FUNC_STAT
133 AC_FUNC_STRFTIME
134 AC_CHECK_FUNCS([issetugid inet_pton])
136 if test -z "$PKG_CONFIG"; then
137   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
140 dnl checking for libev
141 AC_MSG_CHECKING(for libev support)
142 AC_ARG_WITH(libev,
143     AC_HELP_STRING([--with-libev@<:@=PATH@:>@],[Include libev support for fdevent handlers in PATH/include and PATH/lib]),
144     [WITH_LIBEV=$withval],[WITH_LIBEV=no])
146 LIBEV_CFLAGS=""
147 LIBEV_LIBS=""
149 if test "$WITH_LIBEV" != "no"; then
150         PKG_CHECK_MODULES(LIBEV, libev, [], [
151                 dnl no pkg-config for libev, searching manually:
153                 if test "$WITH_LIBEV" != "yes"; then
154                         LIBEV_CFLAGS="-I$WITH_LIBEV/include"
155                         LIBEV_LIBS="-L$WITH_LIBEV/lib -lev"
156                 else
157                         AC_CHECK_HEADERS([ev.h],[
158                                 AC_CHECK_LIB([ev], [ev_time], [
159                                                 LIBEV_CFLAGS=""
160                                                 LIBEV_LIBS="-lev"
161                                         ],[
162                                         AC_MSG_ERROR([libev not found])
163                                         ]
164                                 )],[
165                                         AC_MSG_ERROR([libev not found])
166                                 ]
167                         )
168                 fi
169         ])
171         AC_DEFINE([HAVE_LIBEV], [1], [libev support])
174 AC_SUBST(LIBEV_CFLAGS)
175 AC_SUBST(LIBEV_LIBS)
177 dnl Checks for database.
178 MYSQL_INCLUDE=""
179 MYSQL_LIBS=""
181 AC_MSG_CHECKING(for MySQL support)
182 AC_ARG_WITH(mysql,
183     AC_HELP_STRING([--with-mysql@<:@=PATH@:>@],[Include MySQL support. PATH is the path to 'mysql_config']),
184     [WITH_MYSQL=$withval],[WITH_MYSQL=no])
186 if test "$WITH_MYSQL" != "no"; then
187   AC_MSG_RESULT(yes)
188   if test "$WITH_MYSQL" = "yes"; then
189     AC_PATH_PROG(MYSQL_CONFIG, mysql_config)
190   else
191     MYSQL_CONFIG=$WITH_MYSQL
192   fi
194   if test "$MYSQL_CONFIG" = ""; then
195     AC_MSG_ERROR(mysql_config is not found)
196   fi
197   if test \! -x $MYSQL_CONFIG; then
198     AC_MSG_ERROR(mysql_config not exists or not executable, use --with-mysql=path-to-mysql_config)
199   fi
201   if $MYSQL_CONFIG | grep -- '--include' > /dev/null ; then
202     MYSQL_INCLUDE="`$MYSQL_CONFIG --include | sed s/\'//g`"
203   else
204     MYSQL_INCLUDE="`$MYSQL_CONFIG --cflags | sed s/\'//g`"
205   fi
206   MYSQL_LIBS="`$MYSQL_CONFIG --libs | sed s/\'//g`"
208   AC_MSG_CHECKING(for MySQL includes at)
209   AC_MSG_RESULT($MYSQL_INCLUDE)
211   AC_MSG_CHECKING(for MySQL libraries at)
212   AC_MSG_RESULT($MYSQL_LIBS)
213 dnl check for errmsg.h, which isn't installed by some versions of 3.21
214   old_CPPFLAGS="$CPPFLAGS"
215   CPPFLAGS="$CPPFLAGS $MYSQL_INCLUDE"
216   AC_CHECK_HEADERS(errmsg.h mysql.h)
217   CPPFLAGS="$old_CPPFLAGS"
219   AC_DEFINE([HAVE_MYSQL], [1], [mysql support])
220 else
221   AC_MSG_RESULT(no)
224 AC_SUBST(MYSQL_LIBS)
225 AC_SUBST(MYSQL_INCLUDE)
227 dnl Check for LDAP
228 AC_MSG_CHECKING(for LDAP support)
229 AC_ARG_WITH(ldap, AC_HELP_STRING([--with-ldap],[enable LDAP support]),
230 [WITH_LDAP=$withval], [WITH_LDAP=no])
231 AC_MSG_RESULT([$withval])
232 if test "$WITH_LDAP" != "no"; then
233  AC_CHECK_LIB(ldap, ldap_bind, [
234   AC_CHECK_HEADERS([ldap.h],[
235     LDAP_LIB=-lldap
236     AC_DEFINE([HAVE_LIBLDAP], [1], [libldap])
237     AC_DEFINE([HAVE_LDAP_H], [1])
238     AC_DEFINE([LDAP_DEPRECATED], [1], [Using deprecated ldap api])
239   ])
240  ])
241  AC_SUBST(LDAP_LIB)
242  AC_CHECK_LIB(lber, ber_printf, [
243   AC_CHECK_HEADERS([lber.h],[
244     LBER_LIB=-llber
245     AC_DEFINE([HAVE_LIBLBER], [1], [liblber])
246     AC_DEFINE([HAVE_LBER_H], [1])
247   ])
248  ])
249  AC_SUBST(LBER_LIB)
252 dnl Check for xattr
253 AC_MSG_CHECKING(for extended attributes support)
254 AC_ARG_WITH(attr, AC_HELP_STRING([--with-attr],[enable extended attribute support]),
255 [WITH_ATTR=$withval],[WITH_ATTR=no])
256 AC_MSG_RESULT($withval)
257 if test "$WITH_ATTR" != "no"; then
258   # libattr (linux only?)
259   AC_CHECK_LIB(attr, attr_get, [
260     AC_CHECK_HEADERS([attr/attributes.h],[
261       ATTR_LIB=-lattr
262       AC_DEFINE([HAVE_XATTR], [1], [libattr])
263       AC_DEFINE([HAVE_ATTR_ATTRIBUTES_H], [1])
264     ])
265   ])
266   AC_SUBST(ATTR_LIB)
268   # (Free)BSD extattr
269   AC_CHECK_FUNC([extattr_get_file], [
270     AC_CHECK_HEADERS([sys/extattr.h],[
271       AC_DEFINE([HAVE_EXTATTR], [1], [BSD extended attributes])
272       AC_DEFINE([HAVE_SYS_EXTATTR_H], [1])
273     ])
274   ])
277 dnl openssl on solaris needs -lsocket -lnsl
278 AC_SEARCH_LIBS(socket,socket)
279 AC_SEARCH_LIBS(gethostbyname,nsl socket)
280 AC_SEARCH_LIBS(hstrerror,resolv)
282 save_LIBS=$LIBS
283 AC_SEARCH_LIBS(dlopen,dl,[
284   AC_CHECK_HEADERS([dlfcn.h],[
285     if test "$ac_cv_search_dlopen" != no; then
286       test "$ac_cv_search_dlopen" = "none required" || DL_LIB="$ac_cv_search_dlopen"
287     fi
289     AC_DEFINE([HAVE_LIBDL], [1], [libdl])
290     AC_DEFINE([HAVE_DLFCN_H], [1])
291   ])
293 LIBS=$save_LIBS
294 AC_SUBST(DL_LIB)
296 dnl Check for valgrind
297 AC_MSG_CHECKING(for valgrind)
298 AC_ARG_WITH(valgrind, AC_HELP_STRING([--with-valgrind],[enable internal support for valgrind]),
299 [WITH_VALGRIND=$withval],[WITH_VALGRIND=no])
300 AC_MSG_RESULT([$WITH_VALGRIND])
301 if test "$WITH_VALGRIND" != "no"; then
302  AC_CHECK_HEADERS([valgrind/valgrind.h])
305 dnl Checking for libunwind
306 AC_MSG_CHECKING(for libunwind)
307 AC_ARG_WITH(libunwind,
308     AC_HELP_STRING([--with-libunwind],[Include libunwind support for backtraces on assert failures]),
309     [WITH_LIBUNWIND=$withval],[WITH_LIBUNWIND=no])
311 if test "$WITH_LIBUNWIND" != "no"; then
312   PKG_CHECK_MODULES(LIBUNWIND, libunwind)
313   AC_DEFINE(HAVE_LIBUNWIND, 1, [Have libunwind support])
316 dnl Check for openssl
317 AC_MSG_CHECKING(for OpenSSL)
318 AC_ARG_WITH(openssl,
319     AC_HELP_STRING([--with-openssl@<:@=DIR@:>@],[Include openssl support (default no)]),
320     [WITH_OPENSSL=$withval],[WITH_OPENSSL=no])
322 if test "$WITH_OPENSSL" != "no"; then
323     use_openssl=yes
324     if test "$WITH_OPENSSL" != "yes"; then
325         CPPFLAGS="$CPPFLAGS -I$WITH_OPENSSL/include"
326         LDFLAGS="$LDFLAGS -L$WITH_OPENSSL/lib"
327     fi
328 else
329     use_openssl=no
331 AC_MSG_RESULT([$use_openssl])
333 AC_ARG_WITH(openssl-includes,
334     AC_HELP_STRING([--with-openssl-includes=DIR],[OpenSSL includes]),
335     [ use_openssl=yes CPPFLAGS="$CPPFLAGS -I$withval" ]
338 AC_ARG_WITH(openssl-libs,
339     AC_HELP_STRING([--with-openssl-libs=DIR],[OpenSSL libraries]),
340     [ use_openssl=yes LDFLAGS="$LDFLAGS -L$withval" ]
343 AC_ARG_WITH(kerberos5,
344     AC_HELP_STRING([--with-kerberos5],[use Kerberos5 support with OpenSSL]),
345     [ use_kerberos=yes ], [use_kerberos=no]
348 if test "x$use_openssl" = "xyes"; then
349     if test "x$use_kerberos" != "xyes"; then
350         CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
351     fi
353     AC_CHECK_HEADERS([openssl/ssl.h])
354     OLDLIBS="$LIBS"
355     AC_CHECK_LIB(crypto, BIO_f_base64, [
356       AC_CHECK_LIB(ssl, SSL_new, [ SSL_LIB="-lssl -lcrypto"
357                                  AC_DEFINE(HAVE_LIBSSL, [], [Have libssl]) ], [], [ -lcrypto "$DL_LIB" ])
358     ], [], [])
359     LIBS="$OLDLIBS"
360     AC_SUBST(SSL_LIB)
363 AC_MSG_CHECKING(for perl regular expressions support)
364 AC_ARG_WITH(pcre, AC_HELP_STRING([--with-pcre],[Enable pcre support (default yes)]),
365     [WITH_PCRE=$withval],[WITH_PCRE=yes])
366 AC_MSG_RESULT([$WITH_PCRE])
368 if test "$WITH_PCRE" != "no"; then
369   AC_PATH_PROG(PCRECONFIG, pcre-config)
371   if test x"$PCRECONFIG" != x; then
372     PCRE_LIB=`$PCRECONFIG --libs`
373     CPPFLAGS="$CPPFLAGS `$PCRECONFIG --cflags`"
374     AC_DEFINE([HAVE_LIBPCRE], [1], [libpcre])
375     AC_DEFINE([HAVE_PCRE_H], [1], [pcre.h])
376   else
377      AC_MSG_ERROR([pcre-config not found, install the pcre-devel package or build with --without-pcre])
378   fi
381 AC_SUBST(PCRE_LIB)
383 AC_MSG_CHECKING(for zlib support)
384 AC_ARG_WITH(zlib, AC_HELP_STRING([--with-zlib],[Enable zlib support for mod_compress]),
385     [WITH_ZLIB=$withval],[WITH_ZLIB=yes])
386 AC_MSG_RESULT([$WITH_ZLIB])
388 if test "$WITH_ZLIB" != "no"; then
389   AC_CHECK_LIB(z, deflate, [
390     AC_CHECK_HEADERS([zlib.h],[
391       Z_LIB=-lz
392       AC_DEFINE([HAVE_LIBZ], [1], [libz])
393       AC_DEFINE([HAVE_ZLIB_H], [1])
394     ])
395   ])
396   if test x$Z_LIB = x; then
397      AC_MSG_ERROR([zlib-headers and/or libs where not found, install them or build with --without-zlib])
398   fi
400 AC_SUBST(Z_LIB)
402 AC_MSG_CHECKING(for bzip2 support)
403 AC_ARG_WITH(bzip2, AC_HELP_STRING([--with-bzip2],[Enable bzip2 support for mod_compress]),
404     [WITH_BZIP2=$withval],[WITH_BZIP2=yes])
405 AC_MSG_RESULT([$WITH_BZIP2])
407 if test "$WITH_BZIP2" != "no"; then
408   AC_CHECK_LIB(bz2, BZ2_bzCompress, [
409     AC_CHECK_HEADERS([bzlib.h],[
410       BZ_LIB=-lbz2
411       AC_DEFINE([HAVE_LIBBZ2], [1], [libbz2])
412       AC_DEFINE([HAVE_BZLIB_H], [1])
413     ])
414   ])
415   if test x$BZ_LIB = x; then
416      AC_MSG_ERROR([bzip2-headers and/or libs where not found, install them or build with --without-bzip2])
417   fi
419 AC_SUBST(BZ_LIB)
421 dnl Check for gamin
422 AC_MSG_CHECKING(for FAM)
423 AC_ARG_WITH(fam, AC_HELP_STRING([--with-fam],[fam/gamin for reducing number of stat() calls]),
424 [WITH_FAM=$withval],[WITH_FAM=no])
425 AC_MSG_RESULT([$WITH_FAM])
427 if test "$WITH_FAM" != "no"; then
428   AC_CHECK_LIB(fam, FAMOpen2, [
429     AC_CHECK_HEADERS([fam.h],[
430       FAM_LIBS=-lfam
431       AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
432       AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
433     ])
434   ])
435   if test "x$FAM_LIBS" = x; then
436     PKG_CHECK_MODULES(FAM, gamin >= 0.1.0, [
437       AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
438       AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
439     ])
440   fi
441   OLD_LIBS=$LIBS
442   LIBS=$FAM_LIBS
443   AC_CHECK_FUNCS([FAMNoExists])
444   LIBS=$OLD_LIBS
446   if test x$FAM_LIBS = x; then
447      AC_MSG_ERROR([fam/gamin-headers and/or libs where not found, install them or build with --without-fam])
448   fi
451 AC_MSG_CHECKING(for properties in mod_webdav)
452 AC_ARG_WITH(webdav-props, AC_HELP_STRING([--with-webdav-props],[properties in mod_webdav]),
453 [WITH_WEBDAV_PROPS=$withval],[WITH_WEBDAV_PROPS=no])
454 AC_MSG_RESULT([$WITH_WEBDAV_PROPS])
456 if test "$WITH_WEBDAV_PROPS" != "no"; then
457   PKG_CHECK_MODULES(XML, libxml-2.0, [
458     AC_DEFINE([HAVE_LIBXML2], [1], [libxml2])
459     AC_DEFINE([HAVE_LIBXML_H], [1], [libxml.h])
460   ])
461   PKG_CHECK_MODULES(SQLITE, sqlite3, [
462     AC_DEFINE([HAVE_SQLITE3], [1], [libsqlite3])
463     AC_DEFINE([HAVE_SQLITE3_H], [1], [sqlite3.h])
464   ])
466   AC_MSG_CHECKING(for locks in mod_webdav)
467   AC_ARG_WITH(webdav-locks, AC_HELP_STRING([--with-webdav-locks],[locks in mod_webdav]),
468   [WITH_WEBDAV_LOCKS=$withval],[WITH_WEBDAV_LOCKS=no])
469   AC_MSG_RESULT([$WITH_WEBDAV_LOCKS])
471   if test "$WITH_WEBDAV_LOCKS" != "no"; then
472     AC_CHECK_LIB(uuid, uuid_unparse, [
473       AC_CHECK_HEADERS([uuid/uuid.h],[
474         UUID_LIBS=-luuid
475         AC_DEFINE([HAVE_UUID], [1], [libuuid])
476         AC_DEFINE([HAVE_UUID_H], [1], [uuid/uuid.h is available])
477       ])
478     ])
479   fi
481 AC_SUBST(UUID_LIBS)
483 dnl Check for gdbm
484 AC_MSG_CHECKING(for gdbm)
485 AC_ARG_WITH(gdbm, AC_HELP_STRING([--with-gdbm],[gdbm storage for mod_trigger_b4_dl]),
486 [WITH_GDBM=$withval],[WITH_GDBM=no])
487 AC_MSG_RESULT([$WITH_GDBM])
489 if test "$WITH_GDBM" != "no"; then
490  AC_CHECK_LIB(gdbm, gdbm_open, [
491          AC_CHECK_HEADERS([gdbm.h],[
492                  GDBM_LIB=-lgdbm
493                  AC_DEFINE([HAVE_GDBM], [1], [libgdbm])
494                  AC_DEFINE([HAVE_GDBM_H], [1])
495          ])
496  ])
497  AC_SUBST(GDBM_LIB)
500 dnl Check for memcached
501 AC_MSG_CHECKING(for memcached)
502 AC_ARG_WITH(memcached, AC_HELP_STRING([--with-memcached],[memcached storage for mod_trigger_b4_dl]),
503 [WITH_MEMCACHED=$withval],[WITH_MEMCACHED=no])
504 AC_MSG_RESULT([$WITH_MEMCACHED])
505 if test "$WITH_MEMCACHED" != "no"; then
506   AC_CHECK_LIB(memcached, memcached, [
507     AC_CHECK_HEADERS([libmemcached/memcached.h],[
508       MEMCACHED_LIB=-lmemcached
509       AC_DEFINE([USE_MEMCACHED], [1], [libmemcached])
510     ])
511   ])
512   AC_SUBST(MEMCACHED_LIB)
515 dnl Check for lua
516 AC_MSG_CHECKING(if lua-support is requested)
517 AC_ARG_WITH(lua, AC_HELP_STRING([--with-lua],[lua engine for mod_cml]),
518 [WITH_LUA=$withval],[WITH_LUA=no])
520 AC_MSG_RESULT($WITH_LUA)
521 if test "$WITH_LUA" != "no"; then
522   if test "$WITH_LUA" != "yes"; then
523     PKG_CHECK_MODULES(LUA, $WITH_LUA >= 5.1, [
524       AC_DEFINE([HAVE_LUA], [1], [liblua])
525       AC_DEFINE([HAVE_LUA_H], [1], [lua.h])
526     ],[
527       AC_MSG_ERROR([Couldn't find requested lua pkg-config module $WITH_LUA])
528     ])
529   else
530     found_lua=0
531     for luaname in lua5.3 lua-5.3 lua5.2 lua-5.2 lua5.1 lua-5.1 lua; do
532       if test "$found_lua" = "0"; then
533         PKG_CHECK_MODULES(LUA, $luaname >= 5.1, [
534           AC_DEFINE([HAVE_LUA], [1], [liblua])
535           AC_DEFINE([HAVE_LUA_H], [1], [lua.h])
536           found_lua=1
537         ], [
538           AC_MSG_NOTICE([Couldn't find $luaname])
539         ])
540       fi
541     done
542     if test "$found_lua" = "0"; then
543       AC_MSG_ERROR([Couldn't find any lua pkg-config module])
544     fi
545   fi
547   AC_SUBST(LUA_CFLAGS)
548   AC_SUBST(LUA_LIBS)
551 dnl search for crypt_r and (fallback) for crypt
552 save_LIBS=$LIBS
553 LIBS=
554 AC_SEARCH_LIBS([crypt_r],[crypt],[
555   AC_DEFINE([HAVE_CRYPT_R], [1], [crypt_r])
556   AC_CHECK_HEADERS([crypt.h],[
557     AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h])
558   ])
560   CRYPT_LIB=$LIBS
562   AC_SEARCH_LIBS([crypt],[crypt],[
563     AC_DEFINE([HAVE_CRYPT], [1], [crypt])
564     AC_CHECK_HEADERS([crypt.h],[
565       AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h])
566     ])
568     CRYPT_LIB=$LIBS
569   ])
571 LIBS=$save_LIBS
572 AC_SUBST([CRYPT_LIB])
574 save_LIBS=$LIBS
575 AC_SEARCH_LIBS(sendfilev,sendfile,[
576   if test "$ac_cv_search_sendfilev" != no; then
577     test "$ac_cv_search_sendfilev" = "none required" || SENDFILE_LIB="$ac_cv_search_sendfilev"
578     AC_DEFINE([HAVE_SENDFILEV], [1], [solaris sendfilev])
579   fi
581 LIBS=$save_LIBS
582 AC_SUBST(SENDFILE_LIB)
584 case $host_os in
585         *mingw* ) LIBS="$LIBS -lwsock32";;
586         * ) ;;
587 esac
589 AC_CHECK_FUNCS([dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
590                   strdup strerror strstr strtol sendfile  getopt socket lstat \
591                   gethostbyname poll epoll_ctl getrlimit chroot \
592                   getuid select signal pathconf madvise posix_fadvise posix_madvise \
593                   writev sigaction sendfile64 send_file kqueue port_create localtime_r gmtime_r \
594                   memset_s explicit_bzero])
596 AC_MSG_CHECKING(if weak symbols are supported)
597 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
598                 __attribute__((weak)) void __dummy(void *x) { }
599                 void f(void *x) { __dummy(x); }
600         ]])],
601         [
602                 AC_MSG_RESULT(yes)
603                 AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [weak symbols are supported])
604         ],[AC_MSG_RESULT(no)])
606 AC_MSG_CHECKING(for Large File System support)
607 AC_ARG_ENABLE(lfs,
608  AC_HELP_STRING([--enable-lfs],[Turn on Large File System (default)]),
609  [case "${enableval}" in
610    yes) CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES" ;;
611     no) ;;
612      *) AC_MSG_ERROR(bad value ${enableval} for --enable-lfs) ;;
613   esac],[CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES"
614          enable_lfs=yes])
615 AC_MSG_RESULT($enableval)
617 AC_CHECK_SIZEOF(long)
618 AC_CHECK_SIZEOF(off_t)
620 if test "x$ac_cv_func_sendfile" = xyes; then
621         dnl check if sendfile works
622         AC_MSG_CHECKING(if sendfile works)
623         if test "x$cross_compiling" = xno; then
624         AC_TRY_RUN([
625                     #ifdef HAVE_SYS_SENDFILE_H
626                     #include <sys/sendfile.h>
627                     #endif /* HAVE_SYS_SENDFILE_H */
628                     #include <errno.h>
629                     int main() {
630                       int o = 0;
631                       if (-1 == sendfile(-1, 0, &o, 0) && errno == ENOSYS) return -1;
632                       return 0;
633                     } ],
634                     AC_MSG_RESULT(yes),
635                     [ AC_MSG_RESULT(no)
636                     AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile]) ] )
637         else
638               AC_MSG_RESULT(no, cross-compiling)
639               AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])
640         fi
643 dnl Check for IPv6 support
645 AC_ARG_ENABLE(ipv6,
646  AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
647  [case "${enableval}" in
648    yes) ipv6=true ;;
649     no) ipv6=false ;;
650      *) AC_MSG_ERROR(bad value ${enableval} for --enable-ipv6) ;;
651   esac],[ipv6=true])
653 if test x$ipv6 = xtrue; then
654   AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
655   [AC_TRY_LINK([ #include <sys/types.h>
656 #include <sys/socket.h>
657 #include <netinet/in.h>], [struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; ],
658   [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
660   if test "$ac_cv_ipv6_support" = yes; then
661     AC_DEFINE(HAVE_IPV6,1,[Whether to enable IPv6 support])
662   fi
665 # disable mmap by default; if a mmapped file gets truncated, the process gets a SIGBUS signal
666 # on reading the truncated area which we can't handle (yet).
667 # lighttpd may always use mmap with files it owns (created tmp files)
668 AC_ARG_ENABLE(mmap,
669   AC_HELP_STRING([--enable-mmap],[use mmap if available (DANGEROUS, allows local users to trigger SIGBUS crashes)]),
670   [case "${enableval}" in
671    yes) mmap=true ;;
672     no) mmap=false ;;
673      *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmap) ;;
674   esac],[mmap=false])
676 if test x$mmap = xtrue; then
677   AC_DEFINE(ENABLE_MMAP, [1], [Use mmap if available])
681 AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
683 dnl check for fastcgi lib, for the tests only
684 fastcgi_found=no
685 AC_CHECK_LIB(fcgi, FCGI_Accept, [
686  AC_CHECK_HEADERS([fastcgi.h fastcgi/fastcgi.h],[
687    fastcgi_found=yes
688  ])
691 AM_CONDITIONAL(CHECK_WITH_FASTCGI, test "x$fastcgi_found" = xyes)
694 dnl check for extra compiler options (warning options)
695 if test "${GCC}" = "yes"; then
696   TRY_CFLAGS([-Wall -W -Wshadow -pedantic])
697   TRY_CFLAGS([-std=gnu99])
700 AC_ARG_ENABLE(extra-warnings,
701  AC_HELP_STRING([--enable-extra-warnings],[enable extra warnings (gcc specific)]),
702  [case "${enableval}" in
703    yes) extrawarnings=true ;;
704     no) extrawarnings=false ;;
705      *) AC_MSG_ERROR(bad value ${enableval} for --enable-extra-warnings) ;;
706   esac],[extrawarnings=false])
708 if test x$extrawarnings = xtrue; then
709   TRY_CFLAGS([-g -O2 -g2 -Wall -Wmissing-declarations -Wdeclaration-after-statement -Wcast-align -Wsign-compare -Wnested-externs -Wpointer-arith -D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security])
710   TRY_LDFLAGS([-Wl,--as-needed])
713 dnl build version-id
714 LIGHTTPD_VERSION_ID=`echo $PACKAGE_VERSION | $AWK -F '.' '{print "(" $1 " << 16 | " $2 " << 8 | " $3 ")"}'`
715 AC_DEFINE_UNQUOTED([LIGHTTPD_VERSION_ID], [$LIGHTTPD_VERSION_ID], [lighttpd-version-id])
717 AC_CONFIG_FILES([Makefile src/Makefile
718                  doc/config/conf.d/Makefile \
719                  doc/config/vhosts.d/Makefile \
720                  doc/config/Makefile \
721                  doc/scripts/Makefile \
722                  doc/initscripts/Makefile \
723                  doc/systemd/Makefile \
724                  doc/outdated/Makefile \
725                  doc/Makefile \
726                  tests/Makefile \
727                  tests/docroot/Makefile \
728                  tests/docroot/123/Makefile \
729                  tests/docroot/www/Makefile \
730                  tests/docroot/www/go/Makefile \
731                  tests/docroot/www/indexfile/Makefile \
732                  tests/docroot/www/expire/Makefile \
733                  distribute.sh])
734 AC_OUTPUT
737 do_build="mod_cgi mod_fastcgi mod_extforward mod_proxy mod_evhost mod_simple_vhost mod_access mod_alias mod_setenv mod_usertrack mod_auth mod_status mod_accesslog"
738 do_build="$do_build mod_rrdtool mod_secdownload mod_expire mod_compress mod_dirlisting mod_indexfile mod_userdir mod_webdav mod_staticfile mod_scgi mod_flv_streaming"
740 plugins="mod_rewrite mod_redirect mod_ssi mod_trigger_b4_dl"
741 features="regex-conditionals"
742 if test ! "x$PCRE_LIB" = x; then
743         do_build="$do_build $plugins"
744         enable_feature="$features"
745 else
746         no_build="$no_build $plugins"
747         disable_feature="$features"
750 plugins="mod_mysql_vhost"
751 if test ! "x$MYSQL_LIBS" = x; then
752         do_build="$do_build $plugins"
753 else
754         no_build="$no_build $plugins"
757 plugins="mod_cml mod_magnet"
758 if test ! "x$LUA_LIBS" = x; then
759         do_build="$do_build $plugins"
760 else
761         no_build="$no_build $plugins"
764 features="storage-gdbm"
765 if test ! "x$GDBM_LIB" = x; then
766         enable_feature="$enable_feature $features"
767 else
768         disable_feature="$disable_feature $features"
771 features="storage-memcached"
772 if test ! "x$MEMCACHED_LIB" = x; then
773         enable_feature="$enable_feature $features"
774 else
775         disable_feature="$disable_feature $features"
778 features="compress-gzip compress-deflate"
779 if test ! "x$Z_LIB" = x; then
780         enable_feature="$enable_feature $features"
781 else
782         disable_feature="$disable_feature $features"
785 features="compress-bzip2"
786 if test ! "x$BZ_LIB" = x; then
787         enable_feature="$enable_feature $features"
788 else
789         disable_feature="$disable_feature $features"
792 features="auth-ldap"
793 if test ! "x$LDAP_LIB" = x; then
794         enable_feature="$enable_feature $features"
795 else
796         disable_feature="$disable_feature $features"
799 features="network-openssl"
800 if test ! "x$SSL_LIB" = x; then
801         enable_feature="$enable_feature $features"
802 else
803         disable_feature="$disable_feature $features"
806 dnl no crypt call
807 features="auth-crypt"
808 if test "$ac_cv_search_crypt" = no; then
809         disable_feature="$disable_feature $features"
810 else
811         enable_feature="$enable_feature $features"
814 features="network-ipv6"
815 if test "$ac_cv_ipv6_support" = yes; then
816         enable_feature="$enable_feature $features"
817 else
818         disable_feature="$disable_feature $features"
821 features="large-files"
822 if test "$enable_lfs" = yes; then
823         enable_feature="$enable_feature $features"
824 else
825         disable_feature="$disable_feature $features"
828 features="stat-cache-fam"
829 if test ! "x$FAM_LIBS" = x; then
830         enable_feature="$enable_feature $features"
831 else
832         disable_feature="$disable_feature $features"
835 features="webdav-properties"
836 if test "x$XML_LIBS" \!= x -a "x$SQLITE_LIBS" \!= x; then
837         enable_feature="$enable_feature $features"
838 else
839         disable_feature="$disable_feature $features"
842 features="webdav-locks"
843 if test "x$UUID_LIBS" \!= x; then
844         enable_feature="$enable_feature $features"
845 else
846         disable_feature="$disable_feature $features"
850 dnl output
852 $ECHO
853 $ECHO "Plugins:"
854 $ECHO
856 $ECHO "enabled: "
857 for p in $do_build; do
858         $ECHO "  $p"
859 done | sort
861 $ECHO "disabled: "
862 for p in $no_build; do
863         $ECHO "  $p"
864 done | sort
866 $ECHO
867 $ECHO "Features:"
868 $ECHO
870 $ECHO "enabled: "
871 for p in $enable_feature; do
872         $ECHO "  $p"
873 done | sort
875 $ECHO "disabled: "
876 for p in $disable_feature; do
877         $ECHO "  $p"
878 done | sort
880 $ECHO