5f74b0f62ae599a0f39d3e06747a611bb6366aac
[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_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 dnl Checks for the zlib compression library.
472 if test "x$with_zlib" != xno ; then
473         AC_CHECK_HEADERS(zlib.h,
474                 [AC_CHECK_LIB(z, zlibVersion,
475                         [ok_zlib=yes],,
476         )])
477 fi
478
479 if test "x$ok_zlib" = xyes ; then
480         LDFLAGS="-lz $LDFLAGS"
481         AC_DEFINE(HAVE_ZLIB, [], [define this if you have zlib compression available])
482 fi
483
484 dnl Checks for the libical iCalendar library.
485 AC_CHECK_HEADER(libical/ical.h,
486         [AC_CHECK_LIB(ical, icalcomponent_as_ical_string_r,
487                 [
488                         SERVER_LIBS="-lical $SERVER_LIBS"
489                 ],
490                 [
491                         AC_MSG_ERROR(libical was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
492                 ]
493         ,
494         )],
495         [
496                 AC_MSG_ERROR(libical/ical.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
497         ]
498 )
499
500
501 dnl Checks for the libsieve mailbox sorting library.
502 AC_CHECK_HEADER(sieve2.h,
503         [AC_CHECK_LIB(sieve, sieve2_license,
504                 [
505                         SERVER_LIBS="-lsieve $SERVER_LIBS"
506                 ],
507                 [
508                         AC_MSG_ERROR(libsieve was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
509                 ]
510         ,
511         )],
512         [
513                 AC_MSG_ERROR(sieve2.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
514         ]
515 )
516
517 saved_CFLAGS="$CFLAGS"
518 CFLAGS="$CFLAGS $SERVER_LIBS"
519 dnl Check for libcitadel
520 AC_CHECK_HEADER(libcitadel.h,
521         [AC_CHECK_LIB(citadel, libcitadel_version_string,
522                 [
523                         LIBS="-lcitadel $LIBS $SERVER_LIBS"
524                 ],
525                 [
526                         AC_MSG_ERROR(libcitadel was not found or is not usable.  Please install libcitadel.)
527                 ]
528         ,
529         )],
530         [
531                 AC_MSG_ERROR(libcitadel.h was not found or is not usable.  Please install libcitadel.)
532         ]
533 )
534
535 CFLAGS="$saved_CFLAGS"
536
537
538
539 # The big search for OpenSSL
540 if test "$with_ssl" != "no"; then
541         saved_LIBS="$LIBS"
542         saved_LDFLAGS="$LDFLAGS"
543         saved_CFLAGS="$CFLAGS"
544         if test "x$prefix" != "xNONE"; then
545                 tryssldir="$tryssldir $prefix"
546         fi
547         AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
548                 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
549                         CFLAGS="$saved_CFLAGS"
550                         LDFLAGS="$saved_LDFLAGS"
551                         LIBS="$saved_LIBS -lssl -lcrypto"
552         
553                         # Skip directories if they don't exist
554                         if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
555                                 continue;
556                         fi
557                         if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
558                                 # Try to use $ssldir/lib if it exists, otherwise
559                                 # $ssldir
560                                 if test -d "$ssldir/lib" ; then
561                                         LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
562                                         if test ! -z "$need_dash_r" ; then
563                                                 LDFLAGS="-R$ssldir/lib $LDFLAGS"
564                                         fi
565                                 else
566                                         LDFLAGS="-L$ssldir $saved_LDFLAGS"
567                                         if test ! -z "$need_dash_r" ; then
568                                                 LDFLAGS="-R$ssldir $LDFLAGS"
569                                         fi
570                                 fi
571                                 # Try to use $ssldir/include if it exists, otherwise
572                                 # $ssldir
573                                 if test -d "$ssldir/include" ; then
574                                         CFLAGS="-I$ssldir/include $saved_CFLAGS"
575                                 else
576                                         CFLAGS="-I$ssldir $saved_CFLAGS"
577                                 fi
578                         fi
579         
580                         # Basic test to check for compatible version and correct linking
581                         # *does not* test for RSA - that comes later.
582                         AC_TRY_RUN(
583                                 [
584         #include <string.h>
585         #include <openssl/rand.h>
586         int main(void)
587         {
588                 char a[2048];
589                 memset(a, 0, sizeof(a));
590                 RAND_add(a, sizeof(a), sizeof(a));
591                 return(RAND_status() <= 0);
592         }
593                                 ],
594                                 [
595                                         found_crypto=1
596                                         break;
597                                 ], []
598                         )
599         
600                         if test ! -z "$found_crypto" ; then
601                                 break;
602                         fi
603                 done
604         
605                 if test -z "$ssldir" ; then
606                         ssldir="(system)"
607                 fi
608         
609                 if test ! -z "$found_crypto" ; then
610                         ac_cv_openssldir=$ssldir
611                 else
612                         ac_cv_openssldir="no"
613                 fi
614         ])
615         LIBS="$saved_LIBS"
616         LDFLAGS="$saved_LDFLAGS"
617         CFLAGS="$saved_CFLAGS"
618         
619         if test "x$ac_cv_openssldir" != "xno" ; then
620                 AC_DEFINE(HAVE_OPENSSL, [], [Define if you have OpenSSL.])
621                 LIBS="-lssl -lcrypto $LIBS"
622                 dnl Need to recover ssldir - test above runs in subshell
623                 ssldir=$ac_cv_openssldir
624                 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
625                         # Try to use $ssldir/lib if it exists, otherwise
626                         # $ssldir
627                         if test -d "$ssldir/lib" ; then
628                                 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
629                                 if test ! -z "$need_dash_r" ; then
630                                         LDFLAGS="-R$ssldir/lib $LDFLAGS"
631                                 fi
632                         else
633                                 LDFLAGS="-L$ssldir $saved_LDFLAGS"
634                                 if test ! -z "$need_dash_r" ; then
635                                         LDFLAGS="-R$ssldir $LDFLAGS"
636                                 fi
637                         fi
638                         # Try to use $ssldir/include if it exists, otherwise
639                         # $ssldir
640                         if test -d "$ssldir/include" ; then
641                                 CFLAGS="-I$ssldir/include $saved_CFLAGS"
642                         else
643                                 CFLAGS="-I$ssldir $saved_CFLAGS"
644                         fi
645                 fi
646         fi
647 fi
648
649 if test "x$with_db" != xno; then
650         test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
651
652         dblib=""
653
654         if test -d "$db_dir/include/db4"; then
655                 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
656                 dblib="db4"
657         elif test "$db_dir"; then
658                 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
659         elif test -d /usr/include/db4; then
660                 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
661                 dblib="db4"
662         fi
663
664
665         AC_CHECK_DB([db db-4.1 db-4 db4],
666                     [
667                      DATABASE=database.c
668                     ],
669                     AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
670                                   library.  Use --with-db=PATH to specify
671                                   the path]]))
672
673 fi
674
675
676
677
678 dnl Checks for the OpenLDAP client library.
679 if test "x$with_ldap" != xno ; then
680         AC_CHECK_HEADERS(ldap.h,
681                 [AC_CHECK_LIB(ldap, ldap_init,
682                         [ok_ldap=yes],,
683         )])
684 fi
685
686 if test "x$ok_ldap" = xyes ; then
687         SERVER_LIBS="-lldap $SERVER_LIBS"
688         AC_DEFINE(HAVE_LDAP, [], [define this if you have OpenLDAP client available])
689 fi
690
691
692
693
694
695 dnl Checks for the libdspam mail spam scanning library.
696 if test "x$with_libdspam" != xno ; then
697         AC_CHECK_HEADERS(dspam/libdspam.h,
698                 [AC_CHECK_LIB(dspam, dspam_init,
699                         [ok_libdspam=yes],,
700         )])
701 fi
702
703 if test "x$ok_libdspam" = xyes ; then
704         SERVER_LIBS="-ldspam $SERVER_LIBS"
705         AC_DEFINE(HAVE_LIBDSPAM, [], [(unfinished) define this if you have the libdspam mail spam scanning library available])
706 fi
707
708
709
710 dnl Checks for the Expat XML parser.
711 AC_CHECK_HEADER(expat.h,
712         [AC_CHECK_LIB(expat, XML_ParserCreateNS,
713                 [
714                         SERVER_LIBS="-lexpat $SERVER_LIBS"
715                 ],
716                 [
717                         AC_MSG_ERROR(The Expat XML parser was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
718                 ]
719         ,
720         )],
721         [
722                 AC_MSG_ERROR(expat.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
723         ]
724 )
725
726
727
728
729
730
731
732 dnl Checks for libcurl.
733 AC_CHECK_HEADER(curl/curl.h,
734         [AC_CHECK_LIB(curl, curl_version,
735                 [
736                         SERVER_LIBS="-lcurl $SERVER_LIBS"
737                 ],
738                 [
739                         AC_MSG_ERROR(libcurl was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
740                 ]
741         ,
742         )],
743         [
744                 AC_MSG_ERROR(curl/curl.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
745         ]
746 )
747
748
749
750
751
752
753
754
755
756
757 dnl Checks for header files.
758 AC_HEADER_DIRENT
759 AC_HEADER_STDC
760 AC_HEADER_SYS_WAIT
761
762 dnl
763 dnl TODO: for the DB header checks, we should check whether the headers
764 dnl define db_env_create, somehow
765 dnl
766 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)
767
768 dnl
769 dnl need to check if this is actually compilable, sometimes there are
770 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
771 dnl
772 if test "x$with_ncurses" != xno; then
773         AC_CHECK_HEADERS(ncurses.h,,,[ ])
774 fi
775
776 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
777 [#ifdef HAVE_SYS_TYPES_H
778 #include <sys/types.h>
779 #endif
780 #ifdef HAVE_NETINET_IN_H
781 #include <netinet/in.h>
782 #endif
783 #ifdef HAVE_ARPA_NAMESER_H
784 #include <arpa/nameser.h>
785 #endif])
786
787
788 dnl Checks for typedefs, structures, and compiler characteristics.
789 AC_C_CONST
790 AC_TYPE_PID_T
791 AC_TYPE_SIZE_T
792 AC_HEADER_TIME
793
794 dnl defined in acinclude.m4:
795 CIT_STRUCT_TM
796
797 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
798 [AC_TRY_COMPILE([#include <sys/types.h>
799 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
800 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
801 if test $ac_cv_struct_ut_type = yes; then
802         AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
803 fi
804
805 AC_CACHE_CHECK(
806         [for call semantics from getpwuid_r], 
807         ac_cv_call_getpwuid_r,
808         [AC_TRY_COMPILE([#include <sys/types.h>
809 #include <pwd.h>], 
810                          [
811                                 struct passwd pw, *pwp;
812                                 char pwbuf[64];
813                                 uid_t uid;
814
815                                 getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
816                         ],
817                         ac_cv_call_getpwuid_r=yes, 
818                         ac_cv_call_getpwuid_r=no)
819         ])
820
821 if test $ac_cv_call_getpwuid_r = no; then
822         AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
823         AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
824         AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
825         AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
826 else
827         AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
828         AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
829         AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
830 fi
831
832
833 dnl Our own happy little check for the resolver library.
834
835 case "`uname -a`" in 
836  OpenBSD*)
837         echo "we don't need to check for resolv on openbsd"  
838         ;;
839  FreeBSD*)
840         echo "we don't need to check for resolv on freeBSD"  
841         ;;
842  *)
843         test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
844         AC_CHECK_LIB(resolv, res_query,
845                 RESOLV="$RESOLV -lresolv",
846                 [dnl Have to include resolv.h as res_query is sometimes defined as a macro
847                         AC_MSG_CHECKING([for res_query in -lresolv (with resolv.h if present)])
848                         saved_libs="$LIBS"
849                         LIBS="-lresolv $LIBS"
850                         AC_TRY_LINK([
851                                 #ifdef HAVE_RESOLV_H
852                                 #include <resolv.h>
853                                 #endif],
854                                 [res_query(0,0,0,0,0)],
855                                 [AC_MSG_RESULT(yes)
856                                                 have_res_query=yes],
857                                 [AC_MSG_RESULT(no)
858                                         AC_MSG_ERROR(libresolv was not found.  Citadel requires the resolver library.)
859                                 ])
860          ]
861         )
862         ;;
863 esac
864
865
866
867 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
868 [AC_TRY_COMPILE([#include <sys/types.h>
869 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
870 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
871 if test $ac_cv_struct_ut_host = yes; then
872         AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
873 fi
874
875 dnl Checks for library functions.
876 AC_FUNC_GETPGRP
877 AC_PROG_GCC_TRADITIONAL
878 AC_TYPE_SIGNAL
879 AC_FUNC_VPRINTF
880 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
881
882 dnl Now check for pthreads
883
884 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
885 dnl we need to include pthread.h
886
887 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
888 [AC_TRY_LINK([#include <pthread.h>],
889 [       pthread_t thread;
890
891         /* The GNU C library defines this for functions which it implements
892            to always fail with ENOSYS.  Some functions are actually named
893            something starting with __ and the normal name is an alias.  */
894 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
895         choke me
896 #else
897         pthread_cancel(thread);
898 #endif],
899 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
900 if test "$ac_cv_func_pthread_cancel" = yes; then
901         AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
902 fi
903
904 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
905 [AC_TRY_LINK([#include <pthread.h>],
906 [       /* The GNU C library defines this for functions which it implements
907            to always fail with ENOSYS.  Some functions are actually named
908            something starting with __ and the normal name is an alias.  */
909 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
910         choke me
911 #else
912         pthread_create(NULL, NULL, NULL, NULL);
913 #endif],
914 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
915 if test "$ac_cv_func_pthread_create" = yes; then
916         test "$DATABASE" && TARGETS="client server utils"
917         if test "x$enable_threaded_client" != xno; then
918                 AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
919         fi
920 fi
921
922 AC_REPLACE_FUNCS(snprintf getutline)
923
924 AC_CACHE_CHECK([the weather], ac_cv_weather, [
925         sleep 1
926         echo $ECHO_N "opening your window... $ECHO_C" >&6
927         sleep 2
928         month=`date | cut -f 2 -d ' '`
929         case $month in
930         Dec | Jan | Feb)
931                 ac_cv_weather="it's cold!"
932                 ;;
933         Mar | Apr)
934                 ac_cv_weather="it's wet!"
935                 ;;
936         Jul | Aug)
937                 ac_cv_weather="it's hot!"
938                 ;;
939         Oct | Nov)
940                 ac_cv_weather="it's cool"
941                 ;;
942         May | Jun | Sep | *)
943                 ac_cv_weather="it's fine"
944                 ;;
945         esac
946         ])
947
948
949
950
951 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
952         number=`date | cut -c 19`
953         case $number in
954         7)
955                 ac_cv_under_the_bed="lunatics and monsters found"
956                 ;;
957         *)
958                 ac_cv_under_the_bed="dust bunnies found"
959                 ;;
960         esac
961         ])
962
963 dnl Done! Now write the Makefile and sysdep.h
964 AC_SUBST(AUTH)
965 AC_SUBST(RESOLV)
966 AC_SUBST(chkpwd_LIBS)
967 AC_SUBST(TARGETS)
968 AC_SUBST(DATABASE)
969 AC_SUBST(SERVER_LDFLAGS)
970 AC_SUBST(SERVER_LIBS)
971 AC_SUBST(SETUP_LIBS)
972 AC_CONFIG_HEADER(sysdep.h)
973 ./mk_module_init.sh
974 AC_CONFIG_FILES([Makefile])
975 AC_OUTPUT(database_cleanup.sh)
976
977
978 if test -z "$DATABASE"; then
979         AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
980 fi
981
982 echo ------------------------------------------------------------------------
983 echo 'zlib compression:                ' $ok_zlib
984 echo 'LDAP support:                    ' $ok_ldap
985 echo 'Character set conversion support:' $ok_iconv
986 echo 'DSpam Scanning support:          ' $ok_libdspam
987 echo 
988 echo 'Note: if you are not using Linux, make sure you are using GNU make'
989 echo '(gmake) to compile Citadel.'
990 echo