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