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