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