#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(lighttpd, 1.4.19, jan@kneschke.de)
AC_CONFIG_SRCDIR([src/server.c])

AC_CANONICAL_TARGET

AM_INIT_AUTOMAKE

AC_CONFIG_HEADER([config.h])

AM_MAINTAINER_MODE

# Checks for programs.
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_LD
AC_PROG_INSTALL
AC_PROG_AWK
AC_PROG_CPP
dnl AC_PROG_CXX
AC_PROG_LN_S
AC_PROG_MAKE_SET

dnl check environment
AC_AIX
AC_ISC_POSIX
AC_MINIX

dnl AC_CANONICAL_HOST
case $host_os in
	*darwin*|*cygwin*|*aix*|*mingw* ) NO_RDYNAMIC=yes;;
        * ) NO_RDYNAMIC=no;;
esac
AM_CONDITIONAL(NO_RDYNAMIC, test x$NO_RDYNAMIC = xyes)

AC_EXEEXT

dnl more automake stuff
AM_C_PROTOTYPES

dnl libtool
AC_DISABLE_STATIC
AC_ENABLE_SHARED

AC_LIBTOOL_DLOPEN
AC_PROG_LIBTOOL

dnl for solaris
CPPFLAGS="${CPPFLAGS} -D_REENTRANT -D__EXTENSIONS__"

# Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h \
sys/socket.h sys/time.h unistd.h sys/sendfile.h sys/uio.h \
getopt.h sys/epoll.h sys/select.h poll.h sys/poll.h sys/devpoll.h sys/filio.h \
sys/mman.h sys/event.h sys/port.h pwd.h sys/syslimits.h \
sys/resource.h sys/un.h syslog.h sys/prctl.h uuid/uuid.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_C_CHAR_UNSIGNED
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T

