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