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