* make backtrace optional.
[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          Disable backtrace dumps in the syslog],
303                         [ if test "x$withval" != "xno" ; then
304                              AC_CHECK_FUNCS(backtrace)
305                           fi
306                         ]
307 )
308
309
310 if test "$ac_cv_func_gethostbyname" = no; then
311         AC_CHECK_LIB(nsl, gethostbyname)
312 fi
313
314 if test "$ac_cv_func_connect" = no; then
315         AC_CHECK_LIB(socket, connect)
316 fi
317
318 dnl Check for Solaris realtime support
319 AC_CHECK_LIB(rt, sched_yield)
320
321 dnl Determine the system's authentication capabilities.
322 dnl We currently support PAM, standard getpwnam(), and getspnam()
323 dnl (Linux shadow passwords)
324
325         if test "$with_pam" = yes; then
326                 save_LIBS=$LIBS
327                 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
328                         LIBS="-lpam $LIBS"])
329                 AC_CHECK_FUNCS(pam_start)
330                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
331         fi
332         if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
333                 save_LIBS=$LIBS
334                 AC_SEARCH_LIBS(getspnam, shadow, [
335                         if test "$ac_cv_search_getspnam" = -lshadow; then
336                                 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
337                         fi])
338                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
339                 if test "$ac_cv_func_crypt" = no; then
340                         AC_CHECK_LIB(crypt, crypt, [
341                                 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
342                                 test "$enable_chkpwd" = no && \
343                                         LIBS="-lcrypt $LIBS"])
344                 fi
345         fi
346
347 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
348 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
349
350 if test "x$with_ncurses" != "xno"; then
351         AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
352         AC_SEARCH_LIBS(scrollok, [ncurses curses])
353         AC_SEARCH_LIBS(initscr, [ncurses curses])
354 else
355         AC_SEARCH_LIBS(tgetent, [curses termcap])
356         AC_SEARCH_LIBS(initscr, [curses])
357 fi
358 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
359
360 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
361 dnl which the -pthread flag takes care of this.)
362 if test "$check_pthread" != no; then
363         AC_CHECK_LIB(pthread, pthread_create)
364         AC_CHECK_LIB(pthreads, pthread_create)
365 fi
366
367 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
368
369 # The big search for OpenSSL
370 if test "$with_ssl" != "no"; then
371         saved_LIBS="$LIBS"
372         saved_LDFLAGS="$LDFLAGS"
373         saved_CFLAGS="$CFLAGS"
374         if test "x$prefix" != "xNONE"; then
375                 tryssldir="$tryssldir $prefix"
376         fi
377         AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
378                 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
379                         CFLAGS="$saved_CFLAGS"
380                         LDFLAGS="$saved_LDFLAGS"
381                         LIBS="$saved_LIBS -lssl -lcrypto"
382         
383                         # Skip directories if they don't exist
384                         if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
385                                 continue;
386                         fi
387                         if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
388                                 # Try to use $ssldir/lib if it exists, otherwise
389                                 # $ssldir
390                                 if test -d "$ssldir/lib" ; then
391                                         LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
392                                         if test ! -z "$need_dash_r" ; then
393                                                 LDFLAGS="-R$ssldir/lib $LDFLAGS"
394                                         fi
395                                 else
396                                         LDFLAGS="-L$ssldir $saved_LDFLAGS"
397                                         if test ! -z "$need_dash_r" ; then
398                                                 LDFLAGS="-R$ssldir $LDFLAGS"
399                                         fi
400                                 fi
401                                 # Try to use $ssldir/include if it exists, otherwise
402                                 # $ssldir
403                                 if test -d "$ssldir/include" ; then
404                                         CFLAGS="-I$ssldir/include $saved_CFLAGS"
405                                 else
406                                         CFLAGS="-I$ssldir $saved_CFLAGS"
407                                 fi
408                         fi
409         
410                         # Basic test to check for compatible version and correct linking
411                         # *does not* test for RSA - that comes later.
412                         AC_TRY_RUN(
413                                 [
414         #include <string.h>
415         #include <openssl/rand.h>
416         int main(void)
417         {
418                 char a[2048];
419                 memset(a, 0, sizeof(a));
420                 RAND_add(a, sizeof(a), sizeof(a));
421                 return(RAND_status() <= 0);
422         }
423                                 ],
424                                 [
425                                         found_crypto=1
426                                         break;
427                                 ], []
428                         )
429         
430                         if test ! -z "$found_crypto" ; then
431                                 break;
432                         fi
433                 done
434         
435                 if test -z "$ssldir" ; then
436                         ssldir="(system)"
437                 fi
438         
439                 if test ! -z "$found_crypto" ; then
440                         ac_cv_openssldir=$ssldir
441                 else
442                         ac_cv_openssldir="no"
443                 fi
444         ])
445         LIBS="$saved_LIBS"
446         LDFLAGS="$saved_LDFLAGS"
447         CFLAGS="$saved_CFLAGS"
448         
449         if test "x$ac_cv_openssldir" != "xno" ; then
450                 AC_DEFINE(HAVE_OPENSSL, [], [Define if you have OpenSSL.])
451                 LIBS="-lssl -lcrypto $LIBS"
452                 dnl Need to recover ssldir - test above runs in subshell
453                 ssldir=$ac_cv_openssldir
454                 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
455                         # Try to use $ssldir/lib if it exists, otherwise
456                         # $ssldir
457                         if test -d "$ssldir/lib" ; then
458                                 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
459                                 if test ! -z "$need_dash_r" ; then
460                                         LDFLAGS="-R$ssldir/lib $LDFLAGS"
461                                 fi
462                         else
463                                 LDFLAGS="-L$ssldir $saved_LDFLAGS"
464                                 if test ! -z "$need_dash_r" ; then
465                                         LDFLAGS="-R$ssldir $LDFLAGS"
466                                 fi
467                         fi
468                         # Try to use $ssldir/include if it exists, otherwise
469                         # $ssldir
470                         if test -d "$ssldir/include" ; then
471                                 CFLAGS="-I$ssldir/include $saved_CFLAGS"
472                         else
473                                 CFLAGS="-I$ssldir $saved_CFLAGS"
474                         fi
475                 fi
476         fi
477 fi
478
479 if test "x$with_db" != xno; then
480         test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
481
482         dblib=""
483
484         if test -d "$db_dir/include/db4"; then
485                 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
486                 dblib="db4"
487         elif test "$db_dir"; then
488                 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
489         elif test -d /usr/include/db4; then
490                 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
491                 dblib="db4"
492         fi
493
494
495         AC_CHECK_DB([db db-4.1 db-4 db4],
496                     [
497                      DATABASE=database_sleepycat.c
498                     ],
499                     AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
500                                   library.  Use --with-db=PATH to specify
501                                   the path]]))
502
503 fi
504
505 dnl Checks for the zlib compression library.
506 if test "x$with_zlib" != xno ; then
507         AC_CHECK_HEADERS(zlib.h,
508                 [AC_CHECK_LIB(z, zlibVersion,
509                         [ok_zlib=yes],,
510         )])
511 fi
512
513 if test "x$ok_zlib" = xyes ; then
514         SERVER_LIBS="-lz $SERVER_LIBS"
515         AC_DEFINE(HAVE_ZLIB, [], [define this if you have zlib compression available])
516 fi
517
518
519
520
521 dnl Checks for the OpenLDAP client library.
522 if test "x$with_ldap" != xno ; then
523         AC_CHECK_HEADERS(ldap.h,
524                 [AC_CHECK_LIB(ldap, ldap_init,
525                         [ok_ldap=yes],,
526         )])
527 fi
528
529 if test "x$ok_ldap" = xyes ; then
530         SERVER_LIBS="-lldap $SERVER_LIBS"
531         AC_DEFINE(HAVE_LDAP, [], [define this if you have OpenLDAP client available])
532 fi
533
534
535
536
537
538 dnl Checks for the libsieve mailbox sorting library.
539 if test "x$with_libsieve" != xno ; then
540         AC_CHECK_HEADERS(sieve2.h,
541                 [AC_CHECK_LIB(sieve, sieve2_license,
542                         [ok_libsieve=yes],,
543         )])
544 fi
545
546 if test "x$ok_libsieve" = xyes ; then
547         SERVER_LIBS="-lsieve $SERVER_LIBS"
548         AC_DEFINE(HAVE_LIBSIEVE, [], [define this if you have the libsieve mailbox filtering library available])
549 fi
550
551
552
553
554 dnl Checks for the libical calendaring library.
555 if test "x$with_libical" != xno ; then
556         AC_CHECK_HEADERS(ical.h,
557                 [AC_CHECK_LIB(ical, icalcomponent_new,
558                         [ok_libical=yes],,
559         )])
560 fi
561
562 if test "x$ok_libical" = xyes ; then
563
564         AC_TRY_RUN(
565                 [
566 #include <ical.h>
567 main() {
568         int major, minor, v;
569         sscanf(ICAL_VERSION, "%d.%d", &major, &minor);
570         v = 100*major + minor;
571         printf("libical version: %i\n", v);
572         if (v >= 24) {
573                 printf("This version is ok.\n");
574                 return(0);
575         }
576         printf("libical 0.24 or newer required.\n");
577         printf("Citadel will be built without calendar support.\n");
578         return(1);
579 }
580                 ], 
581                 [
582                         SERVER_LIBS="-lical $SERVER_LIBS"
583                         AC_DEFINE(HAVE_LIBICAL, [], [define this if you have the libical calendaring library available])
584                 ]
585         )
586 fi
587
588
589
590
591 dnl Checks for header files.
592 AC_HEADER_DIRENT
593 AC_HEADER_STDC
594 AC_HEADER_SYS_WAIT
595
596 dnl
597 dnl TODO: for the DB header checks, we should check whether the headers
598 dnl define db_env_create, somehow
599 dnl
600 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)
601
602 dnl
603 dnl need to check if this is actually compilable, sometimes there are
604 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
605 dnl
606 if test "x$with_ncurses" != xno; then
607         AC_CHECK_HEADERS(ncurses.h,,,[ ])
608 fi
609
610 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
611 [#ifdef HAVE_SYS_TYPES_H
612 #include <sys/types.h>
613 #endif
614 #ifdef HAVE_NETINET_IN_H
615 #include <netinet/in.h>
616 #endif
617 #ifdef HAVE_ARPA_NAMESER_H
618 #include <arpa/nameser.h>
619 #endif])
620
621
622 dnl Checks for typedefs, structures, and compiler characteristics.
623 AC_C_CONST
624 AC_TYPE_PID_T
625 AC_TYPE_SIZE_T
626 AC_HEADER_TIME
627
628 dnl defined in acinclude.m4:
629 CIT_STRUCT_TM
630
631 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
632 [AC_TRY_COMPILE([#include <sys/types.h>
633 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
634 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
635 if test $ac_cv_struct_ut_type = yes; then
636         AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
637 fi
638
639 AC_CACHE_CHECK(
640         [for call semantics from getpwuid_r], 
641         ac_cv_call_getpwuid_r,
642         [AC_TRY_COMPILE([#include <sys/types.h>
643 #include <pwd.h>], 
644                          [
645                                 struct passwd pw, *pwp;
646                                 char pwbuf[64];
647                                 uid_t uid;
648
649                                 getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
650                         ],
651                         ac_cv_call_getpwuid_r=yes, 
652                         ac_cv_call_getpwuid_r=no)
653         ])
654
655 if test $ac_cv_call_getpwuid_r = no; then
656         AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
657         AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
658         AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
659         AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
660 else
661         AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
662         AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
663         AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
664 fi
665
666 dnl AC_CHECK_FUNCS(res_query)
667 AC_CACHE_CHECK([for the resolver calls], 
668                ac_cv_resquery_ok, 
669 [AC_TRY_COMPILE([#include <netinet/in.h>
670 #include <arpa/nameser.h>
671 #include <resolv.h>], 
672                 [
673                         char *domain="www.google.com";
674                         u_char *answer;
675                         int len;
676                         len = res_query( domain, C_IN, T_A, answer, PACKETSZ );
677                 ],
678                 ac_cv_resquery_ok=yes,
679                 ac_cv_resquery_ok=no)
680 ])
681 echo "resquery: $ac_cv_resquery_ok"
682
683 dnl if test "$ac_cv_resquery_ok" = "no" ; then
684 dnl    AC_DEFINE(RES_QUERY_GONE, "#error resquery not here. can't continue.")
685 dnl fi
686
687
688
689 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
690 [AC_TRY_COMPILE([#include <sys/types.h>
691 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
692 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
693 if test $ac_cv_struct_ut_host = yes; then
694         AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
695 fi
696
697 dnl Checks for library functions.
698 AC_FUNC_GETPGRP
699 AC_PROG_GCC_TRADITIONAL
700 AC_TYPE_SIGNAL
701 AC_FUNC_VPRINTF
702 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
703
704 dnl Now check for pthreads
705
706 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
707 dnl we need to include pthread.h
708
709 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
710 [AC_TRY_LINK([#include <pthread.h>],
711 [       pthread_t thread;
712
713         /* The GNU C library defines this for functions which it implements
714            to always fail with ENOSYS.  Some functions are actually named
715            something starting with __ and the normal name is an alias.  */
716 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
717         choke me
718 #else
719         pthread_cancel(thread);
720 #endif],
721 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
722 if test "$ac_cv_func_pthread_cancel" = yes; then
723         AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
724 fi
725
726 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
727 [AC_TRY_LINK([#include <pthread.h>],
728 [       /* The GNU C library defines this for functions which it implements
729            to always fail with ENOSYS.  Some functions are actually named
730            something starting with __ and the normal name is an alias.  */
731 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
732         choke me
733 #else
734         pthread_create(NULL, NULL, NULL, NULL);
735 #endif],
736 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
737 if test "$ac_cv_func_pthread_create" = yes; then
738         test "$DATABASE" && TARGETS="client server utils"
739         if test "x$enable_threaded_client" != xno; then
740                 AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
741         fi
742 fi
743
744 AC_REPLACE_FUNCS(snprintf getutline)
745
746 AC_CACHE_CHECK([the weather], ac_cv_weather, [
747         sleep 1
748         echo $ECHO_N "opening your window... $ECHO_C" >&6
749         sleep 2
750         month=`date | cut -f 2 -d ' '`
751         case $month in
752         Dec | Jan | Feb)
753                 ac_cv_weather="it's cold!"
754                 ;;
755         Mar | Apr)
756                 ac_cv_weather="it's wet!"
757                 ;;
758         Jul | Aug)
759                 ac_cv_weather="it's hot!"
760                 ;;
761         Oct | Nov)
762                 ac_cv_weather="it's cool"
763                 ;;
764         May | Jun | Sep | *)
765                 ac_cv_weather="it's fine"
766                 ;;
767         esac
768         ])
769
770
771
772 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
773         number=`date | cut -c 19`
774         case $number in
775         7)
776                 ac_cv_under_the_bed="lunatics and monsters found"
777                 ;;
778         *)
779                 ac_cv_under_the_bed="dust bunnies found"
780                 ;;
781         esac
782         ])
783
784 dnl Done! Now write the Makefile and sysdep.h
785 AC_SUBST(AUTH)
786 AC_SUBST(RESOLV)
787 AC_SUBST(chkpwd_LIBS)
788 AC_SUBST(TARGETS)
789 AC_SUBST(DATABASE)
790 AC_SUBST(SERVER_LDFLAGS)
791 AC_SUBST(SERVER_LIBS)
792 AC_SUBST(SETUP_LIBS)
793 AC_CONFIG_HEADER(sysdep.h)
794 AC_CONFIG_FILES([Makefile])
795 AC_OUTPUT(database_cleanup.sh)
796
797 if test -z "$DATABASE"; then
798         AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
799 fi
800
801 echo ------------------------------------------------------------------------
802 echo 'zlib compression:                ' $ok_zlib
803 echo 'Calendar support:                ' $ok_libical
804 echo 'LDAP support:                    ' $ok_ldap
805 echo 'Sieve mailbox filtering support: ' $ok_libsieve
806 echo 
807 echo 'Note: if you are not using Linux, make sure you are using GNU make'
808 echo '(gmake) to compile Citadel.'
809 echo