Fix '@AUTOCONF@ command not found' build problem
[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 dnl Checks for the libical iCalendar library.
621 AC_CHECK_HEADER(ical.h,
622         [AC_CHECK_LIB(ical, icalcomponent_new,
623                 [
624                         SERVER_LIBS="-lical $SERVER_LIBS"
625                 ],
626                 [
627                         AC_MSG_ERROR(libical was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
628                 ]
629         ,
630         )],
631         [
632                 AC_MSG_ERROR(ical.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
633         ]
634 )
635
636
637 dnl Checks for the libsieve mailbox sorting library.
638 AC_CHECK_HEADER(sieve2.h,
639         [AC_CHECK_LIB(sieve, sieve2_license,
640                 [
641                         SERVER_LIBS="-lsieve $SERVER_LIBS"
642                 ],
643                 [
644                         AC_MSG_ERROR(libsieve was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
645                 ]
646         ,
647         )],
648         [
649                 AC_MSG_ERROR(sieve2.h was not found and is required.  More info: http://www.citadel.org/doku.php/installation:start)
650         ]
651 )
652
653
654
655
656 dnl Checks for header files.
657 AC_HEADER_DIRENT
658 AC_HEADER_STDC
659 AC_HEADER_SYS_WAIT
660
661 dnl
662 dnl TODO: for the DB header checks, we should check whether the headers
663 dnl define db_env_create, somehow
664 dnl
665 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)
666
667 dnl
668 dnl need to check if this is actually compilable, sometimes there are
669 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
670 dnl
671 if test "x$with_ncurses" != xno; then
672         AC_CHECK_HEADERS(ncurses.h,,,[ ])
673 fi
674
675 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H, [], [define this if you have the resolv.h header file.]),,
676 [#ifdef HAVE_SYS_TYPES_H
677 #include <sys/types.h>
678 #endif
679 #ifdef HAVE_NETINET_IN_H
680 #include <netinet/in.h>
681 #endif
682 #ifdef HAVE_ARPA_NAMESER_H
683 #include <arpa/nameser.h>
684 #endif])
685
686
687 dnl Checks for typedefs, structures, and compiler characteristics.
688 AC_C_CONST
689 AC_TYPE_PID_T
690 AC_TYPE_SIZE_T
691 AC_HEADER_TIME
692
693 dnl defined in acinclude.m4:
694 CIT_STRUCT_TM
695
696 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
697 [AC_TRY_COMPILE([#include <sys/types.h>
698 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
699 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
700 if test $ac_cv_struct_ut_type = yes; then
701         AC_DEFINE(HAVE_UT_TYPE, [], [define this if struct utmp has an ut_type member])
702 fi
703
704 AC_CACHE_CHECK(
705         [for call semantics from getpwuid_r], 
706         ac_cv_call_getpwuid_r,
707         [AC_TRY_COMPILE([#include <sys/types.h>
708 #include <pwd.h>], 
709                          [
710                                 struct passwd pw, *pwp;
711                                 char pwbuf[64];
712                                 uid_t uid;
713
714                                 getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwp);
715                         ],
716                         ac_cv_call_getpwuid_r=yes, 
717                         ac_cv_call_getpwuid_r=no)
718         ])
719
720 if test $ac_cv_call_getpwuid_r = no; then
721         AC_DEFINE(SOLARIS_GETPWUID,[],[do we need to use solaris call syntax?])
722         AC_DEFINE(F_UID_T, "%ld", [whats the matching format string for uid_t?])
723         AC_DEFINE(F_PID_T, "%ld",  [whats the matching format string for pid_t?])
724         AC_DEFINE(F_XPID_T, "%lx",  [whats the matching format string for xpid_t?])
725 else
726         AC_DEFINE(F_UID_T, "%d",  [whats the matching format string for uid_t?])
727         AC_DEFINE(F_PID_T, "%d",  [whats the matching format string for pid_t?])
728         AC_DEFINE(F_XPID_T, "%x",  [whats the matching format string for xpid_t?])
729 fi
730
731
732 dnl Our own happy little check for the resolver library.
733
734 case "`uname -a`" in 
735  OpenBSD*)
736         echo "we don't need to check for resolv on openbsd"  
737         ;;
738  FreeBSD*)
739         echo "we don't need to check for resolv on freeBSD"  
740         ;;
741  *)
742         test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
743         AC_CHECK_LIB(resolv, res_query,
744                 RESOLV="$RESOLV -lresolv",
745                 [dnl Have to include resolv.h as res_query is sometimes defined as a macro
746                         AC_MSG_CHECKING([for res_query in -lresolv (with resolv.h if present)])
747                         saved_libs="$LIBS"
748                         LIBS="-lresolv $LIBS"
749                         AC_TRY_LINK([
750                                 #ifdef HAVE_RESOLV_H
751                                 #include <resolv.h>
752                                 #endif],
753                                 [res_query(0,0,0,0,0)],
754                                 [AC_MSG_RESULT(yes)
755                                                 have_res_query=yes],
756                                 [AC_MSG_RESULT(no)
757                                         AC_MSG_ERROR(libresolv was not found.  Citadel requires the resolver library.)
758                                 ])
759          ]
760         )
761         ;;
762 esac
763
764
765
766 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
767 [AC_TRY_COMPILE([#include <sys/types.h>
768 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
769 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
770 if test $ac_cv_struct_ut_host = yes; then
771         AC_DEFINE(HAVE_UT_HOST, [], [define this if struct utmp has an ut_host member])
772 fi
773
774 dnl Checks for library functions.
775 AC_FUNC_GETPGRP
776 AC_PROG_GCC_TRADITIONAL
777 AC_TYPE_SIGNAL
778 AC_FUNC_VPRINTF
779 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
780
781 dnl Now check for pthreads
782
783 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
784 dnl we need to include pthread.h
785
786 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
787 [AC_TRY_LINK([#include <pthread.h>],
788 [       pthread_t thread;
789
790         /* The GNU C library defines this for functions which it implements
791            to always fail with ENOSYS.  Some functions are actually named
792            something starting with __ and the normal name is an alias.  */
793 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
794         choke me
795 #else
796         pthread_cancel(thread);
797 #endif],
798 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
799 if test "$ac_cv_func_pthread_cancel" = yes; then
800         AC_DEFINE(HAVE_PTHREAD_CANCEL, [], [define this if you have the pthread_cancel() function])
801 fi
802
803 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
804 [AC_TRY_LINK([#include <pthread.h>],
805 [       /* The GNU C library defines this for functions which it implements
806            to always fail with ENOSYS.  Some functions are actually named
807            something starting with __ and the normal name is an alias.  */
808 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
809         choke me
810 #else
811         pthread_create(NULL, NULL, NULL, NULL);
812 #endif],
813 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
814 if test "$ac_cv_func_pthread_create" = yes; then
815         test "$DATABASE" && TARGETS="client server utils"
816         if test "x$enable_threaded_client" != xno; then
817                 AC_DEFINE(THREADED_CLIENT, [], [define this if you want to enable the multithreaded client])
818         fi
819 fi
820
821 AC_REPLACE_FUNCS(snprintf getutline)
822
823 AC_CACHE_CHECK([the weather], ac_cv_weather, [
824         sleep 1
825         echo $ECHO_N "opening your window... $ECHO_C" >&6
826         sleep 2
827         month=`date | cut -f 2 -d ' '`
828         case $month in
829         Dec | Jan | Feb)
830                 ac_cv_weather="it's cold!"
831                 ;;
832         Mar | Apr)
833                 ac_cv_weather="it's wet!"
834                 ;;
835         Jul | Aug)
836                 ac_cv_weather="it's hot!"
837                 ;;
838         Oct | Nov)
839                 ac_cv_weather="it's cool"
840                 ;;
841         May | Jun | Sep | *)
842                 ac_cv_weather="it's fine"
843                 ;;
844         esac
845         ])
846
847
848
849
850 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
851         number=`date | cut -c 19`
852         case $number in
853         7)
854                 ac_cv_under_the_bed="lunatics and monsters found"
855                 ;;
856         *)
857                 ac_cv_under_the_bed="dust bunnies found"
858                 ;;
859         esac
860         ])
861
862 dnl Done! Now write the Makefile and sysdep.h
863 AC_SUBST(AUTH)
864 AC_SUBST(RESOLV)
865 AC_SUBST(chkpwd_LIBS)
866 AC_SUBST(TARGETS)
867 AC_SUBST(DATABASE)
868 AC_SUBST(SERVER_LDFLAGS)
869 AC_SUBST(SERVER_LIBS)
870 AC_SUBST(SETUP_LIBS)
871 AC_CONFIG_HEADER(sysdep.h)
872 ./mk_module_init.sh
873 AC_CONFIG_FILES([Makefile])
874 AC_OUTPUT(database_cleanup.sh)
875
876
877 if test -z "$DATABASE"; then
878         AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
879 fi
880
881 echo ------------------------------------------------------------------------
882 echo 'zlib compression:                ' $ok_zlib
883 echo 'LDAP support:                    ' $ok_ldap
884 echo 'DSpam Scanning support:          ' $ok_libdspam
885 echo 
886 echo 'Note: if you are not using Linux, make sure you are using GNU make'
887 echo '(gmake) to compile Citadel.'
888 echo