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