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