* Move to GPL v3
[citadel.git] / citadel / configure.ac
index cc8f0e3e95230579cb0aa99bb923944679198075..aff40386de8a1d9a66d750d93089c5baff5a104a 100644 (file)
 dnl Process this file with autoconf to produce a configure script.
 dnl $Id$
 AC_PREREQ(2.52)
-AC_INIT([Citadel/UX], [5.80], [http://uncensored.citadel.org/])
-AC_REVISION([$Revision$])
+AC_INIT([Citadel], [7.11], [http://www.citadel.org/])
+AC_REVISION([$Revision: 5108 $])
 AC_CONFIG_SRCDIR([citserver.c])
 AC_PREFIX_DEFAULT(/usr/local/citadel)
 if test "$prefix" = NONE; then
-       AC_DEFINE_UNQUOTED(BBSDIR, "$ac_default_prefix")
+       AC_DEFINE_UNQUOTED(CTDLDIR, "$ac_default_prefix", [define this to the Citadel home directory])
+       ssl_dir="$ac_default_prefix/keys"
 else
-       AC_DEFINE_UNQUOTED(BBSDIR, "$prefix")
+       AC_DEFINE_UNQUOTED(CTDLDIR, "$prefix", [define this to the Citadel home directory])
+       ssl_dir="$prefix/keys"
 fi
 
-AC_ARG_ENABLE(autologin, [  --disable-autologin     disable autologin (default is enabled if possible)])
-AC_ARG_ENABLE(chkpwd, [  --disable-chkpwd        don't build 'chkpwd'])
+
+dnl Make sure we see all GNU and Solaris extensions.
+AC_GNU_SOURCE
+
+
+dnl Checks for the Datadir
+AC_ARG_WITH(datadir, 
+                   [  --with-datadir          directory to store the databases under],
+                       [ if test "x$withval" != "xno" ; then
+                                             AC_DEFINE(HAVE_DATA_DIR,[],[use alternate database location?])
+                                             AC_DEFINE_UNQUOTED(DATA_DIR, "$withval",[define, if the user suplied a data-directory to use.])
+                                             MAKE_DATA_DIR=$withval
+                                             AC_SUBST(MAKE_DATA_DIR)
+                         fi
+                       ]
+)
+
+dnl Checks for the Datadir
+AC_ARG_WITH(staticdatadir, 
+                   [  --with-staticdatadir    directory to store citadels system messages under],
+                       [ if test "x$withval" != "xno" ; then
+                                                 AC_DEFINE(HAVE_STATICDATA_DIR, [], [should we activate an alternate static text location?])
+                                                 AC_DEFINE_UNQUOTED(STATICDATA_DIR, "$withval", [where do we put our static text data?])
+                                                 MAKE_STATICDATA_DIR=$withval
+                                                 AC_SUBST(MAKE_STATICDATA_DIR)
+                         fi
+                       ]
+)
+
+
+dnl Checks for the SSLdir
+dnl this is a bit different than the rest, 
+dnl because of the citadel used to have a keys/ subdir.
+AC_ARG_WITH(ssldir, 
+                   [  --with-ssldir          directory to store the ssl certificates under],
+                       [ if test "x$withval" != "xno" ; then
+                                             
+                                                 ssl_dir="$withval"
+                         fi
+                       AC_SUBST(MAKE_SSL_DIR)
+                       ]
+)
+AC_DEFINE_UNQUOTED(SSL_DIR, "$ssl_dir", [were should we put our keys?])
+
+
+dnl Checks for the spooldir
+AC_ARG_WITH(spooldir, 
+                       [  --with-spooldir         directory to keep queues under],
+                       [ if test "x$withval" != "xno" ; then
+                                               AC_DEFINE(HAVE_SPOOL_DIR, [], [enable alternate spool dir?])
+                                               AC_DEFINE_UNQUOTED(SPOOL_DIR,"$withval", [where do we place our spool dirs?])
+                                               MAKE_SPOOL_DIR=$withval
+                                               AC_SUBST(MAKE_SPOOL_DIR)
+                          fi
+                       ]
+)
+
+
+dnl Checks for the Configdir
+AC_ARG_WITH(sysconfdir, 
+                       [  --with-sysconfdir       directory to store the configs under],
+                       [ if test "x$withval" != "xno" ; then
+                                           AC_DEFINE(HAVE_ETC_DIR, [], [should we search our system config in an alternate place?])
+                                               AC_DEFINE_UNQUOTED(ETC_DIR, "$withval", [where to search our config files])
+                                               MAKE_ETC_DIR=$withval
+                                               AC_SUBST(MAKE_ETC_DIR)
+                         fi
+                       ]
+)
+
+dnl Checks for where to put our utilities
+AC_ARG_WITH(utility-bindir, 
+                       [  --with-utility-bindir       directory where to find helper binaries],
+                       [ if test "x$withval" != "xno" ; then
+                                           AC_DEFINE(HAVE_UTILBIN_DIR,[],[should we put our helper binaries to another location?])
+                                               AC_DEFINE_UNQUOTED(UTILBIN_DIR, "$withval", [were to put our helper programs])
+                                               MAKE_UTILBIN_DIR=$withval
+                                               AC_SUBST(MAKE_UTILBIN_DIR)
+                         fi
+                       ]
+)
+
+
+dnl Checks for the run-dir for the sockets
+AC_ARG_WITH(rundir, 
+                       [  --with-rundir           directory to place runtime files (UDS) to?],
+                       [ if test "x$withval" != "xno" ; then
+                                           AC_DEFINE(HAVE_RUN_DIR, [], [should we put our non volatile files elsewhere?])
+                                               AC_DEFINE_UNQUOTED(RUN_DIR, "$withval", [define, where the config should go in unix style])
+                                               MAKE_RUN_DIR=$withval
+                                               AC_SUBST(MAKE_RUN_DIR)
+                         fi
+                       ]
+)
+
+
+dnl Checks for the Pseudo Random Generator sockets TODO: this keeps being default.
+AC_DEFINE_UNQUOTED(EGD_POOL, "/var/run/egd-pool", [place to keep our pseudo random generator file])
+AC_ARG_WITH(egdpool, 
+                       [  --with-egdpool          the socket from Pseudo Random Generator, defaults to /var/run/egd-pool],
+                       [ if test "x$withval" != "xno" ; then
+                                               AC_DEFINE_UNQUOTED(EGD_POOL, "$withval", [the socket from Pseudo Random Generator])
+                         fi
+                       ]
+)
+
+
+AC_ARG_WITH(docdir,
+                       [  --with-docdir           where to install the documentation. default: /usr/local/citadel/],
+                       [ if test "x$withval" != "xno" ; then
+                                       MAKE_DOC_DIR=$withval
+                                       AC_SUBST(MAKE_DOC_DIR)
+                         fi
+                       ]
+)
+
+
 
 AC_ARG_ENABLE(threaded-client, [  --disable-threaded-client
                          disable multithreaded client])
 
+AC_ARG_ENABLE(pie, [  --enable-pie            build position-independent executables])
+
 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
-AC_ARG_WITH(gdbm, [  --with-gdbm@<:@=DIR@:>@       use GDBM @<:@DIR=/usr/local@:>@])
 AC_ARG_WITH(db, [  --with-db@<:@=DIR@:>@         use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
+AC_ARG_WITH(ssl,
+       [  --with-ssl=PATH         Specify path to OpenSSL installation ],
+       [
+               if test "x$withval" != "xno" ; then
+                       tryssldir=$withval
+               fi
+       ]
+)
+AC_ARG_WITH(ncurses, [  --without-ncurses       don't use ncurses])
 
-if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
-       db_dir="$with_gdbm"
-       with_gdbm=yes
-else
-       test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
-fi
+AC_ARG_WITH(with_zlib, [  --with-zlib             use zlib compression if present])
+AC_ARG_WITH(with_ldap, [  --with-ldap             use OpenLDAP client library])
+AC_ARG_WITH(with_libical, [  --with-libical          use libical calendaring library])
+AC_ARG_WITH(with_libsieve, [  --with-libsieve         use libsieve mail sorting library])
 
 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
        db_dir="$with_db"
        with_db=yes
 else
-       test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
-       test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
-       test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
-fi
+       test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
+         -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
+         && db_dir=/usr/local
 
-if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
-       AC_MSG_ERROR(can't enable both gdbm and db)
+       test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
+       test -d /usr/local/BerkeleyDB.4.2 && db_dir=/usr/local/BerkeleyDB.4.2
+       test -d /usr/local/BerkeleyDB.4.3 && db_dir=/usr/local/BerkeleyDB.4.3
 fi
 
 dnl By default, we only build the client (citadel and whobbs) unless we can
@@ -48,105 +173,142 @@ TARGETS=client
 
 AC_CANONICAL_HOST
 PTHREAD_DEFS=-D_REENTRANT
+AC_MSG_CHECKING([how to compile with POSIX threads])
 case "$host" in
        dnl BSDI 3.0 wants relocatable object modules instead of shared libs
        dnl for dlopen(), and has a wrapper script to link with shared libs.
        dnl Also has stupid non-reentrant gethostbyaddr() and friends.
        *-*-bsdi[123]*)
                test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
-               AC_DEFINE(HAVE_NONREENTRANT_NETDB)
+               AC_DEFINE(HAVE_NONREENTRANT_NETDB,[], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
+               AC_MSG_RESULT([Old BSDI])
        ;;
        *-*-bsdi*)
-               AC_DEFINE(HAVE_NONREENTRANT_NETDB)
+               AC_DEFINE(HAVE_NONREENTRANT_NETDB, [], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
+               AC_MSG_RESULT([BSD/OS])
+       ;;
+       dnl Curses support on Mac OS X is kind of screwed at the moment.
+       dnl TCP buffering isn't ideal under OS X. This define should also be
+       dnl checked in other cases of OS X-Linux differences.
+       *-*-darwin*)
+               AC_DEFINE(DISABLE_CURSES,[],[define this to disable use of curses])
+               AC_DEFINE(HAVE_DARWIN, [], [define if using OS X/Darwin])
+               AC_MSG_RESULT([Mac OS X])
        ;;
        dnl Digital Unix has an odd way to build for pthreads, and we can't
        dnl build pthreads programs with gcc due to header problems.
        alpha*-dec-osf*)
                test -z "$CC" && CC=cc
-               PTHREAD_LIBS="-lpthread -lexc"
+               LIBS="-lpthread -lexc $LIBS"
                check_pthread=no
+               AC_MSG_RESULT([Tru64 or Digital UNIX])
        ;;
        dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
        *-*-freebsd*)
                if test "$with_kthread" = yes; then
-                       PTHREAD_LIBS=-kthread
+                       LIBS="-kthread $LIBS"
                else
-                       PTHREAD_LIBS=-pthread
+                       LIBS="-pthread $LIBS"
                fi
                check_pthread=no
                PTHREAD_DEFS=-D_THREAD_SAFE
+               AC_MSG_RESULT([FreeBSD])
        ;;
        *-*-openbsd*)
-               PTHREAD_LIBS=-pthread
+               LIBS="-pthread $LIBS"
                check_pthread=no
                PTHREAD_DEFS=-pthread
+               AC_MSG_RESULT([OpenBSD])
+       ;;
+       *-*-linux*)
+               PTHREAD_DEFS="-D_REENTRANT -pthread"
+               AC_MSG_RESULT([Linux])
        ;;
        *-*-solaris*)
                PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
+               AC_MSG_RESULT([Solaris])
+       ;;
+       *-*-cygwin*)
+               SERVER_LDFLAGS="-Wl,-subsystem,windows"
+               AC_MSG_RESULT([Cygwin])
+       ;;
+       *)
+               AC_MSG_RESULT([default])
        ;;
 esac
+dnl DEFS="$DEFS $PTHREAD_DEFS"
+
 
 dnl Checks for programs.
 AC_PROG_CC
 
 dnl Set up system-dependent compiler flags.
 if test "$GCC" = yes; then
-       case "$host" in
-               *-*-solaris*)
-                       CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
-               ;;
-               *)
-                       CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
-               ;;
-       esac
+       if test "$CC" = icc; then
+               CFLAGS="$CFLAGS -w1"
+       else
+               case "$host" in
+                       *-*-solaris*|alpha*-dec-osf*)
+                               CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
+                       ;;
+                       *)
+                       CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
+                       ;;
+               esac
+       fi
+fi
+
+if test "x$enable_pie" = xyes; then
+       save_CFLAGS="$CFLAGS"
+       save_LDFLAGS="$LDFLAGS"
+       CFLAGS="$CFLAGS -fpie"
+       LDFLAGS="$LDFLAGS -pie -fpie"
+       AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
+       [AC_TRY_LINK([], [],
+       ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
+       if test $ac_cv_pie_fpie = no; then
+               CFLAGS="$save_CFLAGS"
+               LDFLAGS="$save_LDFLAGS"
+       fi
 fi
-AC_LIBTOOL_DLOPEN
-AC_LIBTOOL_WIN32_DLL
-AC_DISABLE_STATIC
-AC_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
+
 AC_PROG_INSTALL
 AC_PROG_YACC
 missing_dir=`cd $ac_aux_dir && pwd`
 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
 
 dnl Checks for system services.
 
-dnl Checks for libraries.
+dnl Check the size of various builtin types; see typesize.h (error)
+AC_CHECK_SIZEOF(char, 0)
+AC_CHECK_SIZEOF(short, 0)
+AC_CHECK_SIZEOF(int, 0)
+AC_CHECK_SIZEOF(long, 0)
+dnl AC_CHECK_SIZEOF(long long, 0)
 
-dnl libdl, libgdbm, and libcrypt are only used in the server, so the
-dnl Makefile only passes $(LIBS) to that target. If other programs start
-dnl requiring additional libraries, we'll have to use other variables, as is
-dnl done with curses.
+dnl Checks for libraries.
 
 dnl We want to test for the following in libc before checking for their
 dnl respective libraries, because some systems (like Irix) have both, and the
 dnl non-libc versions may be broken.
-AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
+AC_CHECK_FUNCS(crypt gethostbyname connect)
 
 if test "$ac_cv_func_gethostbyname" = no; then
-       AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
+       AC_CHECK_LIB(nsl, gethostbyname)
 fi
 
 if test "$ac_cv_func_connect" = no; then
-        AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
+        AC_CHECK_LIB(socket, connect)
 fi
 
-if test "$ac_cv_func_dlopen" = no; then
-        AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
-               test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
-fi
-
-dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
-AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
-
 dnl Check for Solaris realtime support
 AC_CHECK_LIB(rt, sched_yield)
 
-dnl Determine the system's authentication capabilities, if autologin is
-dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
+dnl Determine the system's authentication capabilities.
+dnl We currently support PAM, standard getpwnam(), and getspnam()
 dnl (Linux shadow passwords)
-if test "$enable_autologin" != no; then
+
        if test "$with_pam" = yes; then
                save_LIBS=$LIBS
                AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
@@ -168,102 +330,355 @@ if test "$enable_autologin" != no; then
                                        LIBS="-lcrypt $LIBS"])
                fi
        fi
