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