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