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