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