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