AC_CHECK_MEMBER(struct tm.tm_gmtoff,[AC_DEFINE([HAVE_STRUCT_TM_GMTOFF],[1],[gmtoff in struct tm])],,[#include <time.h>])
AC_CHECK_TYPES(struct sockaddr_storage,,,[#include <sys/socket.h>])
AC_CHECK_TYPES(socklen_t,,,[#include <sys/types.h>
#include <sys/socket.h>])

# Checks for library functions.
AC_FUNC_FORK
dnl AC_FUNC_MALLOC
#AC_FUNC_MMAP
dnl AC_FUNC_REALLOC
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_STRFTIME

dnl Checks for database.
MYSQL_INCLUDE=""
MYSQL_LIBS=""

AXIS2C_INCLUDE="/home/dinesh/axis2c/deploy/include/axis2-1.5.0"
AXIS2C_LIBS="/home/dinesh/axis2c/deploy/lib"
AC_SUBST(AXIS2C_LIBS)
AC_SUBST(AXIS2C_INCLUDE)

AC_MSG_CHECKING(for MySQL support)
AC_ARG_WITH(mysql,
    AC_HELP_STRING([--with-mysql@<:@=PATH@:>@],[Include MySQL support. PATH is the path to 'mysql_config']),
    [WITH_MYSQL=$withval],[WITH_MYSQL=no])

if test "$WITH_MYSQL" != "no"; then
  AC_MSG_RESULT(yes)
  if test "$WITH_MYSQL" = "yes"; then
    AC_PATH_PROG(MYSQL_CONFIG, mysql_config)
  else
    MYSQL_CONFIG=$WITH_MYSQL
  fi

  if test "$MYSQL_CONFIG" = ""; then
    AC_MSG_ERROR(mysql_config is not found)
  fi
  if test \! -x $MYSQL_CONFIG; then
    AC_MSG_ERROR(mysql_config not exists or not executable, use --with-mysql=path-to-mysql_config)
  fi

  if $MYSQL_CONFIG | grep -- '--include' > /dev/null ; then
    MYSQL_INCLUDE="`$MYSQL_CONFIG --include | sed s/\'//g`"
  else
    MYSQL_INCLUDE="`$MYSQL_CONFIG --cflags | sed s/\'//g`"
  fi
  MYSQL_LIBS="`$MYSQL_CONFIG --libs | sed s/\'//g`"

  AC_MSG_CHECKING(for MySQL includes at)
  AC_MSG_RESULT($MYSQL_INCLUDE)

  AC_MSG_CHECKING(for MySQL libraries at)
  AC_MSG_RESULT($MYSQL_LIBS)
dnl check for errmsg.h, which isn't installed by some versions of 3.21
  old_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$CPPFLAGS $MYSQL_INCLUDE"
  AC_CHECK_HEADERS(errmsg.h mysql.h)
  CPPFLAGS="$old_CPPFLAGS"

  AC_DEFINE([HAVE_MYSQL], [1], [mysql support])
else
  AC_MSG_RESULT(no)
fi

AC_SUBST(MYSQL_LIBS)
AC_SUBST(MYSQL_INCLUDE)

dnl Check for LDAP
AC_MSG_CHECKING(for LDAP support)
AC_ARG_WITH(ldap, AC_HELP_STRING([--with-ldap],[enable LDAP support]),
[WITH_LDAP=$withval], [WITH_LDAP=no])
AC_MSG_RESULT([$withval])
if test "$WITH_LDAP" != "no"; then
 AC_CHECK_LIB(ldap, ldap_bind, [
  AC_CHECK_HEADERS([ldap.h],[
    LDAP_LIB=-lldap
    AC_DEFINE([HAVE_LIBLDAP], [1], [libldap])
    AC_DEFINE([HAVE_LDAP_H], [1])
  ])
 ])
 AC_SUBST(LDAP_LIB)
 AC_CHECK_LIB(lber, ber_printf, [
  AC_CHECK_HEADERS([lber.h],[
    LBER_LIB=-llber
    AC_DEFINE([HAVE_LIBLBER], [1], [liblber])
    AC_DEFINE([HAVE_LBER_H], [1])
  ])
 ])
 AC_SUBST(LBER_LIB)
fi

dnl Check for xattr
AC_MSG_CHECKING(for extended attributes support)
AC_ARG_WITH(attr, AC_HELP_STRING([--with-attr],[enable extended attribute support]),
[WITH_ATTR=$withval],[WITH_ATTR=no])
AC_MSG_RESULT($withval)
if test "$WITH_ATTR" != "no"; then
 AC_CHECK_LIB(attr, attr_get, [
	AC_CHECK_HEADERS([attr/attributes.h],[
		ATTR_LIB=-lattr
		AC_DEFINE([HAVE_XATTR], [1], [libattr])
		AC_DEFINE([HAVE_ATTR_ATTRIBUTES_H], [1])
	])
 ])
 AC_SUBST(ATTR_LIB)
fi

## openssl on solaris needs -lsocket -lnsl
AC_SEARCH_LIBS(socket,socket)
AC_SEARCH_LIBS(gethostbyname,nsl socket)
AC_SEARCH_LIBS(hstrerror,resolv)

save_LIBS=$LIBS
AC_SEARCH_LIBS(dlopen,dl,[
  AC_CHECK_HEADERS([dlfcn.h],[
    if test "$ac_cv_search_dlopen" != no; then
      test "$ac_cv_search_dlopen" = "none required" || DL_LIB="$ac_cv_search_dlopen"
    fi

    AC_DEFINE([HAVE_LIBDL], [1], [libdl])
    AC_DEFINE([HAVE_DLFCN_H], [1])
  ])
])
LIBS=$save_LIBS
AC_SUBST(DL_LIB)

dnl Check for valgrind
AC_MSG_CHECKING(for valgrind)
AC_ARG_WITH(valgrind, AC_HELP_STRING([--with-valgrind],[enable internal support for valgrind]),
[WITH_VALGRIND=$withval],[WITH_VALGRIND=no])
AC_MSG_RESULT([$WITH_VALGRIND])
if test "$WITH_VALGRIND" != "no"; then
 AC_CHECK_HEADERS([valgrind/valgrind.h])
fi

dnl Check for openssl
AC_MSG_CHECKING(for OpenSSL)
AC_ARG_WITH(openssl,
    AC_HELP_STRING([--with-openssl@<:@=DIR@:>@],[Include openssl support (default no)]),
    [WITH_OPENSSL=$withval],[WITH_OPENSSL=no])

if test "$WITH_OPENSSL" != "no"; then
    use_openssl=yes
    if test "$WITH_OPENSSL" != "yes"; then
	CPPFLAGS="$CPPFLAGS -I$WITH_OPENSSL/include"
	LDFLAGS="$LDFLAGS -L$WITH_OPENSSL/lib"
    fi
else
    use_openssl=no
fi
AC_MSG_RESULT([$use_openssl])

AC_ARG_WITH(openssl-includes,
    AC_HELP_STRING([--with-openssl-includes=DIR],[OpenSSL includes]),
    [ use_openssl=yes CPPFLAGS="$CPPFLAGS -I$withval" ]
)

AC_ARG_WITH(openssl-libs,
    AC_HELP_STRING([--with-openssl-libs=DIR],[OpenSSL libraries]),
    [ use_openssl=yes LDFLAGS="$LDFLAGS -L$withval" ]
)

AC_ARG_WITH(kerberos5,
    AC_HELP_STRING([--with-kerberos5],[use Kerberos5 support with OpenSSL]),
    [ use_kerberos=yes ], [use_kerberos=no]
)

if test "x$use_openssl" = "xyes"; then
    if test "x$use_kerberos" != "xyes"; then
        CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
    fi

    AC_CHECK_HEADERS([openssl/ssl.h])
    OLDLIBS="$LIBS"
    AC_CHECK_LIB(crypto, BIO_f_base64, [
      AC_CHECK_LIB(ssl, SSL_new, [ SSL_LIB="-lssl -lcrypto"
				 AC_DEFINE(HAVE_LIBSSL, [], [Have libssl]) ], [], [ -lcrypto "$DL_LIB" ])
    ], [], [])
    LIBS="$OLDLIBS"
    AC_SUBST(SSL_LIB)
fi

AC_MSG_CHECKING(for perl regular expressions support)
AC_ARG_WITH(pcre, AC_HELP_STRING([--with-pcre],[Enable pcre support (default yes)]),
    [WITH_PCRE=$withval],[WITH_PCRE=yes])
AC_MSG_RESULT([$WITH_PCRE])

if test "x$cross_compiling" = xno -a "$WITH_PCRE" != "no"; then
  AC_PATH_PROG(PCRECONFIG, pcre-config)

  if test x"$PCRECONFIG" != x; then
    PCRE_LIB=`$PCRECONFIG --libs`
    CPPFLAGS="$CPPFLAGS `$PCRECONFIG --cflags`"
    OLDLIBS="$LIBS"
    LIBS="$LIBS $PCRE_LIB"
    AC_CHECK_LIB(pcre, pcre_compile, [
      AC_CHECK_HEADERS([pcre.h], [
        AC_DEFINE([HAVE_LIBPCRE], [1], [libpcre])
        AC_DEFINE([HAVE_PCRE_H], [1])
      ])
    ])
    LIBS="$OLDLIBS"
  else
     AC_MSG_ERROR([pcre-config not found, install the pcre-devel package and build with --without-pcre])
  fi
fi

AC_SUBST(PCRE_LIB)

AC_MSG_CHECKING(for zlib support)
AC_ARG_WITH(zlib, AC_HELP_STRING([--with-zlib],[Enable zlib support for mod_compress]),
    [WITH_ZLIB=$withval],[WITH_ZLIB=yes])
AC_MSG_RESULT([$WITH_ZLIB])

if test "$WITH_ZLIB" != "no"; then
  AC_CHECK_LIB(z, deflate, [
    AC_CHECK_HEADERS([zlib.h],[
      Z_LIB=-lz
      AC_DEFINE([HAVE_LIBZ], [1], [libz])
      AC_DEFINE([HAVE_ZLIB_H], [1])
    ])
  ])
  if test x$Z_LIB = x; then
     AC_MSG_ERROR([zlib-headers and/or libs where not found, install them or build with --without-zlib])
  fi
fi
AC_SUBST(Z_LIB)

AC_MSG_CHECKING(for bzip2 support)
AC_ARG_WITH(bzip2, AC_HELP_STRING([--with-bzip2],[Enable bzip2 support for mod_compress]),
    [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
      AC_DEFINE([HAVE_LIBBZ2], [1], [libbz2])
      AC_DEFINE([HAVE_BZLIB_H], [1])
    ])
  ])
  if test x$BZ_LIB = x; then
     AC_MSG_ERROR([bzip2-headers and/or libs where not found, install them or build with --without-bzip2])
  fi
fi
AC_SUBST(BZ_LIB)

if test -z "$PKG_CONFIG"; then
  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi

dnl Check for gamin
AC_MSG_CHECKING(for FAM)
AC_ARG_WITH(fam, AC_HELP_STRING([--with-fam],[fam/gamin for reducing number of stat() calls]),
[WITH_FAM=$withval],[WITH_FAM=no])
AC_MSG_RESULT([$WITH_FAM])

if test "$WITH_FAM" != "no"; then
  AC_CHECK_LIB(fam, FAMOpen2, [
    AC_CHECK_HEADERS([fam.h],[
      FAM_LIBS=-lfam
      AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
      AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
    ])
  ])
  if test "x$FAM_LIBS" = x; then
    PKG_CHECK_MODULES(FAM, gamin >= 0.1.0, [
      AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
      AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
    ])
  fi
  OLD_LIBS=$LIBS
  LIBS=$FAM_LIBS
  AC_CHECK_FUNCS([FAMNoExists])
  LIBS=$OLD_LIBS
  
  if test x$FAM_LIBS = x; then
     AC_MSG_ERROR([fam/gamin-headers and/or libs where not found, install them or build with --without-fam])
  fi
fi

AC_MSG_CHECKING(for properties in mod_webdav)
AC_ARG_WITH(webdav-props, AC_HELP_STRING([--with-webdav-props],[properties in mod_webdav]),
[WITH_WEBDAV_PROPS=$withval],[WITH_WEBDAV_PROPS=no])
AC_MSG_RESULT([$WITH_WEBDAV_PROPS])

if test "$WITH_WEBDAV_PROPS" != "no"; then
 PKG_CHECK_MODULES(XML, libxml-2.0, [
    AC_DEFINE([HAVE_LIBXML2], [1], [libxml2])
    AC_DEFINE([HAVE_LIBXML_H], [1], [libxml.h])
 ])
 PKG_CHECK_MODULES(SQLITE, sqlite3, [
    AC_DEFINE([HAVE_SQLITE3], [1], [libsqlite3])
    AC_DEFINE([HAVE_SQLITE3_H], [1], [sqlite3.h])
 ])

 AC_MSG_CHECKING(for locks in mod_webdav)
 AC_ARG_WITH(webdav-locks, AC_HELP_STRING([--with-webdav-locks],[locks in mod_webdav]),
 [WITH_WEBDAV_LOCKS=$withval],[WITH_WEBDAV_LOCKS=no])
 AC_MSG_RESULT([$WITH_WEBDAV_LOCKS])

 if test "$WITH_WEBDAV_LOCKS" != "no"; then
   AC_CHECK_LIB(uuid, uuid_unparse, [
         AC_CHECK_HEADERS([uuid/uuid.h],[
                 UUID_LIBS=-luuid
                 AC_DEFINE([HAVE_UUID], [1], [libuuid])
		 AC_DEFINE([HAVE_UUID_H], [1], [uuid/uuid.h is available])
         ])
 ])

 fi
fi
AC_SUBST(UUID_LIBS)

dnl Check for gdbm
AC_MSG_CHECKING(for gdbm)
AC_ARG_WITH(gdbm, AC_HELP_STRING([--with-gdbm],[gdbm storage for mod_trigger_b4_dl]),
[WITH_GDBM=$withval],[WITH_GDBM=no])
AC_MSG_RESULT([$WITH_GDBM])

if test "$WITH_GDBM" != "no"; then
 AC_CHECK_LIB(gdbm, gdbm_open, [
         AC_CHECK_HEADERS([gdbm.h],[
                 GDBM_LIB=-lgdbm
                 AC_DEFINE([HAVE_GDBM], [1], [libgdbm])
		 AC_DEFINE([HAVE_GDBM_H], [1])
         ])
 ])
 AC_SUBST(GDBM_LIB)
fi

dnl Check for memcache
AC_MSG_CHECKING(for memcache)
AC_ARG_WITH(memcache, AC_HELP_STRING([--with-memcache],[memcached storage for mod_trigger_b4_dl]),
[WITH_MEMCACHE=$withval],[WITH_MEMCACHE=no])
AC_MSG_RESULT([$WITH_MEMCACHE])
if test "$WITH_MEMCACHE" != "no"; then
 AC_CHECK_LIB(memcache, mc_new, [
         AC_CHECK_HEADERS([memcache.h],[
                 MEMCACHE_LIB=-lmemcache
                 AC_DEFINE([HAVE_MEMCACHE], [1], [libmemcache])
		 AC_DEFINE([HAVE_MEMCACHE_H], [1], [memcache.h])
         ])
 ])
 AC_SUBST(MEMCACHE_LIB)
fi

dnl Check for lua
AC_MSG_CHECKING(if lua-support is requested)
AC_ARG_WITH(lua, AC_HELP_STRING([--with-lua],[lua engine for mod_cml]),
[WITH_LUA=$withval],[WITH_LUA=no])

AC_MSG_RESULT($WITH_LUA)
if test "$WITH_LUA" != "no"; then
 if test "$WITH_LUA" = "yes"; then
  WITH_LUA=lua
 fi
 PKG_CHECK_MODULES(LUA, $WITH_LUA >= 5.1, [
   AC_DEFINE([HAVE_LUA], [1], [liblua])
   AC_DEFINE([HAVE_LUA_H], [1], [lua.h])
 ])

 AC_SUBST(LUA_CFLAGS)
 AC_SUBST(LUA_LIBS)
fi

save_LIBS=$LIBS
AC_SEARCH_LIBS(crypt,crypt,[
  AC_CHECK_HEADERS([crypt.h],[
    AC_DEFINE([HAVE_CRYPT_H], [1])
  ])

  AC_DEFINE([HAVE_LIBCRYPT], [1], [libcrypt])
  if test "$ac_cv_search_crypt" != no; then
    test "$ac_cv_search_crypt" = "none required" || CRYPT_LIB="$ac_cv_search_crypt"
  fi
])
LIBS=$save_LIBS
AC_SUBST(CRYPT_LIB)

save_LIBS=$LIBS
AC_SEARCH_LIBS(sendfilev,sendfile,[
  if test "$ac_cv_search_sendfilev" != no; then
    test "$ac_cv_search_sendfilev" = "none required" || SENDFILE_LIB="$ac_cv_search_sendfilev"
    AC_DEFINE([HAVE_SENDFILEV], [1], [solaris sendfilev])
  fi
])
LIBS=$save_LIBS
AC_SUBST(SENDFILE_LIB)

case $host_os in
	*mingw* ) LIBS="$LIBS -lwsock32";;
        * ) ;;
esac

AC_CHECK_FUNCS([dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
		  strdup strerror strstr strtol sendfile  getopt socket lstat \
		  gethostbyname poll sigtimedwait epoll_ctl getrlimit chroot \
		  getuid select signal pathconf madvise posix_fadvise posix_madvise \
		  writev sigaction sendfile64 send_file kqueue port_create localtime_r])

AC_MSG_CHECKING(for Large File System support)
AC_ARG_ENABLE(lfs,
 AC_HELP_STRING([--enable-lfs],[Turn on Large File System (default)]),
 [case "${enableval}" in
   yes) CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES" ;;
    no) ;;
     *) AC_MSG_ERROR(bad value ${enableval} for --enable-lfs) ;;
  esac],[CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES"
	 enable_lfs=yes])
