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