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