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"
345 AC_CHECK_DB([db db-4.1 db-4 db4 db-3.3 db-3.2 db-3.1 db-3 db3],
347 DATABASE=database_sleepycat.c
350 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
351 library. Use --with-db=PATH to specify
356 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
357 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
358 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
360 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
362 AC_CHECK_LIB(gdbm, gdbm_open,
370 dnl Checks for the zlib compression library.
371 if test "x$with_zlib" != xno ; then
372 AC_CHECK_HEADERS(zlib.h,
373 [AC_CHECK_LIB(z, zlibVersion,
378 if test "x$ok_zlib" = xyes ; then
385 dnl Checks for the libical calendaring library.
386 if test "x$with_libical" != xno ; then
387 AC_CHECK_HEADERS(ical.h,
388 [AC_CHECK_LIB(ical, icalcomponent_new,
393 if test "x$ok_libical" = xyes ; then
401 sscanf(ICAL_VERSION, "%f", &v);
402 printf("libical version: %0.2f\n", v);
406 printf("This version is ok.\n");
409 printf("libical 0.24 or newer required.\n");
410 printf("Citadel will be built without calendar support.\n");
416 AC_DEFINE(HAVE_LIBICAL)
423 dnl Checks for header files.
429 dnl TODO: for the DB header checks, we should check whether the headers
430 dnl define db_env_create, somehow
432 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)
435 dnl need to check if this is actually compilable, sometimes there are
436 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
438 if test "x$with_ncurses" != xno; then
439 AC_CHECK_HEADERS(ncurses.h,,,[ ])
442 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
443 [#ifdef HAVE_SYS_TYPES_H
444 #include <sys/types.h>
446 #ifdef HAVE_NETINET_IN_H
447 #include <netinet/in.h>
449 #ifdef HAVE_ARPA_NAMESER_H
450 #include <arpa/nameser.h>
454 dnl Checks for typedefs, structures, and compiler characteristics.
460 dnl defined in acinclude.m4:
463 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
464 [AC_TRY_COMPILE([#include <sys/types.h>
465 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
466 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
467 if test $ac_cv_struct_ut_type = yes; then
468 AC_DEFINE(HAVE_UT_TYPE)
471 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
472 [AC_TRY_COMPILE([#include <sys/types.h>
473 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
474 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
475 if test $ac_cv_struct_ut_host = yes; then
476 AC_DEFINE(HAVE_UT_HOST)
479 dnl Checks for library functions.
481 AC_PROG_GCC_TRADITIONAL
484 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
486 dnl Now check for pthreads
488 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
489 dnl we need to include pthread.h
491 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
492 [AC_TRY_LINK([#include <pthread.h>],
495 /* The GNU C library defines this for functions which it implements
496 to always fail with ENOSYS. Some functions are actually named
497 something starting with __ and the normal name is an alias. */
498 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
501 pthread_cancel(thread);
503 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
504 if test "$ac_cv_func_pthread_cancel" = yes; then
505 AC_DEFINE(HAVE_PTHREAD_CANCEL)
508 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
509 [AC_TRY_LINK([#include <pthread.h>],
510 [ /* The GNU C library defines this for functions which it implements
511 to always fail with ENOSYS. Some functions are actually named
512 something starting with __ and the normal name is an alias. */
513 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
516 pthread_create(NULL, NULL, NULL, NULL);
518 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
519 if test "$ac_cv_func_pthread_create" = yes; then
520 test "$DATABASE" && TARGETS="client server utils"
521 if test "x$enable_threaded_client" != xno; then
522 AC_DEFINE(THREADED_CLIENT)
526 AC_REPLACE_FUNCS(snprintf getutline)
528 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
530 # echo $ECHO_N "opening your window... $ECHO_C" >&6
532 # month=`date | cut -f 2 -d ' '`
535 # ac_cv_weather="it's cold!"
538 # ac_cv_weather="it's wet!"
541 # ac_cv_weather="it's hot!"
544 # ac_cv_weather="it's cool"
546 # May | Jun | Sep | *)
547 # ac_cv_weather="it's fine"
552 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
553 number=`date | cut -c 19`
556 ac_cv_under_the_bed="lunatics and monsters found"
559 ac_cv_under_the_bed="dust bunnies found"
564 dnl Done! Now write the Makefile and sysdep.h
568 AC_SUBST(chkpwd_LIBS)
571 AC_CONFIG_HEADER(sysdep.h)
572 AC_CONFIG_FILES([Makefile weekly])
575 if test -z "$DATABASE"; then
576 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
581 echo "... On many operating systems, you must use GNU make (gmake) to compile"