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