Version 7.38 of citadel and libcitadel
[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.38], [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 dnl Make sure we see all GNU and Solaris extensions.
17 AC_GNU_SOURCE
18
19
20 dnl Checks for the Datadir
21 AC_ARG_WITH(datadir, 
22                     [  --with-datadir          directory to store the databases under],
23                         [ if test "x$withval" != "xno" ; then
24                                               AC_DEFINE(HAVE_DATA_DIR,[],[use alternate database location?])
25                                               AC_DEFINE_UNQUOTED(DATA_DIR, "$withval",[define, if the user suplied a data-directory to use.])
26                                               MAKE_DATA_DIR=$withval
27                                               AC_SUBST(MAKE_DATA_DIR)
28                           fi
29                         ]
30 )
31
32
33 dnl Checks for the helpDatadir
34 AC_ARG_WITH(helpdir, 
35                     [  --with-helpdir          directory to store the helpfiles under],
36                         [ if test "x$withval" != "xno" ; then
37                                               AC_DEFINE(HAVE_HELP_DIR,[],[use alternate database location?])
38                                               AC_DEFINE_UNQUOTED(HELP_DIR, "$withval",[define, if the user suplied a helpfile-directory to use.])
39                                               MAKE_HELP_DIR=$withval
40                                               AC_SUBST(MAKE_HELP_DIR)
41                           fi
42                         ]
43 )
44
45 dnl Checks for the Static Datadir
46 AC_ARG_WITH(staticdatadir, 
47                     [  --with-staticdatadir    directory to store citadels system messages under],
48                         [ if test "x$withval" != "xno" ; then
49                                                   AC_DEFINE(HAVE_STATICDATA_DIR, [], [should we activate an alternate static text location?])
50                                                   AC_DEFINE_UNQUOTED(STATICDATA_DIR, "$withval", [where do we put our static text data?])
51                                                   MAKE_STATICDATA_DIR=$withval
52                                                   AC_SUBST(MAKE_STATICDATA_DIR)
53                           fi
54                         ]
55 )
56
57
58 dnl Checks for the SSLdir
59 dnl this is a bit different than the rest, 
60 dnl because of the citadel used to have a keys/ subdir.
61 AC_ARG_WITH(ssldir, 
62                     [  --with-ssldir           directory to store the ssl certificates under],
63                         [ if test "x$withval" != "xno" ; then
64                                               
65                                                   ssl_dir="$withval"
66                           fi
67                         AC_SUBST(MAKE_SSL_DIR)
68                         ]
69 )
70 AC_DEFINE_UNQUOTED(SSL_DIR, "$ssl_dir", [were should we put our keys?])
71
72
73 dnl Checks for the spooldir
74 AC_ARG_WITH(spooldir, 
75                         [  --with-spooldir         directory to keep queues under],
76                         [ if test "x$withval" != "xno" ; then
77                                                 AC_DEFINE(HAVE_SPOOL_DIR, [], [enable alternate spool dir?])
78                                                 AC_DEFINE_UNQUOTED(SPOOL_DIR,"$withval", [where do we place our spool dirs?])
79                                                 MAKE_SPOOL_DIR=$withval
80                                                 AC_SUBST(MAKE_SPOOL_DIR)
81                            fi
82                         ]
83 )
84
85
86 dnl Checks for the Configdir
87 AC_ARG_WITH(sysconfdir, 
88                         [  --with-sysconfdir       directory to store the configs under],
89                         [ if test "x$withval" != "xno" ; then
90                                             AC_DEFINE(HAVE_ETC_DIR, [], [should we search our system config in an alternate place?])
91                                                 AC_DEFINE_UNQUOTED(ETC_DIR, "$withval", [where to search our config files])
92                                                 MAKE_ETC_DIR=$withval
93                                                 AC_SUBST(MAKE_ETC_DIR)
94                           fi
95                         ]
96 )
97
98 dnl Checks for where to put our utilities
99 AC_ARG_WITH(utility-bindir, 
100                         [  --with-utility-bindir   directory where to find helper binaries],
101                         [ if test "x$withval" != "xno" ; then
102                                             AC_DEFINE(HAVE_UTILBIN_DIR,[],[should we put our helper binaries to another location?])
103                                                 AC_DEFINE_UNQUOTED(UTILBIN_DIR, "$withval", [were to put our helper programs])
104                                                 MAKE_UTILBIN_DIR=$withval
105                                                 AC_SUBST(MAKE_UTILBIN_DIR)
106                           fi
107                         ]
108 )
109
110
111 dnl Checks for the run-dir for the sockets
112 AC_ARG_WITH(rundir, 
113                         [  --with-rundir           directory to place runtime files (UDS) to?],
114                         [ if test "x$withval" != "xno" ; then
115                                             AC_DEFINE(HAVE_RUN_DIR, [], [should we put our non volatile files elsewhere?])
116                                                 AC_DEFINE_UNQUOTED(RUN_DIR, "$withval", [define, where the config should go in unix style])
117                                                 MAKE_RUN_DIR=$withval
118                                                 AC_SUBST(MAKE_RUN_DIR)
119                           fi
120                         ]
121 )
122
123
124 dnl Checks for the Pseudo Random Generator sockets TODO: this keeps being default.
125 AC_DEFINE_UNQUOTED(EGD_POOL, "/var/run/egd-pool", [place to keep our pseudo random generator file])
126 AC_ARG_WITH(egdpool, 
127                         [  --with-egdpool          the socket from Pseudo Random Generator, defaults to /var/run/egd-pool],
128                         [ if test "x$withval" != "xno" ; then
129                                                 AC_DEFINE_UNQUOTED(EGD_POOL, "$withval", [the socket from Pseudo Random Generator])
130                           fi
131                         ]
132 )
133
134
135 AC_ARG_WITH(docdir,
136                         [  --with-docdir           where to install the documentation. default: /usr/local/citadel/],
137                         [ if test "x$withval" != "xno" ; then
138                                         MAKE_DOC_DIR=$withval
139                                         AC_SUBST(MAKE_DOC_DIR)
140                           fi
141                         ]
142 )
143
144
145 dnl Here is the check for a libc integrated iconv
146 AC_ARG_ENABLE(iconv,
147         [  --disable-iconv         do not use iconv charset conversion],
148         ok_iconv=no, ok_iconv=yes)
149
150 AC_MSG_CHECKING(Checking to see if your system supports iconv)
151 AC_TRY_RUN([
152         #include <iconv.h>
153         main() {
154                 iconv_t ic = (iconv_t)(-1) ;
155                 ic = iconv_open("UTF-8", "us-ascii");
156                 iconv_close(ic);
157                 exit(0);
158         }
159  ],
160                 [
161                   ok_iconv=yes
162                   AC_MSG_RESULT([yes])
163                 ],
164                 [ 
165                   ok_iconv=no
166                   AC_MSG_RESULT([no])
167                 ]
168 )
169
170 dnl Check for iconv in external libiconv
171 if test "$ok_iconv" = no; then
172         AC_MSG_CHECKING(Checking for an external libiconv)
173         OLD_LDFLAGS="$LDFLAGS"
174         LDFLAGS="$LDFLAGS -liconv"
175         AC_TRY_RUN([
176                         #include <iconv.h>
177                         main() {
178                                 iconv_t ic = (iconv_t)(-1) ;
179                                 ic = iconv_open("UTF-8", "us-ascii");
180                                 iconv_close(ic);
181                         }
182                 ],
183                         [
184                           ok_iconv=yes
185                           AC_MSG_RESULT([yes])
186                         ],
187                         [ 
188                           ok_iconv=no
189                           LDFLAGS="$OLD_LDFLAGS"
190                           AC_MSG_RESULT([no])
191                         ]
192                 )
193 fi      
194 if test "$ok_iconv" != "no"; then
195         AC_MSG_RESULT(WebCit will be built with character set conversion.)
196         AC_DEFINE(HAVE_ICONV,[],[whether we have iconv for charset conversion])
197 else
198         AC_MSG_RESULT(WebCit will be built without character set conversion.)
199 fi
200
201 AC_CHECK_LIB(intl, libintl_bindtextdomain, [LDFLAGS="$LDFLAGS -lintl"])
202
203
204
205 AC_ARG_ENABLE(threaded-client, [  --disable-threaded-client
206                           disable multithreaded client])
207
208 AC_ARG_ENABLE(pie, [  --enable-pie            build position-independent executables])
209
210 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
211 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
212 AC_ARG_WITH(db, [  --with-db@<:@=DIR@:>@         use Berkeley DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
213 AC_ARG_WITH(ssl,
214         [  --with-ssl=PATH         Specify path to OpenSSL installation ],
215         [
216                 if test "x$withval" != "xno" ; then
217                         tryssldir=$withval
218                 fi
219         ]
220 )
221 AC_ARG_WITH(ncurses, [  --without-ncurses       don't use ncurses])
222
223 AC_ARG_WITH(with_zlib, [  --with-zlib             use zlib compression if present])
224 AC_ARG_WITH(with_ldap, [  --with-ldap             use OpenLDAP client library])
225 AC_ARG_WITH(with_libdspam, [  --with-libdspam         use libdspam mail spam scanning library])
226
227 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
228         db_dir="$with_db"
229         with_db=yes
230 else
231         test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
232           -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
233           && db_dir=/usr/local
234
235         test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
236         test -d /usr/local/BerkeleyDB.4.2 && db_dir=/usr/local/BerkeleyDB.4.2
237         test -d /usr/local/BerkeleyDB.4.3 && db_dir=/usr/local/BerkeleyDB.4.3
238         test -d /usr/local/BerkeleyDB.4.4 && db_dir=/usr/local/BerkeleyDB.4.4
239         test -d /usr/local/BerkeleyDB.4.5 && db_dir=/usr/local/BerkeleyDB.4.5
240 fi
241
242 dnl By default, we only build the client (citadel and whobbs) unless we can
243 dnl figure out how to build with POSIX threads.
244 TARGETS=client
245
246 AC_CANONICAL_HOST
247 PTHREAD_DEFS=-D_REENTRANT
248 AC_MSG_CHECKING([how to compile with POSIX threads])
249 case "$host" in
250         dnl BSDI 3.0 wants relocatable object modules instead of shared libs
251         dnl for dlopen(), and has a wrapper script to link with shared libs.
252         dnl Also has stupid non-reentrant gethostbyaddr() and friends.
253         *-*-bsdi[123]*)
254                 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
255                 AC_DEFINE(HAVE_NONREENTRANT_NETDB,[], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
256                 AC_MSG_RESULT([Old BSDI])
257         ;;
258         *-*-bsdi*)
259                 AC_DEFINE(HAVE_NONREENTRANT_NETDB, [], [define this if the OS has broken non-reentrant gethostby{name,addr}() ])
260                 AC_MSG_RESULT([BSD/OS])
261         ;;
262         dnl Curses support on Mac OS X is kind of screwed at the moment.
263         dnl TCP buffering isn't ideal under OS X. This define should also be
264         dnl checked in other cases of OS X-Linux differences.
265         *-*-darwin*)
266                 AC_DEFINE(DISABLE_CURSES,[],[define this to disable use of curses])
267                 AC_DEFINE(HAVE_DARWIN, [], [define if using OS X/Darwin])
268                 AC_MSG_RESULT([Mac OS X])
269         ;;
270         dnl Digital Unix has an odd way to build for pthreads, and we can't
271         dnl build pthreads programs with gcc due to header problems.
272         alpha*-dec-osf*)
273                 test -z "$CC" && CC=cc
274                 LIBS="-lpthread -lexc $LIBS"
275                 check_pthread=no
276                 AC_MSG_RESULT([Tru64 or Digital UNIX])
277         ;;
278         dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
279         *-*-freebsd*)
280                 if test "$with_kthread" = yes; then
281                         LIBS="-kthread $LIBS"
282                 else
283                         LIBS="-pthread $LIBS"
284                 fi
285                 check_pthread=no
286                 PTHREAD_DEFS=-D_THREAD_SAFE
287                 AC_MSG_RESULT([FreeBSD])
288         ;;
289         *-*-openbsd*)
290                 LIBS="-pthread $LIBS"
291                 check_pthread=no
292                 PTHREAD_DEFS=-pthread
293                 AC_MSG_RESULT([OpenBSD])
294         ;;
295         *-*-linux*)
296                 PTHREAD_DEFS="-D_REENTRANT -pthread"
297                 AC_MSG_RESULT([Linux])
298         ;;
299         *-*-solaris*)
300                 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
301                 AC_MSG_RESULT([Solaris])
302         ;;
303         *-*-cygwin*)
304                 SERVER_LDFLAGS="-Wl,-subsystem,windows"
305                 AC_MSG_RESULT([Cygwin])
306         ;;
307         *)
308                 AC_MSG_RESULT([default])
309         ;;
310 esac
311 dnl DEFS="$DEFS $PTHREAD_DEFS"
312
313
314 dnl Checks for programs.
315 AC_PROG_CC
316
317
318
319 dnl Set up system-dependent compiler flags.
320 if test "$GCC" = yes; then
321         if test "$CC" = icc; then
322                 CFLAGS="$CFLAGS -w1"
323         else
324                 case "$host" in
325                         *-*-solaris*|alpha*-dec-osf*)
326                                 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
327                         ;;
328                         *)
329                         CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
330                         ;;
331                 esac
332         fi
333 fi
334
335 if test "x$enable_pie" = xyes; then
336         save_CFLAGS="$CFLAGS"
337         save_LDFLAGS="$LDFLAGS"
338         CFLAGS="$CFLAGS -fpie"
339         LDFLAGS="$LDFLAGS -pie -fpie"
340         AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
341         [AC_TRY_LINK([], [],
342         ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
343         if test $ac_cv_pie_fpie = no; then
344                 CFLAGS="$save_CFLAGS"
345                 LDFLAGS="$save_LDFLAGS"
346         fi
347 fi
348
349 AC_MSG_CHECKING([how to create dependancy checks])
350                  if test -n "`$CC -V 2>&1 |grep Sun`"; then 
351                         DEPEND_FLAG=-xM;
352                  else 
353                         DEPEND_FLAG=-M
354                  fi
355 AC_SUBST(DEPEND_FLAG)
356
357
358 AC_PROG_INSTALL
359 AC_PROG_YACC
360 missing_dir=`cd $ac_aux_dir && pwd`
361 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
362 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
363
364 dnl Checks for system services.
365
366 dnl Check the size of various builtin types; see typesize.h (error)
367 AC_CHECK_SIZEOF(char, 0)
368 AC_CHECK_SIZEOF(short, 0)
369 AC_CHECK_SIZEOF(int, 0)
370 AC_CHECK_SIZEOF(long, 0)
371 AC_CHECK_SIZEOF(size_t, 0)
372 dnl AC_CHECK_SIZEOF(long long, 0)
373
374 dnl Checks for libraries.
375
376 dnl We want to test for the following in libc before checking for their
377 dnl respective libraries, because some systems (like Irix) have both, and the
378 dnl non-libc versions may be broken.
379 AC_CHECK_FUNCS(crypt gethostbyname connect flock getpwnam_r getpwuid_r)
380
381
382 dnl disable backtrace if we don't want it.
383 AC_ARG_WITH(backtrace, 
384                     [  --with-backtrace        enable backtrace dumps in the syslog],
385                         [ if test "x$withval" != "xno" ; then
386                              CFLAGS="$CFLAGS  -rdynamic "
387                              LDFLAGS="$LDFLAGS  -rdynamic "
388                              SERVER_LDFLAGS="$SERVER_LDFLAGS  -rdynamic "
389                              AC_CHECK_FUNCS(backtrace)
390                           fi
391                         ]
392 )
393
394 dnl disable backtrace if we don't want it.
395 AC_ARG_WITH(gprof, 
396                     [  --with-gprof            enable profiling],
397                         [ if test "x$withval" != "xno" ; then
398                              CFLAGS="$CFLAGS  -pg "
399                              LDFLAGS="$LDFLAGS  -pg "
400                              SERVER_LDFLAGS="$SERVER_LDFLAGS  -pg "
401                           fi
402                         ]
403 )
404
405 dnl disable thread table reporting
406 AC_ARG_WITH(threadlog,
407                 [  --with-threadlog        enable logging of thread table],
408                         [ if test "x$withval" != "xno" ; then
409                                 AC_DEFINE(WITH_THREADLOG, [], [Define if you want logging of the thread tables.])
410                           fi
411                         ]
412 )
413
414
415 if test "$ac_cv_func_gethostbyname" = no; then
416         AC_CHECK_LIB(nsl, gethostbyname)
417 fi
418
419 if test "$ac_cv_func_connect" = no; then
420         AC_CHECK_LIB(socket, connect)
421 fi
422
423 dnl Check for Solaris realtime support
424 AC_CHECK_LIB(rt, sched_yield)
425
426 dnl Determine the system's authentication capabilities.
427 dnl We currently support PAM, standard getpwnam(), and getspnam()
428 dnl (Linux shadow passwords)
429
430         if test "$with_pam" = yes; then
431                 save_LIBS=$LIBS
432                 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
433                         LIBS="-lpam $LIBS"])
434                 AC_CHECK_FUNCS(pam_start)
435                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
436         fi
437         if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
438                 save_LIBS=$LIBS
439                 AC_SEARCH_LIBS(getspnam, shadow, [
440                         if test "$ac_cv_search_getspnam" = -lshadow; then
441                                 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
442                         fi])
443                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
444                 if test "$ac_cv_func_crypt" = no; then
445                         AC_CHECK_LIB(crypt, crypt, [
446                                 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
447                                 test "$enable_chkpwd" = no && \
448                                         LIBS="-lcrypt $LIBS"])
449                 fi
450         fi
451
452 if test "x$with_ncurses" != "xno"; then
453         AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
454         AC_SEARCH_LIBS(scrollok, [ncurses curses])
455         AC_SEARCH_LIBS(initscr, [ncurses curses])
456 else
457         AC_SEARCH_LIBS(tgetent, [curses termcap])
458         AC_SEARCH_LIBS(initscr, [curses])
459 fi
460 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
461
462 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
463 dnl which the -pthread flag takes care of this.)
464 if test "$check_pthread" != no; then
465         AC_CHECK_LIB(pthread, pthread_create)
466         AC_CHECK_LIB(pthreads, pthread_create)
467 fi
468
469 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
470
471
472 dnl Check for libcitadel
473 AC_CHECK_HEADER(libcitadel.h,
474         [AC_CHECK_LIB(citadel, libcitadel_version_string,
475                 [
476                         LIBS="-lcitadel $LIBS"
477                 ],
478                 [
479                         AC_MSG_ERROR(libcitadel was not found or is not usable.  Please install libcitadel.)
480                 ]
481         ,
482         )],
483         [
484                 AC_MSG_ERROR(libcitadel.h was not found or is not usable.  Please install libcitadel.)
485         ]
486 )
487
488
489
490
491 # The big search for OpenSSL
492 if test "$with_ssl" != "no"; then
493         saved_LIBS="$LIBS"
494         saved_LDFLAGS="$LDFLAGS"
495         saved_CFLAGS="$CFLAGS"
496         if test "x$prefix" != "xNONE"; then
497                 tryssldir="$tryssldir $prefix"
498         fi
499         AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
500                 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
501                         CFLAGS="$saved_CFLAGS"
502                         LDFLAGS="$saved_LDFLAGS"
503                         LIBS="$saved_LIBS -lssl -lcrypto"
504         
505                         # Skip directories if they don't exist
506                         if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
507                                 continue;
508                         fi
509                         if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
510                                 # Try to use $ssldir/lib if it exists, otherwise
511                                 # $ssldir
512                                 if test -d "$ssldir/lib" ; then
513                                         LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
514                                         if test ! -z "$need_dash_r" ; then
515                                                 LDFLAGS="-R$ssldir/lib $LDFLAGS"
516                                         fi
517                                 else
518                                         LDFLAGS="-L$ssldir $saved_LDFLAGS"
519                                         if test ! -z "$need_dash_r" ; then
520                                                 LDFLAGS="-R$ssldir $LDFLAGS"
521                                         fi
522                                 fi
523                                 # Try to use $ssldir/include if it exists, otherwise
524                                 # $ssldir
525                                 if test -d "$ssldir/include" ; then
526                                         CFLAGS="-I$ssldir/include $saved_CFLAGS"
527                                 else
528                                         CFLAGS="-I$ssldir $saved_CFLAGS"
529                                 fi
530                         fi
531         
532                         # Basic test to check for compatible version and correct linking
533                         # *does not* test for RSA - that comes later.
534                         AC_TRY_RUN(
535                                 [
536         #include <string.h>
537         #include <openssl/rand.h>
538         int main(void)
539         {
540                 char a[2048];
541                 memset(a, 0, sizeof(a));
542                 RAND_add(a, sizeof(a), sizeof(a));
543                 return(RAND_status() <= 0);
544         }
545                                 ],
546                                 [
547                                         found_crypto=1
548                                         break;
549                                 ], []
550                         )
551         
552                         if test ! -z "$found_crypto" ; then
553                                 break;
554                         fi
555                 done
556         
557                 if test -z "$ssldir" ; then
558                         ssldir="(system)"
559                 fi
560         
561                 if test ! -z "$found_crypto" ; then
562                         ac_cv_openssldir=$ssldir
563                 else
564                         ac_cv_openssldir="no"
565                 fi
566         ])
567         LIBS="$saved_LIBS"
568         LDFLAGS="$saved_LDFLAGS"
569         CFLAGS="$saved_CFLAGS"
570         
571         if test "x$ac_cv_openssldir" != "xno" ; then
572                 AC_DEFINE(HAVE_OPENSSL, [], [Define if you have OpenSSL.])
573                 LIBS="-lssl -lcrypto $LIBS"
574                 dnl Need to recover ssldir - test above runs in subshell
575                 ssldir=$ac_cv_openssldir
576                 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
577                         # Try to use $ssldir/lib if it exists, otherwise
578                         # $ssldir
579                         if test -d "$ssldir/lib" ; then
580                                 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
581                                 if test ! -z "$need_dash_r" ; then
582                                         LDFLAGS="-R$ssldir/lib $LDFLAGS"
583                                 fi
584                         else
585                                 LDFLAGS="-L$ssldir $saved_LDFLAGS"
586                                 if test ! -z "$need_dash_r" ; then
587                                         LDFLAGS="-R$ssldir $LDFLAGS"
588                                 fi
589                         fi
590                         # Try to use $ssldir/include if it exists, otherwise
591                         # $ssldir
592                         if test -d "$ssldir/include" ; then
593                                 CFLAGS="-I$ssldir/include $saved_CFLAGS"
594                         else
595                                 CFLAGS="-I$ssldir $saved_CFLAGS"
596                         fi
597                 fi
598         fi
599 fi
600
601 if test "x$with_db" != xno; then
602         test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
603
604         dblib=""
605
606         if test -d "$db_dir/include/db4"; then
607                 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
608                 dblib="db4"
609         elif test "$db_dir"; then
610                 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
611         elif test -d /usr/include/db4; then
612                 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
613                 dblib="db4"
614         fi
615
616
617         AC_CHECK_DB([db db-4.1 db-4 db4],
618                     [
619                      DATABASE=database.c
620                     ],
621                     AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
622                                   library.  Use --with-db=PATH to specify
623                                   the path]]))
624
625 fi
626
627 dnl Checks for the zlib compression library.
628 if test "x$with_zlib" != xno ; then
629         AC_CHECK_HEADERS(zlib.h,
630                 [AC_CHECK_LIB(z, zlibVersion,
631                         [ok_zlib=yes],,
632         )])
633 fi
634
635 if test "x$ok_zlib" = xyes ; then
636         SERVER_LIBS="-lz $SERVER_LIBS"
637         AC_DEFINE(HAVE_ZLIB, [], [define this if you have zlib compression available])
638 fi
639
640
641
642
643 dnl Checks for the OpenLDAP client library.
644 if test "x$with_ldap" != xno ; then
645         AC_CHECK_HEADERS(ldap.h,
646                 [AC_CHECK_LIB(ldap, ldap_init,
647                         [ok_ldap=yes],,
648         )])
649 fi
650
651 if test "x$ok_ldap" = xyes ; then
652         SERVER_LIBS="-lldap $SERVER_LIBS"
653         AC_DEFINE(HAVE_LDAP, [], [define this if you have OpenLDAP client available])
654 fi
655
656
657
658
659
660 dnl Checks for the libdspam mail spam scanning library.
661 if test "x$with_libdspam" != xno ; then
662         AC_CHECK_HEADERS(dspam/libdspam.h,
663                 [AC_CHECK_LIB(dspam, dspam_init,
664                         [ok_libdspam=yes],,
665         )])
666 fi
667
668 if test "x$ok_libdspam" = xyes ; then
669         SERVER_LIBS="-ldspam $SERVER_LIBS"
670         AC_DEFINE(HAVE_LIBDSPAM, [], [define this if you have the libdspam mail spam scanning library available])
671 fi
672
673
674
675 dnl Checks for the Expat XML parser.
676 AC_CHECK_HEADER(expat.h,
677         [AC_CHECK_LIB(expat, XML_ParserCreateNS,
678                 [
679                         SERVER_LIBS="-lexpat $SERVER_LIBS"
680                 ],
681                 [
682                         AC_MSG_ERROR(The Expat XML parser was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
683                 ]
684         ,
685         )],
686         [
687                 AC_MSG_ERROR(expat.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
688         ]
689 )
690
691
692
693
694
695
696
697 dnl Checks for libcurl.
698 AC_CHECK_HEADER(curl/curl.h,
699         [AC_CHECK_LIB(curl, curl_version,
700                 [
701                         SERVER_LIBS="-lcurl $SERVER_LIBS"
702                 ],
703                 [
704                         AC_MSG_ERROR(libcurl was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
705                 ]
706         ,
707         )],
708         [
709                 AC_MSG_ERROR(curl/curl.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
710         ]
711 )
712
713
714
715
716
717
718
719 dnl Checks for the libical iCalendar library.
720 AC_CHECK_HEADER(libical/ical.h,
721         [AC_CHECK_LIB(ical, icalcomponent_new,
722                 [
723                         SERVER_LIBS="-lical $SERVER_LIBS"
724                 ],
725                 [
726                         AC_MSG_ERROR(libical was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
727                 ]
728         ,
729         )],
730         [
731                 AC_MSG_ERROR(libical/ical.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
732         ]
733 )
734
735
736 dnl Checks for the libsieve mailbox sorting library.
737 AC_CHECK_HEADER(sieve2.h,
738         [AC_CHECK_LIB(sieve, sieve2_license,
739                 [
740                         SERVER_LIBS="-lsieve $SERVER_LIBS"
741                 ],
742                 [
743                         AC_MSG_ERROR(libsieve was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
744                 ]
745         ,
746         )],
747         [
748                 AC_MSG_ERROR(sieve2.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
749         ]
750 )
751
752
753
754
755 dnl Checks for header files.
756 AC_HEADER_DIRENT
757 AC_HEADER_STDC
758 AC_HEADER_SYS_WAIT
759
760 dnl
761 dnl TODO: for the DB header checks, we should check whether the headers
762 dnl define db_env_create, somehow
763 dnl
764 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)
765
766 dnl
767 dnl need to check if this is actually compilable, sometimes there are
768 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
769 dnl
770 if test "x$with_ncurses" != xno; then
771         AC_CHECK_HEADERS(ncurses.h,,,[ ])
772 fi
773
774 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
775 [#ifdef HAVE_SYS_TYPES_H
776 #include <sys/types.h>
777 #endif
778 #ifdef HAVE_NETINET_IN_H
779 #include <netinet/in.h>
780 #endif
781 #ifdef HAVE_ARPA_NAMESER_H
782 #include <arpa/nameser.h>
783 #endif])
784
785
786 dnl Checks for typedefs, structures, and compiler characteristics.
787 AC_C_CONST
788 AC_TYPE_PID_T
789 AC_TYPE_SIZE_T
790 AC_HEADER_TIME
791
792 dnl defined in acinclude.m4:
793 CIT_STRUCT_TM
794
795 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
796 [AC_TRY_COMPILE([#include <sys/types.h>
797 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
798 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
799 if test $ac_cv_struct_ut_type = yes; then
800         AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
801 fi
802
803 AC_CACHE_CHECK(
804         [for call semantics from getpwuid_r], 
805         ac_cv_call_getpwuid_r,
806         [AC_TRY_COMPILE([#include <sys/types.h>
807 #include <pwd.h>], 
808                          [
809                                 struct passwd pw, *pwp;
810                                 char pwbuf[64];
811                                 uid_t uid;
812
813                                 getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
814                         ],
815                         ac_cv_call_getpwuid_r=yes, 
816                         ac_cv_call_getpwuid_r=no)
817         ])
818
819 if test $ac_cv_call_getpwuid_r = no; then
820         AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
821         AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
822         AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
823         AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
824 else
825         AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
826         AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
827         AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
828 fi
829
830
831 dnl Our own happy little check for the resolver library.
832
833 case "`uname -a`" in 
834  OpenBSD*)
835         echo "we don't need to check for resolv on openbsd"  
836         ;;
837  FreeBSD*)
838         echo "we don't need to check for resolv on freeBSD"  
839         ;;
840  *)
841         test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
842         AC_CHECK_LIB(resolv, res_query,
843                 RESOLV="$RESOLV -lresolv",
844                 [dnl Have to include resolv.h as res_query is sometimes defined as a macro
845                         AC_MSG_CHECKING([for res_query in -lresolv (with resolv.h if present)])
846                         saved_libs="$LIBS"
847                         LIBS="-lresolv $LIBS"
848                         AC_TRY_LINK([
849                                 #ifdef HAVE_RESOLV_H
850                                 #include <resolv.h>
851                                 #endif],
852                                 [res_query(0,0,0,0,0)],
853                                 [AC_MSG_RESULT(yes)
854                                                 have_res_query=yes],
855                                 [AC_MSG_RESULT(no)
856                                         AC_MSG_ERROR(libresolv was not found.  Citadel requires the resolver library.)
857                                 ])
858          ]
859         )
860         ;;
861 esac
862
863
864
865 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
866 [AC_TRY_COMPILE([#include <sys/types.h>
867 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
868 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
869 if test $ac_cv_struct_ut_host = yes; then
870         AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
871 fi
872
873 dnl Checks for library functions.
874 AC_FUNC_GETPGRP
875 AC_PROG_GCC_TRADITIONAL
876 AC_TYPE_SIGNAL
877 AC_FUNC_VPRINTF
878 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
879
880 dnl Now check for pthreads
881
882 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
883 dnl we need to include pthread.h
884
885 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
886 [AC_TRY_LINK([#include <pthread.h>],
887 [       pthread_t thread;
888
889         /* The GNU C library defines this for functions which it implements
890            to always fail with ENOSYS.  Some functions are actually named
891            something starting with __ and the normal name is an alias.  */
892 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
893         choke me
894 #else
895         pthread_cancel(thread);
896 #endif],
897 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
898 if test "$ac_cv_func_pthread_cancel" = yes; then
899         AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
900 fi
901
902 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
903 [AC_TRY_LINK([#include <pthread.h>],
904 [       /* The GNU C library defines this for functions which it implements
905            to always fail with ENOSYS.  Some functions are actually named
906            something starting with __ and the normal name is an alias.  */
907 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
908         choke me
909 #else
910         pthread_create(NULL, NULL, NULL, NULL);
911 #endif],
912 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
913 if test "$ac_cv_func_pthread_create" = yes; then
914         test "$DATABASE" && TARGETS="client server utils"
915         if test "x$enable_threaded_client" != xno; then
916                 AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
917         fi
918 fi
919
920 AC_REPLACE_FUNCS(snprintf getutline)
921
922 AC_CACHE_CHECK([the weather], ac_cv_weather, [
923         sleep 1
924         echo $ECHO_N "opening your window... $ECHO_C" >&6
925         sleep 2
926         month=`date | cut -f 2 -d ' '`
927         case $month in
928         Dec | Jan | Feb)
929                 ac_cv_weather="it's cold!"
930                 ;;
931         Mar | Apr)
932                 ac_cv_weather="it's wet!"
933                 ;;
934         Jul | Aug)
935                 ac_cv_weather="it's hot!"
936                 ;;
937         Oct | Nov)
938                 ac_cv_weather="it's cool"
939                 ;;
940         May | Jun | Sep | *)
941                 ac_cv_weather="it's fine"
942                 ;;
943         esac
944         ])
945
946
947
948
949 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
950         number=`date | cut -c 19`
951         case $number in
952         7)
953                 ac_cv_under_the_bed="lunatics and monsters found"
954                 ;;
955         *)
956                 ac_cv_under_the_bed="dust bunnies found"
957                 ;;
958         esac
959         ])
960
961 dnl Done! Now write the Makefile and sysdep.h
962 AC_SUBST(AUTH)
963 AC_SUBST(RESOLV)
964 AC_SUBST(chkpwd_LIBS)
965 AC_SUBST(TARGETS)
966 AC_SUBST(DATABASE)
967 AC_SUBST(SERVER_LDFLAGS)
968 AC_SUBST(SERVER_LIBS)
969 AC_SUBST(SETUP_LIBS)
970 AC_CONFIG_HEADER(sysdep.h)
971 ./mk_module_init.sh
972 AC_CONFIG_FILES([Makefile])
973 AC_OUTPUT(database_cleanup.sh)
974
975
976 if test -z "$DATABASE"; then
977         AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
978 fi
979
980 echo ------------------------------------------------------------------------
981 echo 'zlib compression:                ' $ok_zlib
982 echo 'LDAP support:                    ' $ok_ldap
983 echo 'Character set conversion support:' $ok_iconv
984 echo 'DSpam Scanning support:          ' $ok_libdspam
985 echo 
986 echo 'Note: if you are not using Linux, make sure you are using GNU make'
987 echo '(gmake) to compile Citadel.'
988 echo