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