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