# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([lighttpd],[2.0.0],[],[],[https://redmine.lighttpd.net/projects/lighttpd2/wiki]) AC_CONFIG_SRCDIR([src/main/lighttpd_worker.c]) AC_CONFIG_HEADERS([include/lighttpd/config.h]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([-Wall -Wno-portability -Wno-override -Werror foreign dist-bzip2 tar-ustar] serial-tests) m4_include([build-helpers/glibtests.m4]) GLIB_TESTS dnl check environment AC_USE_SYSTEM_EXTENSIONS # Checks for programs. AC_PROG_CC AC_PROG_MAKE_SET AC_PROG_INSTALL # AC_PROG_RANLIB AM_PROG_AR AC_PATH_PROG([RAGEL], [ragel]) if test "x$RAGEL" = "x"; then AC_MSG_ERROR([ragel not found]) fi AC_SUBST([RAGEL]) m4_ifndef([PKG_PROG_PKG_CONFIG], [m4_fatal([pkg-config not installed])]) m4_ifndef([LT_INIT], [m4_fatal([libtool not installed])]) LT_INIT([shared disable-static]) # Checks for header files. AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([ \ unistd.h \ stddef.h \ sys/mman.h \ sys/resource.h \ sys/sendfile.h \ sys/types.h \ sys/uio.h \ sys/un.h \ execinfo.h \ ]) # pkglibdir AC_ARG_WITH( [pkglibdir], AS_HELP_STRING([--with-pkglibdir=dir], [specify directory for driver files (default LIBDIR/lighttpd-VERSION]), [pkglibdir=$withval], [pkglibdir=$libdir/lighttpd-$PACKAGE_VERSION]) AC_SUBST(pkglibdir) # libexecdir libexecdir=$libexecdir/lighttpd2 AC_SUBST([libexecdir]) # Checks for libraries. # glib/gthread (gthread includes glib) PKG_CHECK_MODULES([GTHREAD], [gthread-2.0 >= 2.16.0], [],[AC_MSG_ERROR("gthread-2.0 >= 2.16.0 not found")]) # gmodule PKG_CHECK_MODULES([GMODULE], [gmodule-2.0 >= 2.16.0], [],[AC_MSG_ERROR("gmodule-2.0 >= 2.16.0 not found")]) AC_MSG_CHECKING([for libev support]) AC_ARG_WITH([libev], [AS_HELP_STRING([--with-libev@<:@=PATH@:>@],[Search for libev in PATH/include and PATH/lib])], [WITH_LIBEV=$withval],[WITH_LIBEV=yes]) LIBEV_CFLAGS="" LIBEV_LIBS="" PKG_CHECK_MODULES([LIBEV], [libev], [], [ # no pkg-config for libev, searching manually: if test "$WITH_LIBEV" != "yes"; then LIBEV_CFLAGS="-I$WITH_LIBEV/include" LIBEV_LIBS="-L$WITH_LIBEV/lib -lev" else AC_CHECK_HEADERS([ev.h],[ AC_CHECK_LIB([ev], [ev_time], [ LIBEV_LIBS="-lev" ],[ AC_MSG_ERROR([libev not found]) ] )],[ AC_MSG_ERROR([libev not found]) ] ) fi ]) AC_SUBST([LIBEV_CFLAGS]) AC_SUBST([LIBEV_LIBS]) dnl Large File Support AC_ARG_ENABLE([lfs], [AS_HELP_STRING([--disable-lfs],[disable large file support])], [case "${enableval}" in yes) lfs=true ;; no) lfs=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-lfs]) ;; esac],[lfs=true]) if test x$lfs = xtrue; then CFLAGS="${CFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES" fi dnl Check for gnutls AC_ARG_WITH([gnutls], [AS_HELP_STRING([--with-gnutls],[gnutls library for ssl/tls (default)])], [WITH_GNUTLS=$withval],[WITH_GNUTLS=yes]) if test "$WITH_GNUTLS" != "no"; then PKG_CHECK_MODULES([GNUTLS], [gnutls],[],[ AC_MSG_ERROR([gnutls not found]) ]) AC_SUBST([GNUTLS_CFLAGS]) AC_SUBST([GNUTLS_LIBS]) USE_GNUTLS=true fi AM_CONDITIONAL([USE_GNUTLS], [test "$USE_GNUTLS" = "true"]) dnl Check for libidn, needed to decode SNI names AC_ARG_WITH([sni], [AS_HELP_STRING([--with-sni],[SNI support for gnutls/openssl, needs libidn (default)])], [WITH_SNI=$withval],[WITH_SNI=yes]) if test "$WITH_SNI" != "no"; then PKG_CHECK_MODULES([IDN], [libidn],[],[ AC_MSG_ERROR([libidn not found]) ]) AC_SUBST([IDN_CFLAGS]) AC_SUBST([IDN_LIBS]) AC_DEFINE([USE_SNI], [1], [use sni]) USE_SNI=true fi AM_CONDITIONAL([USE_SNI], [test "$USE_SNI" = "true"]) dnl Check for lua AC_MSG_CHECKING([for lua]) AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua],[lua engine (default)])], [WITH_LUA=$withval],[WITH_LUA=yes]) AC_MSG_RESULT([$WITH_LUA]) if test "$WITH_LUA" != "no"; then # try pkgconfig if test "$WITH_LUA" = "yes"; then LUAPC=lua else LUAPC=$WITH_LUA fi PKG_CHECK_MODULES([LUA], [$LUAPC >= 5.1], [ AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) ],[ # for debian based systems PKG_CHECK_MODULES([LUA], [lua5.1 >= 5.1], [ AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) ],[ # for freebsd PKG_CHECK_MODULES([LUA], [lua-5.1 >= 5.1], [ AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) ],[ AC_MSG_ERROR([lua not found]) ]) ]) ]) AC_SUBST([LUA_CFLAGS]) AC_SUBST([LUA_LIBS]) USE_LUA=true fi AM_CONDITIONAL([USE_LUA], [test "$USE_LUA" = "true"]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_UID_T AC_TYPE_PID_T AC_TYPE_SIZE_T ## solaris needs -lsocket -lnsl AC_SEARCH_LIBS([socket],[socket]) AC_SEARCH_LIBS([inet_addr],[nsl socket]) ## freebsd: kvm AC_SEARCH_LIBS([kvm_open],[kvm]) ## math functions AC_SEARCH_LIBS([fmod],[m]) # Checks for library functions. AC_CHECK_FUNCS([ \ chroot \ getrlimit \ gmtime_r \ inet_aton \ inet_ntop \ localtime_r \ madvise \ mmap \ posix_fadvise \ sendfile \ sendfile64 \ sendfilev \ writev \ accept4 \ ]) dnl Check for IPv6 support AC_ARG_ENABLE([ipv6], [AS_HELP_STRING([--disable-ipv6],[disable IPv6 support])], [case "${enableval}" in yes) ipv6=true ;; no) ipv6=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6]) ;; esac],[ipv6=true]) if test x$ipv6 = xtrue; then AC_CACHE_CHECK([for IPv6 support], [ac_cv_ipv6_support], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include #include #include ]], [[struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; ]])],[ac_cv_ipv6_support=yes],[ac_cv_ipv6_support=no])]) if test "$ac_cv_ipv6_support" = yes; then AC_DEFINE([HAVE_IPV6],[1],[Whether to enable IPv6 support]) else AC_MSG_ERROR([IPv6 not supported. Use --disable-ipv6 if this is acceptable.]) fi fi dnl Check for struct sockaddr_storage AC_CACHE_CHECK([for struct sockaddr_storage support], [ac_cv_sockaddr_storage_support], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[struct sockaddr_storage s; ]])],[ac_cv_sockaddr_storage_support=yes],[ac_cv_sockaddr_storage_support=no])]) if test "ac_cv_sockaddr_storage_support" = yes; then AC_DEFINE([HAVE_SOCKADDR_STORAGE],[1],[Whether we have struct sockaddr_storage]) fi dnl Checking for libunwind AC_MSG_CHECKING(for libunwind) AC_ARG_WITH(libunwind, AS_HELP_STRING([--with-libunwind],[Include libunwind support for backtraces on assert failures (default)]), [WITH_LIBUNWIND=$withval],[WITH_LIBUNWIND=yes]) if test "$WITH_LIBUNWIND" != "no"; then have_libunwind=no PKG_CHECK_MODULES(LIBUNWIND, libunwind, [have_libunwind=yes], [ # pkg-config failed, search manually OLDLIBS="$LIBS" LIBS="$LIBS -lunwind" AC_CACHE_CHECK([for libunwind support], [ac_cv_libunwind], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ # define UNW_LOCAL_ONLY # include ]], [[ unw_context_t context; unw_getcontext(&context); ]])],[ac_cv_libunwind=yes],[ac_cv_libunwind=no])]) LIBS="$OLDLIBS" if test "$ac_cv_libunwind" = yes; then LIBUNWIND_CFLAGS= LIBUNWIND_LIBS=-lunwind fi have_libunwind="$ac_cv_libunwind" ]) if test "$have_libunwind" = yes; then AC_DEFINE(HAVE_LIBUNWIND, 1, [Have libunwind support]) else AC_MSG_ERROR("couldn't find libunwind") fi AC_SUBST([LIBUNWIND_CFLAGS]) AC_SUBST([LIBUNWIND_LIBS]) fi dnl Check for openssl AC_MSG_CHECKING([for OpenSSL]) AC_ARG_WITH([openssl], AS_HELP_STRING([--with-openssl@<:@=DIR@:>@],[Include openssl support (default)]), [WITH_OPENSSL=$withval],[WITH_OPENSSL=yes]) OPENSSL_CFLAGS="" OPENSSL_LIBS="" if test "$WITH_OPENSSL" != "no"; then use_openssl=yes if test "$WITH_OPENSSL" != "yes"; then OPENSSL_CFLAGS="-I$WITH_OPENSSL/include" OPENSSL_LIBS="-L$WITH_OPENSSL/lib" fi else use_openssl=no fi AC_MSG_RESULT([$use_openssl]) AC_ARG_WITH([openssl-includes], [AS_HELP_STRING([--with-openssl-includes=DIR],[Custom OpenSSL include path])], [ use_openssl=yes OPENSSL_CFLAGS="-I$withval" ] ) AC_ARG_WITH([openssl-libs], [AS_HELP_STRING([--with-openssl-libs=DIR],[Custom OpenSSL library path])], [ use_openssl=yes OPENSSL_LIBS="-L$withval" ] ) AC_ARG_WITH([kerberos5], [AS_HELP_STRING([--with-kerberos5],[use Kerberos5 support with OpenSSL])], [ use_kerberos=$withval ], [use_kerberos=no] ) if test "$use_openssl" = "yes"; then if test "$use_kerberos" = "no"; then OPENSSL_CFLAGS="$OPENSSL_CFLAGS -DOPENSSL_NO_KRB5" fi OLD_LIBS="$LIBS" OLD_LDFLAGS="$LDFLAGS" OLD_CPPFLAGS="$CPPFLAGS" LDFLAGS="$LDFLAGS $OPENSSL_LIBS" CPPFLAGS="$CPPFLAGS $OPENSSL_CFLAGS" AC_CHECK_HEADERS([openssl/ssl.h]) AC_CHECK_LIB([crypto], [BIO_f_base64], [ AC_CHECK_LIB([ssl], [SSL_new], [ OPENSSL_LIBS="$OPENSSL_LIBS -lssl -lcrypto" have_openssl=yes AC_DEFINE([HAVE_OPENSSL], [], [Have openssl]) ], [], [ -lcrypto "$DL_LIB" ]) ], [], []) LIBS="$OLD_LIBS" LDFLAGS="$OLD_LDFLAGS" CPPFLAGS="$OLD_CPPFLAGS" if test "x$have_openssl" != "xyes"; then AC_MSG_ERROR([Couldn't find openssl]) fi AC_SUBST([OPENSSL_CFLAGS]) AC_SUBST([OPENSSL_LIBS]) fi AM_CONDITIONAL([USE_OPENSSL], [test "x$have_openssl" = "xyes"]) # mod-deflate: use_mod_deflate=no # check for zlib AC_MSG_CHECKING([for zlib support]) AC_ARG_WITH([zlib], [AS_HELP_STRING([--with-zlib],[Enable zlib support for mod_deflate (default)])], [WITH_ZLIB=$withval],[WITH_ZLIB=yes]) AC_MSG_RESULT([$WITH_ZLIB]) if test "$WITH_BZIP2" != "no"; then AC_CHECK_LIB([z], [deflate], [ AC_CHECK_HEADERS([zlib.h],[ Z_LIB=-lz use_mod_deflate=yes AC_DEFINE([HAVE_ZLIB], [1], [with zlib]) ]) ]) fi AC_SUBST([Z_LIB]) # check for bzip2 AC_MSG_CHECKING([for bzip2 support]) AC_ARG_WITH([bzip2], [AS_HELP_STRING([--with-bzip2],[Enable bzip2 support for mod_deflate (default)])], [WITH_BZIP2=$withval],[WITH_BZIP2=yes]) AC_MSG_RESULT([$WITH_BZIP2]) if test "$WITH_BZIP2" != "no"; then AC_CHECK_LIB([bz2], [BZ2_bzCompress], [ AC_CHECK_HEADERS([bzlib.h],[ BZ_LIB=-lbz2 use_mod_deflate=yes AC_DEFINE([HAVE_BZIP], [1], [with bzip2]) ]) ]) fi AC_SUBST([BZ_LIB]) AM_CONDITIONAL([USE_MOD_DEFLATE], [test "x$use_mod_deflate" = "xyes"]) AC_ARG_ENABLE([profiler], [AS_HELP_STRING([--enable-profiler],[enable memory profiler support])],[ profiler=yes AC_DEFINE([WITH_PROFILER], [1], [profiler]) AC_CHECK_HEADERS([execinfo.h]) ],[]) AM_CONDITIONAL([WITH_PROFILER], [test "x$profiler" = "xyes"]) dnl search for crypt_r and (fallback) for crypt save_LIBS=$LIBS LIBS= AC_SEARCH_LIBS([crypt_r],[crypt],[ AC_DEFINE([HAVE_CRYPT_R], [1], [crypt_r]) AC_CHECK_HEADERS([crypt.h],[ AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h]) ]) CRYPT_LIB=$LIBS ],[ AC_SEARCH_LIBS([crypt],[crypt],[ AC_CHECK_HEADERS([crypt.h],[ AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h]) ]) CRYPT_LIB=$LIBS ]) ]) LIBS=$save_LIBS AC_SUBST([CRYPT_LIB]) # check for extra compiler options (warning options) if test "${GCC}" = "yes"; then CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic -std=gnu99" fi AC_ARG_ENABLE([extra-warnings], [AS_HELP_STRING([--enable-extra-warnings],[enable extra warnings (gcc specific)])], [case "${enableval}" in yes) extrawarnings=true ;; no) extrawarnings=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-extra-warnings]) ;; esac],[extrawarnings=false]) if test x$extrawarnings = xtrue; then CFLAGS="${CFLAGS} -g -O2 -g2 -Wall -Wmissing-declarations -Wdeclaration-after-statement -Wcast-align -Wsign-compare -Wnested-externs -Wpointer-arith -Wmissing-prototypes -Wshadow -Wno-pointer-sign -Wformat-security -Wl,--as-needed -Wl,--no-undefined" fi AC_CONFIG_FILES([Makefile \ contrib/Makefile \ doc/Makefile \ include/Makefile \ include/lighttpd/Makefile \ src/Makefile \ src/common/Makefile \ src/main/Makefile \ src/angel/Makefile \ src/modules/Makefile \ src/unittests/Makefile \ src/lighttpd2.pc \ tests/Makefile \ ]) AC_OUTPUT