]> code.citadel.org Git - citadel.git/blobdiff - citadel/configure.ac
* Replaced all "Citadel/UX" references with "Citadel"
[citadel.git] / citadel / configure.ac
index 23d71fc559ae6c61ed898b97eafd7425c6326b6f..72ce3086c3ff95013d2ef6e13cee778109ef5357 100644 (file)
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl $Id$
 AC_PREREQ(2.52)
-AC_INIT([Citadel/UX], [5.91], [http://uncensored.citadel.org/])
+AC_INIT([Citadel], [6.15], [http://uncensored.citadel.org/])
 AC_REVISION([$Revision$])
 AC_CONFIG_SRCDIR([citserver.c])
 AC_PREFIX_DEFAULT(/usr/local/citadel)
@@ -17,9 +17,10 @@ AC_ARG_ENABLE(chkpwd, [  --disable-chkpwd        don't build 'chkpwd'])
 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 ],
@@ -31,10 +32,10 @@ AC_ARG_WITH(ssl,
 )
 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
-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_newt, [  --with-newt          use newt window library])
 
 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
        db_dir="$with_db"
@@ -42,16 +43,10 @@ if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
 else
        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 \
-         -o -f /usr/local/lib/libdb3.a -o -f /usr/local/lib/libdb3.so && db_dir=/usr/local
-
-       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
-       test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
-fi
+         && 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
 fi
 
 dnl By default, we only build the client (citadel and whobbs) unless we can
@@ -60,6 +55,7 @@ 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.
@@ -67,9 +63,16 @@ case "$host" in
        *-*-bsdi[123]*)
                test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
                AC_DEFINE(HAVE_NONREENTRANT_NETDB)
+               AC_MSG_RESULT([Old BSDI])
        ;;
        *-*-bsdi*)
                AC_DEFINE(HAVE_NONREENTRANT_NETDB)
+               AC_MSG_RESULT([BSD/OS])
+       ;;
+       dnl Curses support on Mac OS X is kind of screwed at the moment.
+       *-*-darwin*)
+               AC_DEFINE(DISABLE_CURSES)
+               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.
@@ -77,6 +80,7 @@ case "$host" in
                test -z "$CC" && CC=cc
                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*)
@@ -87,17 +91,31 @@ case "$host" in
                fi
                check_pthread=no
                PTHREAD_DEFS=-D_THREAD_SAFE
+               AC_MSG_RESULT([FreeBSD])
        ;;
        *-*-openbsd*)
                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
-DEFS="$DEFS $PTHREAD_DEFS"
+dnl DEFS="$DEFS $PTHREAD_DEFS"
 
 dnl Checks for programs.
 AC_PROG_CC
@@ -106,18 +124,28 @@ dnl Set up system-dependent compiler flags.
 if test "$GCC" = yes; then
        case "$host" in
                *-*-solaris*|alpha*-dec-osf*)
-                       CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
+                       CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
                ;;
                *)
-                       CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
+                       CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
                ;;
        esac
 fi
-AC_LIBTOOL_DLOPEN
-AC_LIBTOOL_WIN32_DLL
-AC_DISABLE_STATIC
-AC_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
+
+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_PROG_INSTALL
 AC_PROG_YACC
 missing_dir=`cd $ac_aux_dir && pwd`
@@ -138,7 +166,7 @@ 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)
@@ -148,14 +176,6 @@ if test "$ac_cv_func_connect" = no; then
         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 dynamic 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)
 
@@ -198,8 +218,9 @@ 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$with_ncurses" != xno; then
+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])
@@ -214,6 +235,8 @@ if test "$check_pthread" != no; then
        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"
@@ -324,7 +347,7 @@ if test "$with_ssl" != "no"; then
        fi
 fi
 
-if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
+if test "x$with_db" != xno; then
        test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
 
        dblib=""
@@ -332,38 +355,114 @@ if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
        if test -d "$db_dir/include/db4"; then
                CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
                dblib="db4"
-       elif test -d "$db_dir/include/db3"; then
-               CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
-               dblib="db3"
        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"
-       elif test -d /usr/include/db3; then
-               CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
-               dblib="db3"
        fi
 
-       AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
-               DATABASE=database_sleepycat.c
-               with_gdbm=no
-       ])
+
+       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
-       test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
-       test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
 
-       test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
+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
+
+if test "x$ok_zlib" = xyes ; then
+       SERVER_LIBS="-lz $SERVER_LIBS"
+       AC_DEFINE(HAVE_ZLIB)
+fi
+
+
+
+
+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
 
-        AC_CHECK_LIB(gdbm, gdbm_open,
-                [LIBS="-lgdbm $LIBS"
-                DATABASE=database.c
-                with_db=no])
+if test "x$ok_ldap" = xyes ; then
+       SERVER_LIBS="-lldap $SERVER_LIBS"
+       AC_DEFINE(HAVE_LDAP)
 fi
 
+
+
+
+dnl Checks for the newt window library.
+if test "x$with_newt" != xno ; then
+       AC_CHECK_HEADERS(newt.h,
+               [AC_CHECK_LIB(newt, newtInit,
+                       [ok_newt=yes],,
+       )])
+fi
+
+if test "x$ok_newt" = xyes ; then
+       SETUP_LIBS="-lnewt $SETUP_LIBS"
+       AC_DEFINE(HAVE_NEWT)
+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() {
+       float v;
+       int i;
+       sscanf(ICAL_VERSION, "%f", &v);
+       printf("libical version: %0.2f\n", v);
+       v = v * 100.0;
+       i = (int) v;
+       if (i >= 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)
+               ]
+       )
+fi
+
+
+
+
 dnl Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
@@ -373,7 +472,7 @@ 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 termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db3/db.h db4/db.h pthread.h netinet/in.h)
+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
@@ -383,16 +482,17 @@ if test "x$with_ncurses" != xno; then
        AC_CHECK_HEADERS(ncurses.h,,,[ ])
 fi
 
-AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
+AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
 [#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])
 
-AC_SUBST(SMTP)
-AC_SUBST(DOMAIN)
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -460,7 +560,7 @@ 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
-       test "$DATABASE" && TARGETS="client server utils serv_modules"
+       test "$DATABASE" && TARGETS="client server utils"
        if test "x$enable_threaded_client" != xno; then
                AC_DEFINE(THREADED_CLIENT)
        fi
@@ -468,6 +568,42 @@ 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
+#      ])
+
+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)
@@ -475,10 +611,20 @@ AC_SUBST(RESOLV)
 AC_SUBST(chkpwd_LIBS)
 AC_SUBST(TARGETS)
 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_CONFIG_FILES([Makefile])
 AC_OUTPUT
 
 if test -z "$DATABASE"; then
        AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
 fi
+
+echo ...
+echo ...
+echo "... On many operating systems, you must use GNU make (gmake) to compile"
+echo ... Citadel.
+echo ...
+echo ...