# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.57) AC_INIT(lighttpd, 1.4.12, 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 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]) # 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 ]) AC_CHECK_TYPES(struct sockaddr_storage,,,[#include ]) AC_CHECK_TYPES(socklen_t,,,[#include #include ]) # 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="" 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" fi fi AC_SUBST(PCRE_LIB) 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]) ]) ]) 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]) ]) ]) 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 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]) ]) fi 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(for lua) 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 AC_PATH_PROG(LUACONFIG, lua-config) if test x"$LUACONFIG" != x; then LUA_CFLAGS=`$LUACONFIG --include` LUA_LIBS=`$LUACONFIG --libs --extralibs` AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) else AC_CHECK_LIB(lua, lua_open, [ AC_CHECK_HEADERS([lua.h],[ LUA_LIBS="-llua -llualib" AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) ]) ]) fi if test x"$LUA_LIBS" = x; then # try pkgconfig PKG_CHECK_MODULES(LUA, lua, [ AC_DEFINE([HAVE_LUA], [1], [liblua]) AC_DEFINE([HAVE_LUA_H], [1], [lua.h]) ]) fi 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 #endif /* HAVE_SYS_SENDFILE_H */ #include 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 #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]) 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_found=yes ]) ]) AM_CONDITIONAL(CHECK_WITH_FASTCGI, test "x$fastcgi_found" = xyes) if test "${GCC}" = "yes"; then CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic" 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_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" 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 ## 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