fb370e35dbacb96dcf99177403242366f99a12f5
[citadel.git] / citadel / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl $Id$
3 AC_PREREQ(2.52)
4 AC_INIT([Citadel], [7.11], [http://www.citadel.org/])
5 AC_REVISION([$Revision: 5108 $])
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", [define this to the Citadel home directory])
10         ssl_dir="$ac_default_prefix/keys"
11 else
12         AC_DEFINE_UNQUOTED(CTDLDIR, "$prefix", [define this to the Citadel home directory])
13         ssl_dir="$prefix/keys"
14 fi
15
16
17 dnl Make sure we see all GNU and Solaris extensions.
18 AC_GNU_SOURCE
19
20
21 dnl Checks for the Datadir
22 AC_ARG_WITH(datadir, 
23                     [  --with-datadir          directory to store the databases under],
24                         [ if test "x$withval" != "xno" ; then
25                                               AC_DEFINE(HAVE_DATA_DIR,[],[use alternate database location?])
26                                               AC_DEFINE_UNQUOTED(DATA_DIR, "$withval",[define, if the user suplied a data-directory to use.])
27                                               MAKE_DATA_DIR=$withval
28                                               AC_SUBST(MAKE_DATA_DIR)
29                           fi
30                         ]
31 )
32
33 dnl Checks for the Datadir
34 AC_ARG_WITH(staticdatadir, 
35                     [  --with-staticdatadir    directory to store citadels system messages under],
36                         [ if test "x$withval" != "xno" ; then
37                                                   AC_DEFINE(HAVE_STATICDATA_DIR, [], [should we activate an alternate static text location?])
38                                                   AC_DEFINE_UNQUOTED(STATICDATA_DIR, "$withval", [where do we put our static text data?])
39                                                   MAKE_STATICDATA_DIR=$withval
40                                                   AC_SUBST(MAKE_STATICDATA_DIR)
41                           fi
42                         ]
43 )
44
45
46 dnl Checks for the SSLdir
47 dnl this is a bit different than the rest, 
48 dnl because of the citadel used to have a keys/ subdir.
49 AC_ARG_WITH(ssldir, 
50                     [  --with-ssldir          directory to store the ssl certificates under],
51                         [ if test "x$withval" != "xno" ; then
52                                               
53                                                   ssl_dir="$withval"
54                           fi
55                         AC_SUBST(MAKE_SSL_DIR)
56                         ]
57 )
58 AC_DEFINE_UNQUOTED(SSL_DIR, "$ssl_dir", [were should we put our keys?])
59
60
61 dnl Checks for the spooldir
62 AC_ARG_WITH(spooldir, 
63                         [  --with-spooldir         directory to keep queues under],
64                         [ if test "x$withval" != "xno" ; then
65                                                 AC_DEFINE(HAVE_SPOOL_DIR, [], [enable alternate spool dir?])
66                                                 AC_DEFINE_UNQUOTED(SPOOL_DIR,"$withval", [where do we place our spool dirs?])
67                                                 MAKE_SPOOL_DIR=$withval
68                                                 AC_SUBST(MAKE_SPOOL_DIR)
69                            fi
70                         ]
71 )
72
73
74 dnl Checks for the Configdir
75 AC_ARG_WITH(sysconfdir, 
76                         [  --with-sysconfdir       directory to store the configs under],
77                         [ if test "x$withval" != "xno" ; then
78                                             AC_DEFINE(HAVE_ETC_DIR, [], [should we search our system config in an alternate place?])
79                                                 AC_DEFINE_UNQUOTED(ETC_DIR, "$withval", [where to search our config files])
80                                                 MAKE_ETC_DIR=$withval
81                                                 AC_SUBST(MAKE_ETC_DIR)
82                           fi
83                         ]
84 )
85
86 dnl Checks for where to put our utilities
87 AC_ARG_WITH(utility-bindir, 
88                         [  --with-utility-bindir       directory where to find helper binaries],
89                         [ if test "x$withval" != "xno" ; then
90                                             AC_DEFINE(HAVE_UTILBIN_DIR,[],[should we put our helper binaries to another location?])
91                                                 AC_DEFINE_UNQUOTED(UTILBIN_DIR, "$withval", [were to put our helper programs])
92                                                 MAKE_UTILBIN_DIR=$withval
93                                                 AC_SUBST(MAKE_UTILBIN_DIR)
94                           fi
95                         ]
96 )
97
98
99 dnl Checks for the run-dir for the sockets
100 AC_ARG_WITH(rundir, 
101                         [  --with-rundir           directory to place runtime files (UDS) to?],
102                         [ if test "x$withval" != "xno" ; then
103                                             AC_DEFINE(HAVE_RUN_DIR, [], [should we put our non volatile files elsewhere?])
104                                                 AC_DEFINE_UNQUOTED(RUN_DIR, "$withval", [define, where the config should go in unix style])
105                                                 MAKE_RUN_DIR=$withval
106                                                 AC_SUBST(MAKE_RUN_DIR)
107                           fi
108                         ]
109 )
110
111
112 dnl Checks for the Pseudo Random Generator sockets TODO: this keeps being default.
113 AC_DEFINE_UNQUOTED(EGD_POOL, "/var/run/egd-pool", [place to keep our pseudo random generator file])
114 AC_ARG_WITH(egdpool, 
115                         [  --with-egdpool          the socket from Pseudo Random Generator, defaults to /var/run/egd-pool],
116                         [ if test "x$withval" != "xno" ; then
117                                                 AC_DEFINE_UNQUOTED(EGD_POOL, "$withval", [the socket from Pseudo Random Generator])
118                           fi
119                         ]
120 )
121
122
123 AC_ARG_WITH(docdir,
124                         [  --with-docdir           where to install the documentation. default: /usr/local/citadel/],
125                         [ if test "x$withval" != "xno" ; then
126                                         MAKE_DOC_DIR=$withval
127                                         AC_SUBST(MAKE_DOC_DIR)
128                           fi
129                         ]
130 )
131
132
133
134 AC_ARG_ENABLE(threaded-client, [  --disable-threaded-client
135                           disable multithreaded client])
136
137 AC_ARG_ENABLE(pie, [  --enable-pie            build position-independent executables])
138
139 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
140 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
141 AC_ARG_WITH(db, [  --with-db@<:@=DIR@:>@         use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
142 AC_ARG_WITH(ssl,
143         [  --with-ssl=PATH         Specify path to OpenSSL installation ],
144         [
145                 if test "x$withval" != "xno" ; then
146                         tryssldir=$withval
147                 fi
148         ]
149 )
150 AC_ARG_WITH(ncurses, [  --without-ncurses       don't use ncurses])
151
152 AC_ARG_WITH(with_zlib, [  --with-zlib             use zlib compression if present])
153 AC_ARG_WITH(with_ldap, [  --with-ldap             use OpenLDAP client library])
154 AC_ARG_WITH(with_libical, [  --with-libical          use libical calendaring library])
155 AC_ARG_WITH(with_libsieve, [  --with-libsieve         use libsieve mail sorting library])
156
157 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
158         db_dir="$with_db"
159         with_db=yes
160 else
161         test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
162           -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
163           && db_dir=/usr/local
164
165         test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
166         test -d /usr/local/BerkeleyDB.4.2 && db_dir=/usr/local/BerkeleyDB.4.2
167         test -d /usr/local/BerkeleyDB.4.3 && db_dir=/usr/local/BerkeleyDB.4.3
168         test -d /usr/local/BerkeleyDB.4.4 && db_dir=/usr/local/BerkeleyDB.4.4
169         test -d /usr/local/BerkeleyDB.4.5 && db_dir=/usr/local/BerkeleyDB.4.5
170 fi
171
172 dnl By default, we only build the client (citadel and whobbs) unless we can
173 dnl figure out how to build with POSIX threads.
174 TARGETS=client
175
176 AC_CANONICAL_HOST
177 PTHREAD_DEFS=-D_REENTRANT
178 AC_MSG_CHECKING([how to compile with POSIX threads])
179 case "$host" in
180         dnl BSDI 3.0 wants relocatable object modules instead of shared libs
181         dnl for dlopen(), and has a wrapper script to link with shared libs.
182         dnl Also has stupid non-reentrant gethostbyaddr() and friends.
183         *-*-bsdi[123]*)
184                 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
185                 AC_DEFINE(HAVE_NONREENTRANT_NETDB,[], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
186                 AC_MSG_RESULT([Old BSDI])
187         ;;
188         *-*-bsdi*)
189                 AC_DEFINE(HAVE_NONREENTRANT_NETDB, [], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
190                 AC_MSG_RESULT([BSD/OS])
191         ;;
192         dnl Curses support on Mac OS X is kind of screwed at the moment.
193         dnl TCP buffering isn't ideal under OS X. This define should also be
194         dnl checked in other cases of OS X-Linux differences.
195         *-*-darwin*)
196                 AC_DEFINE(DISABLE_CURSES,[],[define this to disable use of curses])
197                 AC_DEFINE(HAVE_DARWIN, [], [define if using OS X/Darwin])
198                 AC_MSG_RESULT([Mac OS X])
199         ;;
200         dnl Digital Unix has an odd way to build for pthreads, and we can't
201         dnl build pthreads programs with gcc due to header problems.
202         alpha*-dec-osf*)
203                 test -z "$CC" && CC=cc
204                 LIBS="-lpthread -lexc $LIBS"
205                 check_pthread=no
206                 AC_MSG_RESULT([Tru64 or Digital UNIX])
207         ;;
208         dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
209         *-*-freebsd*)
210                 if test "$with_kthread" = yes; then
211                         LIBS="-kthread $LIBS"
212                 else
213                         LIBS="-pthread $LIBS"
214                 fi
215                 check_pthread=no
216                 PTHREAD_DEFS=-D_THREAD_SAFE
217                 AC_MSG_RESULT([FreeBSD])
218         ;;
219         *-*-openbsd*)
220                 LIBS="-pthread $LIBS"
221                 check_pthread=no
222                 PTHREAD_DEFS=-pthread
223                 AC_MSG_RESULT([OpenBSD])
224         ;;
225         *-*-linux*)
226                 PTHREAD_DEFS="-D_REENTRANT -pthread"
227                 AC_MSG_RESULT([Linux])
228         ;;
229         *-*-solaris*)
230                 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
231                 AC_MSG_RESULT([Solaris])
232         ;;
233         *-*-cygwin*)
234                 SERVER_LDFLAGS="-Wl,-subsystem,windows"
235                 AC_MSG_RESULT([Cygwin])
236         ;;
237         *)
238                 AC_MSG_RESULT([default])
239         ;;
240 esac
241 dnl DEFS="$DEFS $PTHREAD_DEFS"
242
243
244 dnl Checks for programs.
245 AC_PROG_CC
246
247 dnl Set up system-dependent compiler flags.
248 if test "$GCC" = yes; then
249         if test "$CC" = icc; then
250                 CFLAGS="$CFLAGS -w1"
251         else
252                 case "$host" in
253                         *-*-solaris*|alpha*-dec-osf*)
254                                 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
255                         ;;
256                         *)
257                         CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
258                         ;;
259                 esac
260         fi
261 fi
262
263 if test "x$enable_pie" = xyes; then
264         save_CFLAGS="$CFLAGS"
265         save_LDFLAGS="$LDFLAGS"
266         CFLAGS="$CFLAGS -fpie"
267         LDFLAGS="$LDFLAGS -pie -fpie"
268         AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
269         [AC_TRY_LINK([], [],
270         ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
271         if test $ac_cv_pie_fpie = no; then
272                 CFLAGS="$save_CFLAGS"
273                 LDFLAGS="$save_LDFLAGS"
274         fi
275 fi
276
277 AC_PROG_INSTALL
278 AC_PROG_YACC
279 missing_dir=`cd $ac_aux_dir && pwd`
280 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
281 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
282
283 dnl Checks for system services.
284
285 dnl Check the size of various builtin types; see typesize.h (error)
286 AC_CHECK_SIZEOF(char, 0)
287 AC_CHECK_SIZEOF(short, 0)
288 AC_CHECK_SIZEOF(int, 0)
289 AC_CHECK_SIZEOF(long, 0)
290 dnl AC_CHECK_SIZEOF(long long, 0)
291
292 dnl Checks for libraries.
293
294 dnl We want to test for the following in libc before checking for their
295 dnl respective libraries, because some systems (like Irix) have both, and the
296 dnl non-libc versions may be broken.
297 AC_CHECK_FUNCS(crypt gethostbyname connect )
298
299
300 dnl disable backtrace if we don't want it.
301 AC_ARG_WITH(backtrace, 
302                     [  --with-backtrace          enable backtrace dumps in the syslog],
303                         [ if test "x$withval" != "xno" ; then
304                              CFLAGS="$CFLAGS  -rdynamic "
305                              LDFLAGS="$LDFLAGS  -rdynamic "
306                              SERVER_LDFLAGS="$SERVER_LDFLAGS  -rdynamic "
307                              AC_CHECK_FUNCS(backtrace)
308                           fi
309                         ]
310 )
311
312 dnl disable backtrace if we don't want it.
313 AC_ARG_WITH(gprof, 
314                     [  --with-gprof          enable profiling],
315                         [ if test "x$withval" != "xno" ; then
316                              CFLAGS="$CFLAGS  -pg "
317                              LDFLAGS="$LDFLAGS  -pg "
318                              SERVER_LDFLAGS="$SERVER_LDFLAGS  -pg "
319                           fi
320                         ]
321 )
322
323
324 if test "$ac_cv_func_gethostbyname" = no; then
325         AC_CHECK_LIB(nsl, gethostbyname)
326 fi
327
328 if test "$ac_cv_func_connect" = no; then
329         AC_CHECK_LIB(socket, connect)
330 fi
331
332 dnl Check for Solaris realtime support
333 AC_CHECK_LIB(rt, sched_yield)
334
335 dnl Determine the system's authentication capabilities.
336 dnl We currently support PAM, standard getpwnam(), and getspnam()
337 dnl (Linux shadow passwords)
338
339         if test "$with_pam" = yes; then
340                 save_LIBS=$LIBS
341                 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
342                         LIBS="-lpam $LIBS"])
343                 AC_CHECK_FUNCS(pam_start)
344                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
345         fi
346         if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
347                 save_LIBS=$LIBS
348                 AC_SEARCH_LIBS(getspnam, shadow, [
349                         if test "$ac_cv_search_getspnam" = -lshadow; then
350                                 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
351                         fi])
352                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
353                 if test "$ac_cv_func_crypt" = no; then
354                         AC_CHECK_LIB(crypt, crypt, [
355                                 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
356                                 test "$enable_chkpwd" = no && \
357                                         LIBS="-lcrypt $LIBS"])
358                 fi
359         fi
360
361 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
362 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
363
364 if test "x$with_ncurses" != "xno"; then
365         AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
366         AC_SEARCH_LIBS(scrollok, [ncurses curses])
367         AC_SEARCH_LIBS(initscr, [ncurses curses])
368 else
369         AC_SEARCH_LIBS(tgetent, [curses termcap])
370         AC_SEARCH_LIBS(initscr, [curses])
371 fi
372 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
373
374 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
375 dnl which the -pthread flag takes care of this.)
376 if test "$check_pthread" != no; then
377         AC_CHECK_LIB(pthread, pthread_create)
378         AC_CHECK_LIB(pthreads, pthread_create)
379 fi
380
381 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
382
383 # The big search for OpenSSL
384 if test "$with_ssl" != "no"; then
385         saved_LIBS="$LIBS"
386         saved_LDFLAGS="$LDFLAGS"
387         saved_CFLAGS="$CFLAGS"
388         if test "x$prefix" != "xNONE"; then
389                 tryssldir="$tryssldir $prefix"
390         fi
391         AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
392                 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
393                         CFLAGS="$saved_CFLAGS"
394                         LDFLAGS="$saved_LDFLAGS"
395                         LIBS="$saved_LIBS -lssl -lcrypto"
396         
397                         # Skip directories if they don't exist
398                         if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
399                                 continue;
400                         fi
401                         if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
402                                 # Try to use $ssldir/lib if it exists, otherwise
403                                 # $ssldir
404                                 if test -d "$ssldir/lib" ; then
405                                         LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
406                                         if test ! -z "$need_dash_r" ; then
407                                                 LDFLAGS="-R$ssldir/lib $LDFLAGS"
408                                         fi
409                                 else
410                                         LDFLAGS="-L$ssldir $saved_LDFLAGS"
411                                         if test ! -z "$need_dash_r" ; then
412                                                 LDFLAGS="-R$ssldir $LDFLAGS"
413                                         fi
414                                 fi
415                                 # Try to use $ssldir/include if it exists, otherwise
416                                 # $ssldir
417                                 if test -d "$ssldir/include" ; then
418                                         CFLAGS="-I$ssldir/include $saved_CFLAGS"
419                                 else
420                                         CFLAGS="-I$ssldir $saved_CFLAGS"
421                                 fi
422                         fi
423         
424                         # Basic test to check for compatible version and correct linking
425                         # *does not* test for RSA - that comes later.
426                         AC_TRY_RUN(
427                                 [
428         #include <string.h>
429         #include <openssl/rand.h>
430         int main(void)
431         {
432                 char a[2048];
433                 memset(a, 0, sizeof(a));
434                 RAND_add(a, sizeof(a), sizeof(a));
435                 return(RAND_status() <= 0);
436         }
437                                 ],
438                                 [
439                                         found_crypto=1
440                                         break;
441                                 ], []
442                         )
443         
444                         if test ! -z "$found_crypto" ; then
445                                 break;
446                         fi
447                 done
448         
449                 if test -z "$ssldir" ; then
450                         ssldir="(system)"
451                 fi
452         
453                 if test ! -z "$found_crypto" ; then
454                         ac_cv_openssldir=$ssldir
455                 else
456                         ac_cv_openssldir="no"
457                 fi
458         ])
459         LIBS="$saved_LIBS"
460         LDFLAGS="$saved_LDFLAGS"
461         CFLAGS="$saved_CFLAGS"
462         
463         if test "x$ac_cv_openssldir" != "xno" ; then
464                 AC_DEFINE(HAVE_OPENSSL, [], [Define if you have OpenSSL.])
465                 LIBS="-lssl -lcrypto $LIBS"
466                 dnl Need to recover ssldir - test above runs in subshell
467                 ssldir=$ac_cv_openssldir
468                 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
469                         # Try to use $ssldir/lib if it exists, otherwise
470                         # $ssldir
471                         if test -d "$ssldir/lib" ; then
472                                 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
473                                 if test ! -z "$need_dash_r" ; then
474                                         LDFLAGS="-R$ssldir/lib $LDFLAGS"
475                                 fi
476                         else
477                                 LDFLAGS="-L$ssldir $saved_LDFLAGS"
478                                 if test ! -z "$need_dash_r" ; then
479                                         LDFLAGS="-R$ssldir $LDFLAGS"
480                                 fi
481                         fi
482                         # Try to use $ssldir/include if it exists, otherwise
483                         # $ssldir
484                         if test -d "$ssldir/include" ; then
485                                 CFLAGS="-I$ssldir/include $saved_CFLAGS"
486                         else
487                                 CFLAGS="-I$ssldir $saved_CFLAGS"
488                         fi
489                 fi
490         fi
491 fi
492
493 if test "x$with_db" != xno; then
494         test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
495
496         dblib=""
497
498         if test -d "$db_dir/include/db4"; then
499                 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
500                 dblib="db4"
501         elif test "$db_dir"; then
502                 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
503         elif test -d /usr/include/db4; then
504                 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
505                 dblib="db4"
506         fi
507
508
509         AC_CHECK_DB([db db-4.1 db-4 db4],
510                     [
511                      DATABASE=database_sleepycat.c
512                     ],
513                     AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
514                                   library.  Use --with-db=PATH to specify
515                                   the path]]))
516
517 fi
518
519 dnl Checks for the zlib compression library.
520 if test "x$with_zlib" != xno ; then
521         AC_CHECK_HEADERS(zlib.h,
522                 [AC_CHECK_LIB(z, zlibVersion,
523                         [ok_zlib=yes],,
524         )])
525 fi
526
527 if test "x$ok_zlib" = xyes ; then
528         SERVER_LIBS="-lz $SERVER_LIBS"
529         AC_DEFINE(HAVE_ZLIB, [], [define this if you have zlib compression available])
530 fi
531
532
533
534
535 dnl Checks for the OpenLDAP client library.
536 if test "x$with_ldap" != xno ; then
537         AC_CHECK_HEADERS(ldap.h,
538                 [AC_CHECK_LIB(ldap, ldap_init,
539                         [ok_ldap=yes],,
540         )])
541 fi
542
543 if test "x$ok_ldap" = xyes ; then
544         SERVER_LIBS="-lldap $SERVER_LIBS"
545         AC_DEFINE(HAVE_LDAP, [], [define this if you have OpenLDAP client available])
546 fi
547
548
549
550
551
552 dnl Checks for the libsieve mailbox sorting library.
553 if test "x$with_libsieve" != xno ; then
554         AC_CHECK_HEADERS(sieve2.h,
555                 [AC_CHECK_LIB(sieve, sieve2_license,
556                         [ok_libsieve=yes],,
557         )])
558 fi
559
560 if test "x$ok_libsieve" = xyes ; then
561         SERVER_LIBS="-lsieve $SERVER_LIBS"
562         AC_DEFINE(HAVE_LIBSIEVE, [], [define this if you have the libsieve mailbox filtering library available])
563 fi
564
565
566
567
568 dnl Checks for the libical calendaring library.
569 if test "x$with_libical" != xno ; then
570         AC_CHECK_HEADERS(ical.h,
571                 [AC_CHECK_LIB(ical, icalcomponent_new,
572                         [ok_libical=yes],,
573         )])
574 fi
575
576 if test "x$ok_libical" = xyes ; then
577
578         AC_TRY_RUN(
579                 [
580 #include <ical.h>
581 main() {
582         int major, minor, v;
583         sscanf(ICAL_VERSION, "%d.%d", &major, &minor);
584         v = 100*major + minor;
585         printf("libical version: %i\n", v);
586         if (v >= 24) {
587                 printf("This version is ok.\n");
588                 return(0);
589         }
590         printf("libical 0.24 or newer required.\n");
591         printf("Citadel will be built without calendar support.\n");
592         return(1);
593 }
594                 ], 
595                 [
596                         SERVER_LIBS="-lical $SERVER_LIBS"
597                         AC_DEFINE(HAVE_LIBICAL, [], [define this if you have the libical calendaring library available])
598                 ]
599         )
600 fi
601
602
603
604
605 dnl Checks for header files.
606 AC_HEADER_DIRENT
607 AC_HEADER_STDC
608 AC_HEADER_SYS_WAIT
609
610 dnl
611 dnl TODO: for the DB header checks, we should check whether the headers
612 dnl define db_env_create, somehow
613 dnl
614 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h malloc.h termios.h sys/ioctl.h sys/select.h sys/stat.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)
615
616 dnl
617 dnl need to check if this is actually compilable, sometimes there are
618 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
619 dnl
620 if test "x$with_ncurses" != xno; then
621         AC_CHECK_HEADERS(ncurses.h,,,[ ])
622 fi
623
624 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
625 [#ifdef HAVE_SYS_TYPES_H
626 #include <sys/types.h>
627 #endif
628 #ifdef HAVE_NETINET_IN_H
629 #include <netinet/in.h>
630 #endif
631 #ifdef HAVE_ARPA_NAMESER_H
632 #include <arpa/nameser.h>
633 #endif])
634
635
636 dnl Checks for typedefs, structures, and compiler characteristics.
637 AC_C_CONST
638 AC_TYPE_PID_T
639 AC_TYPE_SIZE_T
640 AC_HEADER_TIME
641
642 dnl defined in acinclude.m4:
643 CIT_STRUCT_TM
644
645 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
646 [AC_TRY_COMPILE([#include <sys/types.h>
647 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
648 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
649 if test $ac_cv_struct_ut_type = yes; then
650         AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
651 fi
652
653 AC_CACHE_CHECK(
654         [for call semantics from getpwuid_r], 
655         ac_cv_call_getpwuid_r,
656         [AC_TRY_COMPILE([#include <sys/types.h>
657 #include <pwd.h>], 
658                          [
659                                 struct passwd pw, *pwp;
660                                 char pwbuf[64];
661                                 uid_t uid;
662
663                                 getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
664                         ],
665                         ac_cv_call_getpwuid_r=yes, 
666                         ac_cv_call_getpwuid_r=no)
667         ])
668
669 if test $ac_cv_call_getpwuid_r = no; then
670         AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
671         AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
672         AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
673         AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
674 else
675         AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
676         AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
677         AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
678 fi
679
680 dnl AC_CHECK_FUNCS(res_query)
681 AC_CACHE_CHECK([for the resolver calls], 
682                ac_cv_resquery_ok, 
683 [AC_TRY_COMPILE([#include <netinet/in.h>
684 #include <arpa/nameser.h>
685 #include <resolv.h>], 
686                 [
687                         char *domain="www.google.com";
688                         u_char *answer;
689                         int len;
690                         len = res_query( domain, C_IN, T_A, answer, PACKETSZ );
691                 ],
692                 ac_cv_resquery_ok=yes,
693                 ac_cv_resquery_ok=no)
694 ])
695 echo "resquery: $ac_cv_resquery_ok"
696
697 dnl if test "$ac_cv_resquery_ok" = "no" ; then
698 dnl    AC_DEFINE(RES_QUERY_GONE, "#error resquery not here. can't continue.")
699 dnl fi
700
701
702
703 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
704 [AC_TRY_COMPILE([#include <sys/types.h>
705 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
706 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
707 if test $ac_cv_struct_ut_host = yes; then
708         AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
709 fi
710
711 dnl Checks for library functions.
712 AC_FUNC_GETPGRP
713 AC_PROG_GCC_TRADITIONAL
714 AC_TYPE_SIGNAL
715 AC_FUNC_VPRINTF
716 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
717
718 dnl Now check for pthreads
719
720 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
721 dnl we need to include pthread.h
722
723 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
724 [AC_TRY_LINK([#include <pthread.h>],
725 [       pthread_t thread;
726
727         /* The GNU C library defines this for functions which it implements
728            to always fail with ENOSYS.  Some functions are actually named
729            something starting with __ and the normal name is an alias.  */
730 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
731         choke me
732 #else
733         pthread_cancel(thread);
734 #endif],
735 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
736 if test "$ac_cv_func_pthread_cancel" = yes; then
737         AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
738 fi
739
740 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
741 [AC_TRY_LINK([#include <pthread.h>],
742 [       /* The GNU C library defines this for functions which it implements
743            to always fail with ENOSYS.  Some functions are actually named
744            something starting with __ and the normal name is an alias.  */
745 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
746         choke me
747 #else
748         pthread_create(NULL, NULL, NULL, NULL);
749 #endif],
750 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
751 if test "$ac_cv_func_pthread_create" = yes; then
752         test "$DATABASE" && TARGETS="client server utils"
753         if test "x$enable_threaded_client" != xno; then
754                 AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
755         fi
756 fi
757
758 AC_REPLACE_FUNCS(snprintf getutline)
759
760 AC_CACHE_CHECK([the weather], ac_cv_weather, [
761         sleep 1
762         echo $ECHO_N "opening your window... $ECHO_C" >&6
763         sleep 2
764         month=`date | cut -f 2 -d ' '`
765         case $month in
766         Dec | Jan | Feb)
767                 ac_cv_weather="it's cold!"
768                 ;;
769         Mar | Apr)
770                 ac_cv_weather="it's wet!"
771                 ;;
772         Jul | Aug)
773                 ac_cv_weather="it's hot!"
774                 ;;
775         Oct | Nov)
776                 ac_cv_weather="it's cool"
777                 ;;
778         May | Jun | Sep | *)
779                 ac_cv_weather="it's fine"
780                 ;;
781         esac
782         ])
783
784
785
786 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
787         number=`date | cut -c 19`
788         case $number in
789         7)
790                 ac_cv_under_the_bed="lunatics and monsters found"
791                 ;;
792         *)
793                 ac_cv_under_the_bed="dust bunnies found"
794                 ;;
795         esac
796         ])
797
798 dnl Done! Now write the Makefile and sysdep.h
799 AC_SUBST(AUTH)
800 AC_SUBST(RESOLV)
801 AC_SUBST(chkpwd_LIBS)
802 AC_SUBST(TARGETS)
803 AC_SUBST(DATABASE)
804 AC_SUBST(SERVER_LDFLAGS)
805 AC_SUBST(SERVER_LIBS)
806 AC_SUBST(SETUP_LIBS)
807 AC_CONFIG_HEADER(sysdep.h)
808 AC_CONFIG_FILES([Makefile])
809 AC_OUTPUT(database_cleanup.sh)
810
811 if test -z "$DATABASE"; then
812         AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
813 fi
814
815 echo ------------------------------------------------------------------------
816 echo 'zlib compression:                ' $ok_zlib
817 echo 'Calendar support:                ' $ok_libical
818 echo 'LDAP support:                    ' $ok_ldap
819 echo 'Sieve mailbox filtering support: ' $ok_libsieve
820 echo 
821 echo 'Note: if you are not using Linux, make sure you are using GNU make'
822 echo '(gmake) to compile Citadel.'
823 echo