-       if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
-               AC_DEFINE(ENABLE_AUTOLOGIN)
-               if test "$enable_chkpwd" != no; then
-                       AC_DEFINE(ENABLE_CHKPWD)
-                       CHKPWD=chkpwd
+
+test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
+AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
+
+if test "x$with_ncurses" != "xno"; then
+       AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
+       AC_SEARCH_LIBS(scrollok, [ncurses curses])
+       AC_SEARCH_LIBS(initscr, [ncurses curses])
+else
+       AC_SEARCH_LIBS(tgetent, [curses termcap])
+       AC_SEARCH_LIBS(initscr, [curses])
+fi
+AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
+
+dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
+dnl which the -pthread flag takes care of this.)
+if test "$check_pthread" != no; then
+       AC_CHECK_LIB(pthread, pthread_create)
+       AC_CHECK_LIB(pthreads, pthread_create)
+fi
+
+test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
+
+# The big search for OpenSSL
+if test "$with_ssl" != "no"; then
+       saved_LIBS="$LIBS"
+       saved_LDFLAGS="$LDFLAGS"
+       saved_CFLAGS="$CFLAGS"
+       if test "x$prefix" != "xNONE"; then
+               tryssldir="$tryssldir $prefix"
+       fi
+       AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
+               for ssldir in $tryssldir "" /usr /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/pkg /opt /opt/openssl ; do
+                       CFLAGS="$saved_CFLAGS"
+                       LDFLAGS="$saved_LDFLAGS"
+                       LIBS="$saved_LIBS -lssl -lcrypto"
+       
+                       # Skip directories if they don't exist
+                       if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
+                               continue;
+                       fi
+                       if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
+                               # Try to use $ssldir/lib if it exists, otherwise
+                               # $ssldir
+                               if test -d "$ssldir/lib" ; then
+                                       LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
+                                       if test ! -z "$need_dash_r" ; then
+                                               LDFLAGS="-R$ssldir/lib $LDFLAGS"
+                                       fi
+                               else
+                                       LDFLAGS="-L$ssldir $saved_LDFLAGS"
+                                       if test ! -z "$need_dash_r" ; then
+                                               LDFLAGS="-R$ssldir $LDFLAGS"
+                                       fi
+                               fi
+                               # Try to use $ssldir/include if it exists, otherwise
+                               # $ssldir
+                               if test -d "$ssldir/include" ; then
+                                       CFLAGS="-I$ssldir/include $saved_CFLAGS"
+                               else
+                                       CFLAGS="-I$ssldir $saved_CFLAGS"
+                               fi
+                       fi
+       
+                       # Basic test to check for compatible version and correct linking
+                       # *does not* test for RSA - that comes later.
+                       AC_TRY_RUN(
+                               [
+       #include <string.h>
+       #include <openssl/rand.h>
+       int main(void)
+       {
+               char a[2048];
+               memset(a, 0, sizeof(a));
+               RAND_add(a, sizeof(a), sizeof(a));
+               return(RAND_status() <= 0);
+       }
+                               ],
+                               [
+                                       found_crypto=1
+                                       break;
+                               ], []
+                       )
+       
+                       if test ! -z "$found_crypto" ; then
+                               break;
+                       fi
+               done
+       
+               if test -z "$ssldir" ; then
+                       ssldir="(system)"
+               fi
+       
+               if test ! -z "$found_crypto" ; then
+                       ac_cv_openssldir=$ssldir
                else
