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