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