-                       AUTH=auth.lo
+                       ac_cv_openssldir="no"
+               fi
+       ])
+       LIBS="$saved_LIBS"
+       LDFLAGS="$saved_LDFLAGS"
+       CFLAGS="$saved_CFLAGS"
+       
+       if test "x$ac_cv_openssldir" != "xno" ; then
+               AC_DEFINE(HAVE_OPENSSL, [], [Define if you have OpenSSL.])
+               LIBS="-lssl -lcrypto $LIBS"
+               dnl Need to recover ssldir - test above runs in subshell
+               ssldir=$ac_cv_openssldir
+               if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
+                       # Try to use $ssldir/lib if it exists, otherwise
+                       # $ssldir
+                       if test -d "$ssldir/lib" ; then
+                               LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
+                               if test ! -z "$need_dash_r" ; then
+                                       LDFLAGS="-R$ssldir/lib $LDFLAGS"
+                               fi
+                       else
+                               LDFLAGS="-L$ssldir $saved_LDFLAGS"
+                               if test ! -z "$need_dash_r" ; then
+                                       LDFLAGS="-R$ssldir $LDFLAGS"
+                               fi
+                       fi
+                       # Try to use $ssldir/include if it exists, otherwise
+                       # $ssldir
+                       if test -d "$ssldir/include" ; then
+                               CFLAGS="-I$ssldir/include $saved_CFLAGS"
+                       else
+                               CFLAGS="-I$ssldir $saved_CFLAGS"
+                       fi
                fi
        fi
 fi
 
