1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [6.02], [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"
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 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 dnl Check for Solaris realtime support
155 AC_CHECK_LIB(rt, sched_yield)
157 dnl Determine the system's authentication capabilities, if autologin is
158 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
159 dnl (Linux shadow passwords)
160 if test "$enable_autologin" != no; then
161 if test "$with_pam" = yes; then
163 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
165 AC_CHECK_FUNCS(pam_start)
166 test "$enable_chkpwd" != no && LIBS=$save_LIBS
168 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
170 AC_SEARCH_LIBS(getspnam, shadow, [
171 if test "$ac_cv_search_getspnam" = -lshadow; then
172 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
174 test "$enable_chkpwd" != no && LIBS=$save_LIBS
175 if test "$ac_cv_func_crypt" = no; then
176 AC_CHECK_LIB(crypt, crypt, [
177 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
178 test "$enable_chkpwd" = no && \
179 LIBS="-lcrypt $LIBS"])
182 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
183 AC_DEFINE(ENABLE_AUTOLOGIN)
184 if test "$enable_chkpwd" != no; then
185 AC_DEFINE(ENABLE_CHKPWD)
193 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
194 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
196 if test "x$with_ncurses" != "xno"; then
197 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
198 AC_SEARCH_LIBS(scrollok, [ncurses curses])
199 AC_SEARCH_LIBS(initscr, [ncurses curses])
201 AC_SEARCH_LIBS(tgetent, [curses termcap])
202 AC_SEARCH_LIBS(initscr, [curses])
204 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
206 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
207 dnl which the -pthread flag takes care of this.)
208 if test "$check_pthread" != no; then
209 AC_CHECK_LIB(pthread, pthread_create)
210 AC_CHECK_LIB(pthreads, pthread_create)
213 # The big search for OpenSSL
214 if test "$with_ssl" != "no"; then
216 saved_LDFLAGS="$LDFLAGS"
217 saved_CFLAGS="$CFLAGS"
218 if test "x$prefix" != "xNONE"; then
219 tryssldir="$tryssldir $prefix"
221 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
222 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
223 CFLAGS="$saved_CFLAGS"
224 LDFLAGS="$saved_LDFLAGS"
225 LIBS="$saved_LIBS -lssl -lcrypto"
227 # Skip directories if they don't exist
228 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
231 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
232 # Try to use $ssldir/lib if it exists, otherwise
234 if test -d "$ssldir/lib" ; then
235 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
236 if test ! -z "$need_dash_r" ; then
237 LDFLAGS="-R$ssldir/lib $LDFLAGS"
240 LDFLAGS="-L$ssldir $saved_LDFLAGS"
241 if test ! -z "$need_dash_r" ; then
242 LDFLAGS="-R$ssldir $LDFLAGS"
245 # Try to use $ssldir/include if it exists, otherwise
247 if test -d "$ssldir/include" ; then
248 CFLAGS="-I$ssldir/include $saved_CFLAGS"
250 CFLAGS="-I$ssldir $saved_CFLAGS"
254 # Basic test to check for compatible version and correct linking
255 # *does not* test for RSA - that comes later.
259 #include <openssl/rand.h>
263 memset(a, 0, sizeof(a));
264 RAND_add(a, sizeof(a), sizeof(a));
265 return(RAND_status() <= 0);
274 if test ! -z "$found_crypto" ; then
279 if test -z "$ssldir" ; then
283 if test ! -z "$found_crypto" ; then
284 ac_cv_openssldir=$ssldir
286 ac_cv_openssldir="no"
290 LDFLAGS="$saved_LDFLAGS"
291 CFLAGS="$saved_CFLAGS"
293 if test "x$ac_cv_openssldir" != "xno" ; then
294 AC_DEFINE(HAVE_OPENSSL)
295 LIBS="-lssl -lcrypto $LIBS"
296 dnl Need to recover ssldir - test above runs in subshell
297 ssldir=$ac_cv_openssldir
298 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
299 # Try to use $ssldir/lib if it exists, otherwise
301 if test -d "$ssldir/lib" ; then
302 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
303 if test ! -z "$need_dash_r" ; then
304 LDFLAGS="-R$ssldir/lib $LDFLAGS"
307 LDFLAGS="-L$ssldir $saved_LDFLAGS"
308 if test ! -z "$need_dash_r" ; then
309 LDFLAGS="-R$ssldir $LDFLAGS"
312 # Try to use $ssldir/include if it exists, otherwise
314 if test -d "$ssldir/include" ; then
315 CFLAGS="-I$ssldir/include $saved_CFLAGS"
317 CFLAGS="-I$ssldir $saved_CFLAGS"
323 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
324 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
328 if test -d "$db_dir/include/db4"; then
329 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
331 elif test -d "$db_dir/include/db3"; then
332 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
334 elif test "$db_dir"; then
335 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
336 elif test -d /usr/include/db4; then
337 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
339 elif test -d /usr/include/db3; then
340 CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
344 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
345 DATABASE=database_sleepycat.c
351 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
352 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
353 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
355 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
357 AC_CHECK_LIB(gdbm, gdbm_open,
365 dnl Checks for the zlib compression library.
366 if test "x$with_zlib" != xno ; then
367 AC_CHECK_HEADERS(zlib.h,
368 [AC_CHECK_LIB(z, zlibVersion,
373 if test "x$ok_zlib" = xyes ; then
380 dnl Checks for the libical calendaring library.
381 if test "x$with_libical" != xno ; then
382 AC_CHECK_HEADERS(ical.h,
383 [AC_CHECK_LIB(ical, icalcomponent_new,
388 if test "x$ok_libical" = xyes ; then
396 sscanf(ICAL_VERSION, "%f", &v);
397 printf("libical version: %0.2f\n", v);
401 printf("This version is ok.\n");
404 printf("libical 0.24 or newer required.\n");
405 printf("Citadel will be built without calendar support.\n");
411 AC_DEFINE(HAVE_LIBICAL)
418 dnl Checks for header files.
424 dnl TODO: for the DB header checks, we should check whether the headers
425 dnl define db_env_create, somehow
427 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 arpa/nameser.h)
430 dnl need to check if this is actually compilable, sometimes there are
431 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
433 if test "x$with_ncurses" != xno; then
434 AC_CHECK_HEADERS(ncurses.h,,,[ ])
437 AC_CHECK_HEADER(resolv.h, [SMTP=serv_smtp.o serv_spam.o; DOMAIN=domain.c],,
438 [#ifdef HAVE_SYS_TYPES_H
439 #include <sys/types.h>
441 #ifdef HAVE_NETINET_IN_H
442 #include <netinet/in.h>
444 #ifdef HAVE_ARPA_NAMESER_H
445 #include <arpa/nameser.h>
451 dnl Checks for typedefs, structures, and compiler characteristics.
457 dnl defined in acinclude.m4:
460 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
461 [AC_TRY_COMPILE([#include <sys/types.h>
462 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
463 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
464 if test $ac_cv_struct_ut_type = yes; then
465 AC_DEFINE(HAVE_UT_TYPE)
468 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
469 [AC_TRY_COMPILE([#include <sys/types.h>
470 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
471 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
472 if test $ac_cv_struct_ut_host = yes; then
473 AC_DEFINE(HAVE_UT_HOST)
476 dnl Checks for library functions.
478 AC_PROG_GCC_TRADITIONAL
481 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
483 dnl Now check for pthreads
485 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
486 dnl we need to include pthread.h
488 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
489 [AC_TRY_LINK([#include <pthread.h>],
492 /* The GNU C library defines this for functions which it implements
493 to always fail with ENOSYS. Some functions are actually named
494 something starting with __ and the normal name is an alias. */
495 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
498 pthread_cancel(thread);
500 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
501 if test "$ac_cv_func_pthread_cancel" = yes; then
502 AC_DEFINE(HAVE_PTHREAD_CANCEL)
505 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
506 [AC_TRY_LINK([#include <pthread.h>],
507 [ /* The GNU C library defines this for functions which it implements
508 to always fail with ENOSYS. Some functions are actually named
509 something starting with __ and the normal name is an alias. */
510 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
513 pthread_create(NULL, NULL, NULL, NULL);
515 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
516 if test "$ac_cv_func_pthread_create" = yes; then
517 test "$DATABASE" && TARGETS="client server utils"
518 if test "x$enable_threaded_client" != xno; then
519 AC_DEFINE(THREADED_CLIENT)
523 AC_REPLACE_FUNCS(snprintf getutline)
525 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
527 # echo $ECHO_N "opening your window... $ECHO_C" >&6
529 # month=`date | cut -f 2 -d ' '`
532 # ac_cv_weather="it's cold!"
535 # ac_cv_weather="it's wet!"
538 # ac_cv_weather="it's hot!"
541 # ac_cv_weather="it's cool"
543 # May | Jun | Sep | *)
544 # ac_cv_weather="it's fine"
549 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
550 number=`date | cut -c 19`
553 ac_cv_under_the_bed="lunatics and monsters found"
556 ac_cv_under_the_bed="dust bunnies found"
561 dnl Done! Now write the Makefile and sysdep.h
565 AC_SUBST(chkpwd_LIBS)
568 AC_CONFIG_HEADER(sysdep.h)
569 AC_CONFIG_FILES([Makefile weekly])
572 if test -z "$DATABASE"; then
573 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
578 echo "... On many operating systems, you must use GNU make (gmake) to compile"