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