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