1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [5.91], [http://uncensored.citadel.org/])
5 AC_REVISION([$Revision$])
6 AC_CONFIG_SRCDIR([citserver.c])
7 AC_PREFIX_DEFAULT(/usr/local/citadel)
8 if test "$prefix" = NONE; then
9 AC_DEFINE_UNQUOTED(BBSDIR, "$ac_default_prefix")
11 AC_DEFINE_UNQUOTED(BBSDIR, "$prefix")
14 AC_ARG_ENABLE(autologin, [ --disable-autologin disable autologin (default is enabled if possible)])
15 AC_ARG_ENABLE(chkpwd, [ --disable-chkpwd don't build 'chkpwd'])
17 AC_ARG_ENABLE(threaded-client, [ --disable-threaded-client
18 disable multithreaded client])
20 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
21 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
22 AC_ARG_WITH(gdbm, [ --with-gdbm@<:@=DIR@:>@ use GDBM @<:@DIR=/usr/local@:>@])
23 AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
25 [ --with-ssl=PATH Specify path to OpenSSL installation ],
27 if test "x$withval" != "xno" ; then
32 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
34 AC_ARG_WITH(with_zlib, [ --with-zlib use zlib compression if present])
35 AC_ARG_WITH(with_libical, [ --with-libical use libical calendaring library])
37 if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
42 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
46 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
47 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
48 -o -f /usr/local/lib/libdb3.a -o -f /usr/local/lib/libdb3.so && db_dir=/usr/local
50 test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
51 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
52 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
53 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
56 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
57 AC_MSG_ERROR(can't enable both gdbm and db)
60 dnl By default, we only build the client (citadel and whobbs) unless we can
61 dnl figure out how to build with POSIX threads.
65 PTHREAD_DEFS=-D_REENTRANT
67 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
68 dnl for dlopen(), and has a wrapper script to link with shared libs.
69 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
71 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
72 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
75 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
77 dnl Digital Unix has an odd way to build for pthreads, and we can't
78 dnl build pthreads programs with gcc due to header problems.
80 test -z "$CC" && CC=cc
81 LIBS="-lpthread -lexc $LIBS"
84 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
86 if test "$with_kthread" = yes; then
92 PTHREAD_DEFS=-D_THREAD_SAFE
100 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
103 DEFS="$DEFS $PTHREAD_DEFS"
105 dnl Checks for programs.
108 dnl Set up system-dependent compiler flags.
109 if test "$GCC" = yes; then
111 *-*-solaris*|alpha*-dec-osf*)
112 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
115 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
123 AC_SUBST(LIBTOOL_DEPS)
126 missing_dir=`cd $ac_aux_dir && pwd`
127 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
128 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
130 dnl Checks for system services.
132 dnl Check the size of various builtin types; see typesize.h (error)
133 AC_CHECK_SIZEOF(char, 0)
134 AC_CHECK_SIZEOF(short, 0)
135 AC_CHECK_SIZEOF(int, 0)
136 AC_CHECK_SIZEOF(long, 0)
137 dnl AC_CHECK_SIZEOF(long long, 0)
139 dnl Checks for libraries.
141 dnl We want to test for the following in libc before checking for their
142 dnl respective libraries, because some systems (like Irix) have both, and the
143 dnl non-libc versions may be broken.
144 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
146 if test "$ac_cv_func_gethostbyname" = no; then
147 AC_CHECK_LIB(nsl, gethostbyname)
150 if test "$ac_cv_func_connect" = no; then
151 AC_CHECK_LIB(socket, connect)
154 if test "$ac_cv_func_dlopen" = no; then
155 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
156 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
159 dnl Check for HP/UX dynamic loader. This should only be in -ldld.
160 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
162 dnl Check for Solaris realtime support
163 AC_CHECK_LIB(rt, sched_yield)
165 dnl Determine the system's authentication capabilities, if autologin is
166 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
167 dnl (Linux shadow passwords)
168 if test "$enable_autologin" != no; then
169 if test "$with_pam" = yes; then
171 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
173 AC_CHECK_FUNCS(pam_start)
174 test "$enable_chkpwd" != no && LIBS=$save_LIBS
176 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
178 AC_SEARCH_LIBS(getspnam, shadow, [
179 if test "$ac_cv_search_getspnam" = -lshadow; then
180 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
182 test "$enable_chkpwd" != no && LIBS=$save_LIBS
183 if test "$ac_cv_func_crypt" = no; then
184 AC_CHECK_LIB(crypt, crypt, [
185 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
186 test "$enable_chkpwd" = no && \
187 LIBS="-lcrypt $LIBS"])
190 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
191 AC_DEFINE(ENABLE_AUTOLOGIN)
192 if test "$enable_chkpwd" != no; then
193 AC_DEFINE(ENABLE_CHKPWD)
201 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
202 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
204 if test "x$with_ncurses" != xno; then
205 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
206 AC_SEARCH_LIBS(initscr, [ncurses curses])
208 AC_SEARCH_LIBS(tgetent, [curses termcap])
209 AC_SEARCH_LIBS(initscr, [curses])
211 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
213 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
214 dnl which the -pthread flag takes care of this.)
215 if test "$check_pthread" != no; then
216 AC_CHECK_LIB(pthread, pthread_create)
217 AC_CHECK_LIB(pthreads, pthread_create)
220 # The big search for OpenSSL
221 if test "$with_ssl" != "no"; then
223 saved_LDFLAGS="$LDFLAGS"
224 saved_CFLAGS="$CFLAGS"
225 if test "x$prefix" != "xNONE"; then
226 tryssldir="$tryssldir $prefix"
228 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
229 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
230 CFLAGS="$saved_CFLAGS"
231 LDFLAGS="$saved_LDFLAGS"
232 LIBS="$saved_LIBS -lssl -lcrypto"
234 # Skip directories if they don't exist
235 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
238 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
239 # Try to use $ssldir/lib if it exists, otherwise
241 if test -d "$ssldir/lib" ; then
242 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
243 if test ! -z "$need_dash_r" ; then
244 LDFLAGS="-R$ssldir/lib $LDFLAGS"
247 LDFLAGS="-L$ssldir $saved_LDFLAGS"
248 if test ! -z "$need_dash_r" ; then
249 LDFLAGS="-R$ssldir $LDFLAGS"
252 # Try to use $ssldir/include if it exists, otherwise
254 if test -d "$ssldir/include" ; then
255 CFLAGS="-I$ssldir/include $saved_CFLAGS"
257 CFLAGS="-I$ssldir $saved_CFLAGS"
261 # Basic test to check for compatible version and correct linking
262 # *does not* test for RSA - that comes later.
266 #include <openssl/rand.h>
270 memset(a, 0, sizeof(a));
271 RAND_add(a, sizeof(a), sizeof(a));
272 return(RAND_status() <= 0);
281 if test ! -z "$found_crypto" ; then
286 if test -z "$ssldir" ; then
290 if test ! -z "$found_crypto" ; then
291 ac_cv_openssldir=$ssldir
293 ac_cv_openssldir="no"
297 LDFLAGS="$saved_LDFLAGS"
298 CFLAGS="$saved_CFLAGS"
300 if test "x$ac_cv_openssldir" != "xno" ; then
301 AC_DEFINE(HAVE_OPENSSL)
302 LIBS="-lssl -lcrypto $LIBS"
303 dnl Need to recover ssldir - test above runs in subshell
304 ssldir=$ac_cv_openssldir
305 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
306 # Try to use $ssldir/lib if it exists, otherwise
308 if test -d "$ssldir/lib" ; then
309 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
310 if test ! -z "$need_dash_r" ; then
311 LDFLAGS="-R$ssldir/lib $LDFLAGS"
314 LDFLAGS="-L$ssldir $saved_LDFLAGS"
315 if test ! -z "$need_dash_r" ; then
316 LDFLAGS="-R$ssldir $LDFLAGS"
319 # Try to use $ssldir/include if it exists, otherwise
321 if test -d "$ssldir/include" ; then
322 CFLAGS="-I$ssldir/include $saved_CFLAGS"
324 CFLAGS="-I$ssldir $saved_CFLAGS"
330 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
331 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
335 if test -d "$db_dir/include/db4"; then
336 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
338 elif test -d "$db_dir/include/db3"; then
339 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
341 elif test "$db_dir"; then
342 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
343 elif test -d /usr/include/db4; then
344 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
346 elif test -d /usr/include/db3; then
347 CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
351 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
352 DATABASE=database_sleepycat.c
358 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
359 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
360 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
362 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
364 AC_CHECK_LIB(gdbm, gdbm_open,
372 dnl Checks for the zlib compression library.
373 if test "x$with_zlib" != xno ; then
374 AC_CHECK_HEADERS(zlib.h,
375 [AC_CHECK_LIB(z, zlibVersion,
380 if test "x$ok_zlib" != xno ; then
387 dnl Checks for the libical calendaring library.
388 if test "x$with_libical" != xno ; then
389 AC_CHECK_HEADERS(ical.h,
390 [AC_CHECK_LIB(ical, icalcomponent_new,
395 if test "x$ok_libical" != xno ; then
397 AC_DEFINE(HAVE_LIBICAL)
402 dnl Checks for header files.
408 dnl TODO: for the DB header checks, we should check whether the headers
409 dnl define db_env_create, somehow
411 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db3/db.h db4/db.h pthread.h netinet/in.h)
414 dnl need to check if this is actually compilable, sometimes there are
415 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
417 if test "x$with_ncurses" != xno; then
418 AC_CHECK_HEADERS(ncurses.h,,,[ ])
421 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
422 [#ifdef HAVE_SYS_TYPES_H
423 #include <sys/types.h>
425 #ifdef HAVE_NETINET_IN_H
426 #include <netinet/in.h>
432 dnl Checks for typedefs, structures, and compiler characteristics.
438 dnl defined in acinclude.m4:
441 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
442 [AC_TRY_COMPILE([#include <sys/types.h>
443 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
444 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
445 if test $ac_cv_struct_ut_type = yes; then
446 AC_DEFINE(HAVE_UT_TYPE)
449 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
450 [AC_TRY_COMPILE([#include <sys/types.h>
451 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
452 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
453 if test $ac_cv_struct_ut_host = yes; then
454 AC_DEFINE(HAVE_UT_HOST)
457 dnl Checks for library functions.
459 AC_PROG_GCC_TRADITIONAL
462 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
464 dnl Now check for pthreads
466 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
467 dnl we need to include pthread.h
469 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
470 [AC_TRY_LINK([#include <pthread.h>],
473 /* The GNU C library defines this for functions which it implements
474 to always fail with ENOSYS. Some functions are actually named
475 something starting with __ and the normal name is an alias. */
476 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
479 pthread_cancel(thread);
481 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
482 if test "$ac_cv_func_pthread_cancel" = yes; then
483 AC_DEFINE(HAVE_PTHREAD_CANCEL)
486 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
487 [AC_TRY_LINK([#include <pthread.h>],
488 [ /* The GNU C library defines this for functions which it implements
489 to always fail with ENOSYS. Some functions are actually named
490 something starting with __ and the normal name is an alias. */
491 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
494 pthread_create(NULL, NULL, NULL, NULL);
496 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
497 if test "$ac_cv_func_pthread_create" = yes; then
498 test "$DATABASE" && TARGETS="client server utils serv_modules"
499 if test "x$enable_threaded_client" != xno; then
500 AC_DEFINE(THREADED_CLIENT)
504 AC_REPLACE_FUNCS(snprintf getutline)
506 dnl Done! Now write the Makefile and sysdep.h
510 AC_SUBST(chkpwd_LIBS)
513 AC_CONFIG_HEADER(sysdep.h)
514 AC_CONFIG_FILES([Makefile weekly])
517 if test -z "$DATABASE"; then
518 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
523 echo "... On many operating systems, you must use GNU make (gmake) to compile"