AC_MSG_RESULT($enableval)

AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(off_t)

if test "x$ac_cv_func_sendfile" = xyes; then
	# check if sendfile works
        AC_MSG_CHECKING(if sendfile works)
	if test "x$cross_compiling" = xno; then
	AC_TRY_RUN([
		    #ifdef HAVE_SYS_SENDFILE_H
		    #include <sys/sendfile.h>
		    #endif /* HAVE_SYS_SENDFILE_H */
		    #include <errno.h>
		    int main() {
		      int o = 0;
		      if (-1 == sendfile(-1, 0, &o, 0) && errno == ENOSYS) return -1;
		      return 0;
		    } ],
		    AC_MSG_RESULT(yes),
		    [ AC_MSG_RESULT(no)
		    AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile]) ] )
	else
	      AC_MSG_RESULT(no, cross-compiling)
	      AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])
	fi
fi

dnl Check for IPv6 support

AC_ARG_ENABLE(ipv6,
 AC_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_TRY_LINK([ #include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>], [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])
  fi
fi


AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)

dnl check for fastcgi lib, for the tests only
fastcgi_found=no
AC_CHECK_LIB(fcgi, FCGI_Accept, [
 AC_CHECK_HEADERS([fastcgi.h fastcgi/fastcgi.h],[
   fastcgi_found=yes
 ])
])

AM_CONDITIONAL(CHECK_WITH_FASTCGI, test "x$fastcgi_found" = xyes)


if test "${GCC}" = "yes"; then
       CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic -std=gnu99"
fi

dnl build version-id
LIGHTTPD_VERSION_ID=`echo $PACKAGE_VERSION | $AWK -F '.' '{print "(" $1 " << 16 | " $2 " << 8 | " $3 ")"}'`
AC_DEFINE_UNQUOTED([LIGHTTPD_VERSION_ID], [$LIGHTTPD_VERSION_ID], [lighttpd-version-id])

AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile tests/Makefile \
		 tests/docroot/Makefile \
		 tests/docroot/123/Makefile \
		 tests/docroot/www/Makefile \
		 tests/docroot/www/go/Makefile \
		 tests/docroot/www/indexfile/Makefile \
		 tests/docroot/www/expire/Makefile \
		 lighttpd.spec distribute.sh cygwin/Makefile cygwin/lighttpd.README
		 openwrt/Makefile openwrt/control openwrt/lighttpd.mk])
