1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel], [7.02], [http://www.citadel.org/])
5 AC_REVISION([$Revision$])
6 AC_CONFIG_SRCDIR([citserver.c])
7 AC_PREFIX_DEFAULT(/usr/local/citadel)
8 if test "$prefix" = NONE; then
9 AC_DEFINE_UNQUOTED(CTDLDIR, "$ac_default_prefix")
11 AC_DEFINE_UNQUOTED(CTDLDIR, "$prefix")
15 dnl Make sure we see all GNU and Solaris extensions.
19 dnl Checks for the Datadir
21 [ --with-datadir directory to store the databases under],
22 [ if test "x$withval" != "xno" ; then
23 AC_DEFINE(HAVE_DATA_DIR)
24 AC_DEFINE_UNQUOTED(DATA_DIR, "$withval")
25 MAKE_DATA_DIR=$withval
26 AC_SUBST(MAKE_DATA_DIR)
31 dnl Checks for the spooldir
33 [ --with-spooldir directory to keep queues under],
34 [ if test "x$withval" != "xno" ; then
35 AC_DEFINE(HAVE_SPOOL_DIR)
36 AC_DEFINE_UNQUOTED(SPOOL_DIR,"$withval")
37 MAKE_SPOOL_DIR=$withval
38 AC_SUBST(MAKE_SPOOL_DIR)
44 dnl Checks for the Configdir
45 AC_ARG_WITH(sysconfdir,
46 [ --with-sysconfdir directory to store the configs under],
47 [ if test "x$withval" != "xno" ; then
48 AC_DEFINE(HAVE_ETC_DIR)
49 AC_DEFINE_UNQUOTED(ETC_DIR, "$withval")
51 AC_SUBST(MAKE_ETC_DIR)
57 dnl Checks for the run-dir for the sockets
59 [ --with-rundir directory to store the configs under],
60 [ if test "x$withval" != "xno" ; then
61 AC_DEFINE(HAVE_RUN_DIR)
62 AC_DEFINE_UNQUOTED(RUN_DIR, "$withval")
64 AC_SUBST(MAKE_RUN_DIR)
70 dnl Checks for the Pseudo Random Generator sockets TODO: this keeps being default.
71 AC_DEFINE_UNQUOTED(EGD_POOL, "/var/run/egd-pool")
73 [ --with-egdpool the socket from Pseudo Random Generator, defaults to /var/run/egd-pool],
74 [ if test "x$withval" != "xno" ; then
75 AC_DEFINE_UNQUOTED(EGD_POOL, "$withval")
82 [ --with-docdir where to install the documentation. default: /usr/local/citadel/],
83 [ if test "x$withval" != "xno" ; then
85 AC_SUBST(MAKE_DOC_DIR)
92 AC_ARG_ENABLE(chkpwd, [ --disable-chkpwd don't build 'chkpwd'])
94 AC_ARG_ENABLE(threaded-client, [ --disable-threaded-client
95 disable multithreaded client])
97 AC_ARG_ENABLE(pie, [ --enable-pie build position-independent executables])
99 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
100 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
101 AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
103 [ --with-ssl=PATH Specify path to OpenSSL installation ],
105 if test "x$withval" != "xno" ; then
110 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
112 AC_ARG_WITH(with_zlib, [ --with-zlib use zlib compression if present])
113 AC_ARG_WITH(with_ldap, [ --with-ldap use OpenLDAP client library])
114 AC_ARG_WITH(with_libical, [ --with-libical use libical calendaring library])
115 AC_ARG_WITH(with_libsieve, [ --with-libsieve use libsieve mail sorting library])
117 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
121 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
122 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
125 test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
126 test -d /usr/local/BerkeleyDB.4.2 && db_dir=/usr/local/BerkeleyDB.4.2
127 test -d /usr/local/BerkeleyDB.4.3 && db_dir=/usr/local/BerkeleyDB.4.3
130 dnl By default, we only build the client (citadel and whobbs) unless we can
131 dnl figure out how to build with POSIX threads.
135 PTHREAD_DEFS=-D_REENTRANT
136 AC_MSG_CHECKING([how to compile with POSIX threads])
138 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
139 dnl for dlopen(), and has a wrapper script to link with shared libs.
140 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
142 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
143 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
144 AC_MSG_RESULT([Old BSDI])
147 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
148 AC_MSG_RESULT([BSD/OS])
150 dnl Curses support on Mac OS X is kind of screwed at the moment.
152 AC_DEFINE(DISABLE_CURSES)
153 AC_MSG_RESULT([Mac OS X])
155 dnl Digital Unix has an odd way to build for pthreads, and we can't
156 dnl build pthreads programs with gcc due to header problems.
158 test -z "$CC" && CC=cc
159 LIBS="-lpthread -lexc $LIBS"
161 AC_MSG_RESULT([Tru64 or Digital UNIX])
163 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
165 if test "$with_kthread" = yes; then
166 LIBS="-kthread $LIBS"
168 LIBS="-pthread $LIBS"
171 PTHREAD_DEFS=-D_THREAD_SAFE
172 AC_MSG_RESULT([FreeBSD])
175 LIBS="-pthread $LIBS"
177 PTHREAD_DEFS=-pthread
178 AC_MSG_RESULT([OpenBSD])
181 PTHREAD_DEFS="-D_REENTRANT -pthread"
182 AC_MSG_RESULT([Linux])
185 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
186 AC_MSG_RESULT([Solaris])
189 SERVER_LDFLAGS="-Wl,-subsystem,windows"
190 AC_MSG_RESULT([Cygwin])
193 AC_MSG_RESULT([default])
196 dnl DEFS="$DEFS $PTHREAD_DEFS"
199 dnl Checks for programs.
202 dnl Set up system-dependent compiler flags.
203 if test "$GCC" = yes; then
204 if test "$CC" = icc; then
208 *-*-solaris*|alpha*-dec-osf*)
209 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
212 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
218 if test "x$enable_pie" = xyes; then
219 save_CFLAGS="$CFLAGS"
220 save_LDFLAGS="$LDFLAGS"
221 CFLAGS="$CFLAGS -fpie"
222 LDFLAGS="$LDFLAGS -pie -fpie"
223 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
225 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
226 if test $ac_cv_pie_fpie = no; then
227 CFLAGS="$save_CFLAGS"
228 LDFLAGS="$save_LDFLAGS"
234 missing_dir=`cd $ac_aux_dir && pwd`
235 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
236 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
238 dnl Checks for system services.
240 dnl Check the size of various builtin types; see typesize.h (error)
241 AC_CHECK_SIZEOF(char, 0)
242 AC_CHECK_SIZEOF(short, 0)
243 AC_CHECK_SIZEOF(int, 0)
244 AC_CHECK_SIZEOF(long, 0)
245 dnl AC_CHECK_SIZEOF(long long, 0)
247 dnl Checks for libraries.
249 dnl We want to test for the following in libc before checking for their
250 dnl respective libraries, because some systems (like Irix) have both, and the
251 dnl non-libc versions may be broken.
252 AC_CHECK_FUNCS(crypt gethostbyname connect)
254 if test "$ac_cv_func_gethostbyname" = no; then
255 AC_CHECK_LIB(nsl, gethostbyname)
258 if test "$ac_cv_func_connect" = no; then
259 AC_CHECK_LIB(socket, connect)
262 dnl Check for Solaris realtime support
263 AC_CHECK_LIB(rt, sched_yield)
265 dnl Determine the system's authentication capabilities.
266 dnl We currently support PAM, standard getpwnam(), and getspnam()
267 dnl (Linux shadow passwords)
269 if test "$with_pam" = yes; then
271 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
273 AC_CHECK_FUNCS(pam_start)
274 test "$enable_chkpwd" != no && LIBS=$save_LIBS
276 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
278 AC_SEARCH_LIBS(getspnam, shadow, [
279 if test "$ac_cv_search_getspnam" = -lshadow; then
280 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
282 test "$enable_chkpwd" != no && LIBS=$save_LIBS
283 if test "$ac_cv_func_crypt" = no; then
284 AC_CHECK_LIB(crypt, crypt, [
285 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
286 test "$enable_chkpwd" = no && \
287 LIBS="-lcrypt $LIBS"])
290 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
291 if test "$enable_chkpwd" != no; then
292 AC_DEFINE(ENABLE_CHKPWD)
299 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
300 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
302 if test "x$with_ncurses" != "xno"; then
303 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
304 AC_SEARCH_LIBS(scrollok, [ncurses curses])
305 AC_SEARCH_LIBS(initscr, [ncurses curses])
307 AC_SEARCH_LIBS(tgetent, [curses termcap])
308 AC_SEARCH_LIBS(initscr, [curses])
310 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
312 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
313 dnl which the -pthread flag takes care of this.)
314 if test "$check_pthread" != no; then
315 AC_CHECK_LIB(pthread, pthread_create)
316 AC_CHECK_LIB(pthreads, pthread_create)
319 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
321 # The big search for OpenSSL
322 if test "$with_ssl" != "no"; then
324 saved_LDFLAGS="$LDFLAGS"
325 saved_CFLAGS="$CFLAGS"
326 if test "x$prefix" != "xNONE"; then
327 tryssldir="$tryssldir $prefix"
329 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
330 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
331 CFLAGS="$saved_CFLAGS"
332 LDFLAGS="$saved_LDFLAGS"
333 LIBS="$saved_LIBS -lssl -lcrypto"
335 # Skip directories if they don't exist
336 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
339 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
340 # Try to use $ssldir/lib if it exists, otherwise
342 if test -d "$ssldir/lib" ; then
343 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
344 if test ! -z "$need_dash_r" ; then
345 LDFLAGS="-R$ssldir/lib $LDFLAGS"
348 LDFLAGS="-L$ssldir $saved_LDFLAGS"
349 if test ! -z "$need_dash_r" ; then
350 LDFLAGS="-R$ssldir $LDFLAGS"
353 # Try to use $ssldir/include if it exists, otherwise
355 if test -d "$ssldir/include" ; then
356 CFLAGS="-I$ssldir/include $saved_CFLAGS"
358 CFLAGS="-I$ssldir $saved_CFLAGS"
362 # Basic test to check for compatible version and correct linking
363 # *does not* test for RSA - that comes later.
367 #include <openssl/rand.h>
371 memset(a, 0, sizeof(a));
372 RAND_add(a, sizeof(a), sizeof(a));
373 return(RAND_status() <= 0);
382 if test ! -z "$found_crypto" ; then
387 if test -z "$ssldir" ; then
391 if test ! -z "$found_crypto" ; then
392 ac_cv_openssldir=$ssldir
394 ac_cv_openssldir="no"
398 LDFLAGS="$saved_LDFLAGS"
399 CFLAGS="$saved_CFLAGS"
401 if test "x$ac_cv_openssldir" != "xno" ; then
402 AC_DEFINE(HAVE_OPENSSL)
403 LIBS="-lssl -lcrypto $LIBS"
404 dnl Need to recover ssldir - test above runs in subshell
405 ssldir=$ac_cv_openssldir
406 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
407 # Try to use $ssldir/lib if it exists, otherwise
409 if test -d "$ssldir/lib" ; then
410 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
411 if test ! -z "$need_dash_r" ; then
412 LDFLAGS="-R$ssldir/lib $LDFLAGS"
415 LDFLAGS="-L$ssldir $saved_LDFLAGS"
416 if test ! -z "$need_dash_r" ; then
417 LDFLAGS="-R$ssldir $LDFLAGS"
420 # Try to use $ssldir/include if it exists, otherwise
422 if test -d "$ssldir/include" ; then
423 CFLAGS="-I$ssldir/include $saved_CFLAGS"
425 CFLAGS="-I$ssldir $saved_CFLAGS"
431 if test "x$with_db" != xno; then
432 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
436 if test -d "$db_dir/include/db4"; then
437 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
439 elif test "$db_dir"; then
440 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
441 elif test -d /usr/include/db4; then
442 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
447 AC_CHECK_DB([db db-4.1 db-4 db4],
449 DATABASE=database_sleepycat.c
451 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
452 library. Use --with-db=PATH to specify
457 dnl Checks for the zlib compression library.
458 if test "x$with_zlib" != xno ; then
459 AC_CHECK_HEADERS(zlib.h,
460 [AC_CHECK_LIB(z, zlibVersion,
465 if test "x$ok_zlib" = xyes ; then
466 SERVER_LIBS="-lz $SERVER_LIBS"
473 dnl Checks for the OpenLDAP client library.
474 if test "x$with_ldap" != xno ; then
475 AC_CHECK_HEADERS(ldap.h,
476 [AC_CHECK_LIB(ldap, ldap_init,
481 if test "x$ok_ldap" = xyes ; then
482 SERVER_LIBS="-lldap $SERVER_LIBS"
490 dnl Checks for the libsieve mailbox sorting library.
491 if test "x$with_libsieve" != xno ; then
492 AC_CHECK_HEADERS(sieve2.h,
493 [AC_CHECK_LIB(sieve, sieve2_license,
498 if test "x$ok_libsieve" = xyes ; then
499 SERVER_LIBS="-lsieve $SERVER_LIBS"
500 AC_DEFINE(HAVE_LIBSIEVE)
506 dnl Checks for the libical calendaring library.
507 if test "x$with_libical" != xno ; then
508 AC_CHECK_HEADERS(ical.h,
509 [AC_CHECK_LIB(ical, icalcomponent_new,
514 if test "x$ok_libical" = xyes ; then
521 sscanf(ICAL_VERSION, "%d.%d", &major, &minor);
522 v = 100*major + minor;
523 printf("libical version: %i\n", v);
525 printf("This version is ok.\n");
528 printf("libical 0.24 or newer required.\n");
529 printf("Citadel will be built without calendar support.\n");
534 SERVER_LIBS="-lical $SERVER_LIBS"
535 AC_DEFINE(HAVE_LIBICAL)
543 dnl Checks for header files.
549 dnl TODO: for the DB header checks, we should check whether the headers
550 dnl define db_env_create, somehow
552 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)
555 dnl need to check if this is actually compilable, sometimes there are
556 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
558 if test "x$with_ncurses" != xno; then
559 AC_CHECK_HEADERS(ncurses.h,,,[ ])
562 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
563 [#ifdef HAVE_SYS_TYPES_H
564 #include <sys/types.h>
566 #ifdef HAVE_NETINET_IN_H
567 #include <netinet/in.h>
569 #ifdef HAVE_ARPA_NAMESER_H
570 #include <arpa/nameser.h>
574 dnl Checks for typedefs, structures, and compiler characteristics.
580 dnl defined in acinclude.m4:
583 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
584 [AC_TRY_COMPILE([#include <sys/types.h>
585 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
586 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
587 if test $ac_cv_struct_ut_type = yes; then
588 AC_DEFINE(HAVE_UT_TYPE)
591 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
592 [AC_TRY_COMPILE([#include <sys/types.h>
593 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
594 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
595 if test $ac_cv_struct_ut_host = yes; then
596 AC_DEFINE(HAVE_UT_HOST)
599 dnl Checks for library functions.
601 AC_PROG_GCC_TRADITIONAL
604 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
606 dnl Now check for pthreads
608 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
609 dnl we need to include pthread.h
611 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
612 [AC_TRY_LINK([#include <pthread.h>],
615 /* The GNU C library defines this for functions which it implements
616 to always fail with ENOSYS. Some functions are actually named
617 something starting with __ and the normal name is an alias. */
618 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
621 pthread_cancel(thread);
623 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
624 if test "$ac_cv_func_pthread_cancel" = yes; then
625 AC_DEFINE(HAVE_PTHREAD_CANCEL)
628 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
629 [AC_TRY_LINK([#include <pthread.h>],
630 [ /* The GNU C library defines this for functions which it implements
631 to always fail with ENOSYS. Some functions are actually named
632 something starting with __ and the normal name is an alias. */
633 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
636 pthread_create(NULL, NULL, NULL, NULL);
638 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
639 if test "$ac_cv_func_pthread_create" = yes; then
640 test "$DATABASE" && TARGETS="client server utils"
641 if test "x$enable_threaded_client" != xno; then
642 AC_DEFINE(THREADED_CLIENT)
646 AC_REPLACE_FUNCS(snprintf getutline)
648 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
650 # echo $ECHO_N "opening your window... $ECHO_C" >&6
652 # month=`date | cut -f 2 -d ' '`
655 # ac_cv_weather="it's cold!"
658 # ac_cv_weather="it's wet!"
661 # ac_cv_weather="it's hot!"
664 # ac_cv_weather="it's cool"
666 # May | Jun | Sep | *)
667 # ac_cv_weather="it's fine"
674 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
675 number=`date | cut -c 19`
678 ac_cv_under_the_bed="lunatics and monsters found"
681 ac_cv_under_the_bed="dust bunnies found"
686 dnl Done! Now write the Makefile and sysdep.h
690 AC_SUBST(chkpwd_LIBS)
693 AC_SUBST(SERVER_LDFLAGS)
694 AC_SUBST(SERVER_LIBS)
696 AC_CONFIG_HEADER(sysdep.h)
697 AC_CONFIG_FILES([Makefile])
698 AC_OUTPUT(database_cleanup.sh)
700 if test -z "$DATABASE"; then
701 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
704 echo ------------------------------------------------------------------------
705 echo 'zlib compression: ' $ok_zlib
706 echo 'Calendar support: ' $ok_libical
707 echo 'LDAP support: ' $ok_ldap
708 echo 'Sieve mailbox filtering support: ' $ok_libsieve
710 echo 'Note: if you are not using Linux, make sure you are using GNU make'
711 echo '(gmake) to compile Citadel.'