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