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