-test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
-if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
-       AC_CHECK_LIB(db, db_env_create,
-               [GDBM="$GDBM -ldb"
-               DATABASE=database_sleepycat.c
-               with_gdbm=no], [AC_CHECK_LIB(db3, db_env_create,
-                                       [GDBM="$GDBM -ldb3"
-                                       DATABASE=database_sleepycat.c
-                                       with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
+if test "x$with_db" != xno; then
+       test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
+
+       dblib=""
+
+       if test -d "$db_dir/include/db4"; then
+               CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
+               dblib="db4"
+       elif test "$db_dir"; then
+               CPPFLAGS="$CPPFLAGS -I$db_dir/include"
+       elif test -d /usr/include/db4; then
+               CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
+               dblib="db4"
+       fi
+
+
+       AC_CHECK_DB([db db-4.1 db-4 db4],
+                   [
+                    DATABASE=database_sleepycat.c
+                   ],
+                   AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
+                                 library.  Use --with-db=PATH to specify
+                                 the path]]))
+
 fi
 
-if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
-        AC_CHECK_LIB(gdbm, gdbm_open,
-                [GDBM="$GDBM -lgdbm"
-                DATABASE=database.c
-                with_db=no])
+dnl Checks for the zlib compression library.
+if test "x$with_zlib" != xno ; then
+       AC_CHECK_HEADERS(zlib.h,
+               [AC_CHECK_LIB(z, zlibVersion,
+                       [ok_zlib=yes],,
+       )])
 fi
 
-test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
-AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
+if test "x$ok_zlib" = xyes ; then
+       SERVER_LIBS="-lz $SERVER_LIBS"
+       AC_DEFINE(HAVE_ZLIB, [], [define this if you have zlib compression available])
+fi
 
-save_LIBS=$LIBS
-LIBS=$CURSES
-AC_SEARCH_LIBS(tgetent, [curses termcap])
-AC_SEARCH_LIBS(initscr, [curses ncurses])
-CURSES=$LIBS
-LIBS=$save_LIBS
 
-dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
-dnl which the -pthread flag takes care of this.)
-if test "$check_pthread" != no; then
-       AC_CHECK_LIB(pthread, pthread_create,
-               PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
-       AC_CHECK_LIB(pthreads, pthread_create,
-               PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
+
+
+dnl Checks for the OpenLDAP client library.
+if test "x$with_ldap" != xno ; then
+       AC_CHECK_HEADERS(ldap.h,
+               [AC_CHECK_LIB(ldap, ldap_init,
+                       [ok_ldap=yes],,
+       )])
 fi
 
+if test "x$ok_ldap" = xyes ; then
+       SERVER_LIBS="-lldap $SERVER_LIBS"
+       AC_DEFINE(HAVE_LDAP, [], [define this if you have OpenLDAP client available])
+fi
+
+
+
+
+
+dnl Checks for the libsieve mailbox sorting library.
+if test "x$with_libsieve" != xno ; then
+       AC_CHECK_HEADERS(sieve2.h,
+               [AC_CHECK_LIB(sieve, sieve2_license,
+                       [ok_libsieve=yes],,
+       )])
+fi
+
+if test "x$ok_libsieve" = xyes ; then
+       SERVER_LIBS="-lsieve $SERVER_LIBS"
+       AC_DEFINE(HAVE_LIBSIEVE, [], [define this if you have the libsieve mailbox filtering library available])
+fi
+
+
+
+
+dnl Checks for the libical calendaring library.
+if test "x$with_libical" != xno ; then
+       AC_CHECK_HEADERS(ical.h,
+               [AC_CHECK_LIB(ical, icalcomponent_new,
+                       [ok_libical=yes],,
+       )])
+fi
+
+if test "x$ok_libical" = xyes ; then
+
+       AC_TRY_RUN(
+               [
+#include <ical.h>
+main() {
+        int major, minor, v;
+        sscanf(ICAL_VERSION, "%d.%d", &major, &minor);
+        v = 100*major + minor;
+        printf("libical version: %i\n", v);
+        if (v >= 24) {
+                printf("This version is ok.\n");
+               return(0);
+       }
+       printf("libical 0.24 or newer required.\n");
+       printf("Citadel will be built without calendar support.\n");
+       return(1);
+}
+               ], 
+               [
+                       SERVER_LIBS="-lical $SERVER_LIBS"
+                       AC_DEFINE(HAVE_LIBICAL, [], [define this if you have the libical calendaring library available])
+               ]
+       )
+fi
+
+
+
+
 dnl Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
-test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || \
-       ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" ) || \
-       ( test -d /usr/local/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db3" )
-AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h)
-
-AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
-AC_SUBST(SMTP)
-AC_SUBST(DOMAIN)
-
-dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
-dnl include pthread.h:
-save_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
-AC_CHECK_HEADERS(pthread.h)
-CPPFLAGS=$save_CPPFLAGS
+
+dnl
+dnl TODO: for the DB header checks, we should check whether the headers
+dnl define db_env_create, somehow
+dnl
+AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h malloc.h termios.h sys/ioctl.h sys/select.h sys/time.h sys/prctl.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db4/db.h pthread.h netinet/in.h arpa/nameser.h arpa/nameser_compat.h)
+
+dnl
+dnl need to check if this is actually compilable, sometimes there are
+dnl conflicts with the system's headers (eg solaris xpg4 style headers)
+dnl
+if test "x$with_ncurses" != xno; then
+       AC_CHECK_HEADERS(ncurses.h,,,[ ])
+fi
+
+AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
+[#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_NAMESER_H
+#include <arpa/nameser.h>
+#endif])
+
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_HEADER_TIME
-AC_STRUCT_TM
 
-dnl Check the size of various builtin types; see typesize.h (error)
-AC_CHECK_SIZEOF(char, 0)
-AC_CHECK_SIZEOF(short, 0)
-AC_CHECK_SIZEOF(int, 0)
-AC_CHECK_SIZEOF(long, 0)
-dnl AC_CHECK_SIZEOF(long long, 0)
+dnl defined in acinclude.m4:
+CIT_STRUCT_TM
 
 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
 [AC_TRY_COMPILE([#include <sys/types.h>
 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
 if test $ac_cv_struct_ut_type = yes; then
-       AC_DEFINE(HAVE_UT_TYPE)
+       AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
+fi
+
+AC_CACHE_CHECK(
+       [for call semantics from getpwuid_r], 
+       ac_cv_call_getpwuid_r,
+       [AC_TRY_COMPILE([#include <sys/types.h>
+#include <pwd.h>], 
+                         [
+                               struct passwd pw, *pwp;
+                               char pwbuf[64];
+                               uid_t uid;
+
+                               getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
+                       ],
+                       ac_cv_call_getpwuid_r=yes, 
+                       ac_cv_call_getpwuid_r=no)
+       ])
+
+if test $ac_cv_call_getpwuid_r = no; then
+       AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
+       AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
+       AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
+       AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
+else
+       AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
+       AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
+       AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
 fi
 
+dnl AC_CHECK_FUNCS(res_query)
+AC_CACHE_CHECK([for the resolver calls], 
+              ac_cv_resquery_ok, 
+[AC_TRY_COMPILE([#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>], 
+               [
+                       char *domain="www.google.com";
+                       u_char *answer;
+                       int len;
+                       len = res_query( domain, C_IN, T_A, answer, PACKETSZ );
+               ],
+                ac_cv_resquery_ok=yes,
+               ac_cv_resquery_ok=no)
+])
+echo "resquery: $ac_cv_resquery_ok"
+
+dnl if test "$ac_cv_resquery_ok" = "no" ; then
+dnl    AC_DEFINE(RES_QUERY_GONE, "#error resquery not here. can't continue.")
+dnl fi
+
+
+
 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
 [AC_TRY_COMPILE([#include <sys/types.h>
 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
 if test $ac_cv_struct_ut_host = yes; then
-       AC_DEFINE(HAVE_UT_HOST)
+       AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
 fi
 
 dnl Checks for library functions.
@@ -273,14 +688,10 @@ AC_TYPE_SIGNAL
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
 
-dnl Now check for pthreads -- set up variables so that the compiler will be run
-dnl with proper flags for pthread programs
-save_LIBS=$LIBS
-LIBS="$PTHREAD_LIBS $LIBS"
+dnl Now check for pthreads
 
 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
 dnl we need to include pthread.h
-dnl AC_CHECK_FUNCS(pthread_cancel)
 
 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
 [AC_TRY_LINK([#include <pthread.h>],
@@ -296,11 +707,9 @@ AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
 #endif],
 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
 if test "$ac_cv_func_pthread_cancel" = yes; then
-       AC_DEFINE(HAVE_PTHREAD_CANCEL)
+       AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
 fi
 
-dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
-
 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
 [AC_TRY_LINK([#include <pthread.h>],
 [      /* The GNU C library defines this for functions which it implements
@@ -313,40 +722,75 @@ AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
 #endif],
 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
 if test "$ac_cv_func_pthread_create" = yes; then
-       TARGETS="client server utils serv_modules"
+       test "$DATABASE" && TARGETS="client server utils"
        if test "x$enable_threaded_client" != xno; then
-               AC_DEFINE(THREADED_CLIENT)
-               CLIENT_PTLIBS=$PTHREAD_LIBS
-               CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
-               CX=.ro
+               AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
        fi
 fi
 
-if test "x$CX" != x.ro; then
-       CL_LIBOBJS='$(LIBOBJS)'
-       CX=.o
-fi
+AC_REPLACE_FUNCS(snprintf getutline)
+
+AC_CACHE_CHECK([the weather], ac_cv_weather, [
+       sleep 1
+       echo $ECHO_N "opening your window... $ECHO_C" >&6
+       sleep 2
+       month=`date | cut -f 2 -d ' '`
+       case $month in
+       Dec | Jan | Feb)
+               ac_cv_weather="it's cold!"
+               ;;
+       Mar | Apr)
+               ac_cv_weather="it's wet!"
+               ;;
+       Jul | Aug)
+               ac_cv_weather="it's hot!"
+               ;;
+       Oct | Nov)
+               ac_cv_weather="it's cool"
+               ;;
+       May | Jun | Sep | *)
+               ac_cv_weather="it's fine"
+               ;;
+       esac
+       ])
 
-dnl Now restore the old libs so we don't pass the wrong stuff to makefile
-LIBS=$save_LIBS
 
-AC_REPLACE_FUNCS(snprintf getutline)
+
+AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
+       number=`date | cut -c 19`
+       case $number in
+       7)
+               ac_cv_under_the_bed="lunatics and monsters found"
+               ;;
+       *)
+               ac_cv_under_the_bed="dust bunnies found"
+               ;;
+       esac
+       ])
 
 dnl Done! Now write the Makefile and sysdep.h
 AC_SUBST(AUTH)
-AC_SUBST(CHKPWD)
-AC_SUBST(CURSES)
-AC_SUBST(GDBM)
 AC_SUBST(RESOLV)
-AC_SUBST(NETLIBS)
 AC_SUBST(chkpwd_LIBS)
 AC_SUBST(TARGETS)
-AC_SUBST(PTHREAD_DEFS)
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(CLIENT_PTLIBS)
-AC_SUBST(CL_LIBOBJS)
-AC_SUBST(CX)
 AC_SUBST(DATABASE)
+AC_SUBST(SERVER_LDFLAGS)
+AC_SUBST(SERVER_LIBS)
+AC_SUBST(SETUP_LIBS)
 AC_CONFIG_HEADER(sysdep.h)
-AC_CONFIG_FILES([Makefile weekly])
-AC_OUTPUT
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT(database_cleanup.sh)
+
+if test -z "$DATABASE"; then
+       AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
+fi
+
+echo ------------------------------------------------------------------------
+echo 'zlib compression:                ' $ok_zlib
+echo 'Calendar support:                ' $ok_libical
+echo 'LDAP support:                    ' $ok_ldap
+echo 'Sieve mailbox filtering support: ' $ok_libsieve
+echo 
+echo 'Note: if you are not using Linux, make sure you are using GNU make'
+echo '(gmake) to compile Citadel.'
+echo