AC_OUTPUT


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 mod_rrdtool mod_secdownload mod_expire mod_compress mod_dirlisting mod_indexfiles mod_userdir mod_webdav mod_staticfile mod_scgi mod_flv_streaming"

plugins="mod_rewrite mod_redirect mod_ssi mod_trigger_b4_dl"
features="regex-conditionals"
if test ! "x$PCRE_LIB" = x; then
	do_build="$do_build $plugins"
	enable_feature="$features"
else
	no_build="$no_build $plugins"
	disable_feature="$features"
fi

plugins="mod_mysql_vhost"
if test ! "x$MYSQL_LIBS" = x; then
	do_build="$do_build $plugins"
else
	no_build="$no_build $plugins"
fi

plugins="mod_cml mod_magnet"
if test ! "x$LUA_LIBS" = x; then
	do_build="$do_build $plugins"
else
	no_build="$no_build $plugins"
fi

features="storage-gdbm"
if test ! "x$GDBM_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="storage-memcache"
if test ! "x$MEMCACHE_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="compress-gzip compress-deflate"
if test ! "x$Z_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="compress-bzip2"
if test ! "x$BZ_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="auth-ldap"
if test ! "x$LDAP_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="network-openssl"
if test ! "x$SSL_LIB" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

# no crypt call
features="auth-crypt"
if test "$ac_cv_search_crypt" = no; then
	disable_feature="$disable_feature $features"
else
	enable_feature="$enable_feature $features"
fi

features="network-ipv6"
if test "$ac_cv_ipv6_support" = yes; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="large-files"
if test "$enable_lfs" = yes; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="stat-cache-fam"
if test ! "x$FAM_LIBS" = x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="webdav-properties"
if test "x$XML_LIBS" \!= x -a "x$SQLITE_LIBS" \!= x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi

features="webdav-locks"
if test "x$UUID_LIBS" \!= x; then
	enable_feature="$enable_feature $features"
else
	disable_feature="$disable_feature $features"
fi


## output

$ECHO
$ECHO "Plugins:"
$ECHO

$ECHO "enabled: "
for p in $do_build; do
	$ECHO "  $p"
done | sort

$ECHO "disabled: "
for p in $no_build; do
	$ECHO "  $p"
done | sort

$ECHO
$ECHO "Features:"
$ECHO

$ECHO "enabled: "
for p in $enable_feature; do
	$ECHO "  $p"
done | sort

$ECHO "disabled: "
for p in $disable_feature; do
	$ECHO "  $p"
done | sort

$ECHO
