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