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 Curses support on Mac OS X is kind of screwed at the moment.
79 AC_DEFINE(DISABLE_CURSES)
81 dnl Digital Unix has an odd way to build for pthreads, and we can't
82 dnl build pthreads programs with gcc due to header problems.
84 test -z "$CC" && CC=cc
85 LIBS="-lpthread -lexc $LIBS"
88 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
90 if test "$with_kthread" = yes; then
96 PTHREAD_DEFS=-D_THREAD_SAFE
101 PTHREAD_DEFS=-pthread
104 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
107 DEFS="$DEFS $PTHREAD_DEFS"
109 dnl Checks for programs.
112 dnl Set up system-dependent compiler flags.
113 if test "$GCC" = yes; then
115 *-*-solaris*|alpha*-dec-osf*)
116 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
119 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
127 AC_SUBST(LIBTOOL_DEPS)
130 missing_dir=`cd $ac_aux_dir && pwd`
131 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
132 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
134 dnl Checks for system services.
136 dnl Check the size of various builtin types; see typesize.h (error)
137 AC_CHECK_SIZEOF(char, 0)
138 AC_CHECK_SIZEOF(short, 0)
139 AC_CHECK_SIZEOF(int, 0)
140 AC_CHECK_SIZEOF(long, 0)
141 dnl AC_CHECK_SIZEOF(long long, 0)
143 dnl Checks for libraries.
145 dnl We want to test for the following in libc before checking for their
146 dnl respective libraries, because some systems (like Irix) have both, and the
147 dnl non-libc versions may be broken.
148 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
150 if test "$ac_cv_func_gethostbyname" = no; then
151 AC_CHECK_LIB(nsl, gethostbyname)
154 if test "$ac_cv_func_connect" = no; then
155 AC_CHECK_LIB(socket, connect)
158 if test "$ac_cv_func_dlopen" = no; then
159 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
160 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
163 dnl Check for HP/UX dynamic loader. This should only be in -ldld.
164 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
166 dnl Check for Solaris realtime support
167 AC_CHECK_LIB(rt, sched_yield)
169 dnl Determine the system's authentication capabilities, if autologin is
170 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
171 dnl (Linux shadow passwords)
172 if test "$enable_autologin" != no; then
173 if test "$with_pam" = yes; then
175 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
177 AC_CHECK_FUNCS(pam_start)
178 test "$enable_chkpwd" != no && LIBS=$save_LIBS
180 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
182 AC_SEARCH_LIBS(getspnam, shadow, [
183 if test "$ac_cv_search_getspnam" = -lshadow; then
184 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
186 test "$enable_chkpwd" != no && LIBS=$save_LIBS
187 if test "$ac_cv_func_crypt" = no; then
188 AC_CHECK_LIB(crypt, crypt, [
189 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
190 test "$enable_chkpwd" = no && \
191 LIBS="-lcrypt $LIBS"])
194 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
195 AC_DEFINE(ENABLE_AUTOLOGIN)
196 if test "$enable_chkpwd" != no; then
197 AC_DEFINE(ENABLE_CHKPWD)
205 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
206 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
208 if test "x$with_ncurses" != "xno"; then
209 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
210 AC_SEARCH_LIBS(scrollok, [ncurses curses])
211 AC_SEARCH_LIBS(initscr, [ncurses curses])
213 AC_SEARCH_LIBS(tgetent, [curses termcap])
214 AC_SEARCH_LIBS(initscr, [curses])
216 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
218 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
219 dnl which the -pthread flag takes care of this.)
220 if test "$check_pthread" != no; then
221 AC_CHECK_LIB(pthread, pthread_create)
222 AC_CHECK_LIB(pthreads, pthread_create)
225 # The big search for OpenSSL
226 if test "$with_ssl" != "no"; then
228 saved_LDFLAGS="$LDFLAGS"
229 saved_CFLAGS="$CFLAGS"
230 if test "x$prefix" != "xNONE"; then
231 tryssldir="$tryssldir $prefix"
233 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
234 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
235 CFLAGS="$saved_CFLAGS"
236 LDFLAGS="$saved_LDFLAGS"
237 LIBS="$saved_LIBS -lssl -lcrypto"
239 # Skip directories if they don't exist
240 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
243 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
244 # Try to use $ssldir/lib if it exists, otherwise
246 if test -d "$ssldir/lib" ; then
247 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
248 if test ! -z "$need_dash_r" ; then
249 LDFLAGS="-R$ssldir/lib $LDFLAGS"
252 LDFLAGS="-L$ssldir $saved_LDFLAGS"
253 if test ! -z "$need_dash_r" ; then
254 LDFLAGS="-R$ssldir $LDFLAGS"
257 # Try to use $ssldir/include if it exists, otherwise
259 if test -d "$ssldir/include" ; then
260 CFLAGS="-I$ssldir/include $saved_CFLAGS"
262 CFLAGS="-I$ssldir $saved_CFLAGS"
266 # Basic test to check for compatible version and correct linking
267 # *does not* test for RSA - that comes later.
271 #include <openssl/rand.h>
275 memset(a, 0, sizeof(a));
276 RAND_add(a, sizeof(a), sizeof(a));
277 return(RAND_status() <= 0);
286 if test ! -z "$found_crypto" ; then
291 if test -z "$ssldir" ; then
295 if test ! -z "$found_crypto" ; then
296 ac_cv_openssldir=$ssldir
298 ac_cv_openssldir="no"
302 LDFLAGS="$saved_LDFLAGS"
303 CFLAGS="$saved_CFLAGS"
305 if test "x$ac_cv_openssldir" != "xno" ; then
306 AC_DEFINE(HAVE_OPENSSL)
307 LIBS="-lssl -lcrypto $LIBS"
308 dnl Need to recover ssldir - test above runs in subshell
309 ssldir=$ac_cv_openssldir
310 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
311 # Try to use $ssldir/lib if it exists, otherwise
313 if test -d "$ssldir/lib" ; then
314 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
315 if test ! -z "$need_dash_r" ; then
316 LDFLAGS="-R$ssldir/lib $LDFLAGS"
319 LDFLAGS="-L$ssldir $saved_LDFLAGS"
320 if test ! -z "$need_dash_r" ; then
321 LDFLAGS="-R$ssldir $LDFLAGS"
324 # Try to use $ssldir/include if it exists, otherwise
326 if test -d "$ssldir/include" ; then
327 CFLAGS="-I$ssldir/include $saved_CFLAGS"
329 CFLAGS="-I$ssldir $saved_CFLAGS"
335 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
336 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
340 if test -d "$db_dir/include/db4"; then
341 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
343 elif test -d "$db_dir/include/db3"; then
344 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
346 elif test "$db_dir"; then
347 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
348 elif test -d /usr/include/db4; then
349 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
351 elif test -d /usr/include/db3; then
352 CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
356 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
357 DATABASE=database_sleepycat.c
363 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
364 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
365 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
367 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
369 AC_CHECK_LIB(gdbm, gdbm_open,
377 dnl Checks for the zlib compression library.
378 if test "x$with_zlib" != xno ; then
379 AC_CHECK_HEADERS(zlib.h,
380 [AC_CHECK_LIB(z, zlibVersion,
385 if test "x$ok_zlib" = xyes ; then
392 dnl Checks for the libical calendaring library.
393 if test "x$with_libical" != xno ; then
394 AC_CHECK_HEADERS(ical.h,
395 [AC_CHECK_LIB(ical, icalcomponent_new,
400 if test "x$ok_libical" = xyes ; then
402 AC_DEFINE(HAVE_LIBICAL)
407 dnl Checks for header files.
413 dnl TODO: for the DB header checks, we should check whether the headers
414 dnl define db_env_create, somehow
416 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h malloc.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)
419 dnl need to check if this is actually compilable, sometimes there are
420 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
422 if test "x$with_ncurses" != xno; then
423 AC_CHECK_HEADERS(ncurses.h,,,[ ])
426 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
427 [#ifdef HAVE_SYS_TYPES_H
428 #include <sys/types.h>
430 #ifdef HAVE_NETINET_IN_H
431 #include <netinet/in.h>
437 dnl Checks for typedefs, structures, and compiler characteristics.
443 dnl defined in acinclude.m4:
446 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
447 [AC_TRY_COMPILE([#include <sys/types.h>
448 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
449 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
450 if test $ac_cv_struct_ut_type = yes; then
451 AC_DEFINE(HAVE_UT_TYPE)
454 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
455 [AC_TRY_COMPILE([#include <sys/types.h>
456 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
457 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
458 if test $ac_cv_struct_ut_host = yes; then
459 AC_DEFINE(HAVE_UT_HOST)
462 dnl Checks for library functions.
464 AC_PROG_GCC_TRADITIONAL
467 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
469 dnl Now check for pthreads
471 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
472 dnl we need to include pthread.h
474 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
475 [AC_TRY_LINK([#include <pthread.h>],
478 /* The GNU C library defines this for functions which it implements
479 to always fail with ENOSYS. Some functions are actually named
480 something starting with __ and the normal name is an alias. */
481 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
484 pthread_cancel(thread);
486 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
487 if test "$ac_cv_func_pthread_cancel" = yes; then
488 AC_DEFINE(HAVE_PTHREAD_CANCEL)
491 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
492 [AC_TRY_LINK([#include <pthread.h>],
493 [ /* The GNU C library defines this for functions which it implements
494 to always fail with ENOSYS. Some functions are actually named
495 something starting with __ and the normal name is an alias. */
496 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
499 pthread_create(NULL, NULL, NULL, NULL);
501 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
502 if test "$ac_cv_func_pthread_create" = yes; then
503 test "$DATABASE" && TARGETS="client server utils serv_modules"
504 if test "x$enable_threaded_client" != xno; then
505 AC_DEFINE(THREADED_CLIENT)
509 AC_REPLACE_FUNCS(snprintf getutline)
511 dnl Done! Now write the Makefile and sysdep.h
515 AC_SUBST(chkpwd_LIBS)
518 AC_CONFIG_HEADER(sysdep.h)
519 AC_CONFIG_FILES([Makefile weekly])
522 if test -z "$DATABASE"; then
523 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
528 echo "... On many operating systems, you must use GNU make (gmake) to compile"