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