1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel], [6.15], [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_ENABLE(pie, [ --enable-pie build position-independent executables])
22 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
23 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
24 AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
26 [ --with-ssl=PATH Specify path to OpenSSL installation ],
28 if test "x$withval" != "xno" ; then
33 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
35 AC_ARG_WITH(with_zlib, [ --with-zlib use zlib compression if present])
36 AC_ARG_WITH(with_ldap, [ --with-ldap use OpenLDAP client library])
37 AC_ARG_WITH(with_libical, [ --with-libical use libical calendaring library])
38 AC_ARG_WITH(with_newt, [ --with-newt use newt window library])
40 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
44 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
45 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
48 test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
49 test -d /usr/local/BerkeleyDB.4.2 && db_dir=/usr/local/BerkeleyDB.4.2
52 dnl By default, we only build the client (citadel and whobbs) unless we can
53 dnl figure out how to build with POSIX threads.
57 PTHREAD_DEFS=-D_REENTRANT
58 AC_MSG_CHECKING([how to compile with POSIX threads])
60 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
61 dnl for dlopen(), and has a wrapper script to link with shared libs.
62 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
64 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
65 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
66 AC_MSG_RESULT([Old BSDI])
69 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
70 AC_MSG_RESULT([BSD/OS])
72 dnl Curses support on Mac OS X is kind of screwed at the moment.
74 AC_DEFINE(DISABLE_CURSES)
75 AC_MSG_RESULT([Mac OS X])
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"
83 AC_MSG_RESULT([Tru64 or Digital UNIX])
85 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
87 if test "$with_kthread" = yes; then
93 PTHREAD_DEFS=-D_THREAD_SAFE
94 AC_MSG_RESULT([FreeBSD])
100 AC_MSG_RESULT([OpenBSD])
103 PTHREAD_DEFS="-D_REENTRANT -pthread"
104 AC_MSG_RESULT([Linux])
107 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
108 AC_MSG_RESULT([Solaris])
111 SERVER_LDFLAGS="-Wl,-subsystem,windows"
112 AC_MSG_RESULT([Cygwin])
115 AC_MSG_RESULT([default])
118 dnl DEFS="$DEFS $PTHREAD_DEFS"
120 dnl Checks for programs.
123 dnl Set up system-dependent compiler flags.
124 if test "$GCC" = yes; then
125 if test "$CC" = icc; then
129 *-*-solaris*|alpha*-dec-osf*)
130 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
133 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
139 if test "x$enable_pie" = xyes; then
140 save_CFLAGS="$CFLAGS"
141 save_LDFLAGS="$LDFLAGS"
142 CFLAGS="$CFLAGS -fpie"
143 LDFLAGS="$LDFLAGS -pie -fpie"
144 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
146 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
147 if test $ac_cv_pie_fpie = no; then
148 CFLAGS="$save_CFLAGS"
149 LDFLAGS="$save_LDFLAGS"
155 missing_dir=`cd $ac_aux_dir && pwd`
156 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
157 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
159 dnl Checks for system services.
161 dnl Check the size of various builtin types; see typesize.h (error)
162 AC_CHECK_SIZEOF(char, 0)
163 AC_CHECK_SIZEOF(short, 0)
164 AC_CHECK_SIZEOF(int, 0)
165 AC_CHECK_SIZEOF(long, 0)
166 dnl AC_CHECK_SIZEOF(long long, 0)
168 dnl Checks for libraries.
170 dnl We want to test for the following in libc before checking for their
171 dnl respective libraries, because some systems (like Irix) have both, and the
172 dnl non-libc versions may be broken.
173 AC_CHECK_FUNCS(crypt gethostbyname connect)
175 if test "$ac_cv_func_gethostbyname" = no; then
176 AC_CHECK_LIB(nsl, gethostbyname)
179 if test "$ac_cv_func_connect" = no; then
180 AC_CHECK_LIB(socket, connect)
183 dnl Check for Solaris realtime support
184 AC_CHECK_LIB(rt, sched_yield)
186 dnl Determine the system's authentication capabilities, if autologin is
187 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
188 dnl (Linux shadow passwords)
189 if test "$enable_autologin" != no; then
190 if test "$with_pam" = yes; then
192 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
194 AC_CHECK_FUNCS(pam_start)
195 test "$enable_chkpwd" != no && LIBS=$save_LIBS
197 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
199 AC_SEARCH_LIBS(getspnam, shadow, [
200 if test "$ac_cv_search_getspnam" = -lshadow; then
201 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
203 test "$enable_chkpwd" != no && LIBS=$save_LIBS
204 if test "$ac_cv_func_crypt" = no; then
205 AC_CHECK_LIB(crypt, crypt, [
206 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
207 test "$enable_chkpwd" = no && \
208 LIBS="-lcrypt $LIBS"])
211 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
212 AC_DEFINE(ENABLE_AUTOLOGIN)
213 if test "$enable_chkpwd" != no; then
214 AC_DEFINE(ENABLE_CHKPWD)
222 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
223 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
225 if test "x$with_ncurses" != "xno"; then
226 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
227 AC_SEARCH_LIBS(scrollok, [ncurses curses])
228 AC_SEARCH_LIBS(initscr, [ncurses curses])
230 AC_SEARCH_LIBS(tgetent, [curses termcap])
231 AC_SEARCH_LIBS(initscr, [curses])
233 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
235 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
236 dnl which the -pthread flag takes care of this.)
237 if test "$check_pthread" != no; then
238 AC_CHECK_LIB(pthread, pthread_create)
239 AC_CHECK_LIB(pthreads, pthread_create)
242 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
244 # The big search for OpenSSL
245 if test "$with_ssl" != "no"; then
247 saved_LDFLAGS="$LDFLAGS"
248 saved_CFLAGS="$CFLAGS"
249 if test "x$prefix" != "xNONE"; then
250 tryssldir="$tryssldir $prefix"
252 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
253 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
254 CFLAGS="$saved_CFLAGS"
255 LDFLAGS="$saved_LDFLAGS"
256 LIBS="$saved_LIBS -lssl -lcrypto"
258 # Skip directories if they don't exist
259 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
262 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
263 # Try to use $ssldir/lib if it exists, otherwise
265 if test -d "$ssldir/lib" ; then
266 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
267 if test ! -z "$need_dash_r" ; then
268 LDFLAGS="-R$ssldir/lib $LDFLAGS"
271 LDFLAGS="-L$ssldir $saved_LDFLAGS"
272 if test ! -z "$need_dash_r" ; then
273 LDFLAGS="-R$ssldir $LDFLAGS"
276 # Try to use $ssldir/include if it exists, otherwise
278 if test -d "$ssldir/include" ; then
279 CFLAGS="-I$ssldir/include $saved_CFLAGS"
281 CFLAGS="-I$ssldir $saved_CFLAGS"
285 # Basic test to check for compatible version and correct linking
286 # *does not* test for RSA - that comes later.
290 #include <openssl/rand.h>
294 memset(a, 0, sizeof(a));
295 RAND_add(a, sizeof(a), sizeof(a));
296 return(RAND_status() <= 0);
305 if test ! -z "$found_crypto" ; then
310 if test -z "$ssldir" ; then
314 if test ! -z "$found_crypto" ; then
315 ac_cv_openssldir=$ssldir
317 ac_cv_openssldir="no"
321 LDFLAGS="$saved_LDFLAGS"
322 CFLAGS="$saved_CFLAGS"
324 if test "x$ac_cv_openssldir" != "xno" ; then
325 AC_DEFINE(HAVE_OPENSSL)
326 LIBS="-lssl -lcrypto $LIBS"
327 dnl Need to recover ssldir - test above runs in subshell
328 ssldir=$ac_cv_openssldir
329 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
330 # Try to use $ssldir/lib if it exists, otherwise
332 if test -d "$ssldir/lib" ; then
333 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
334 if test ! -z "$need_dash_r" ; then
335 LDFLAGS="-R$ssldir/lib $LDFLAGS"
338 LDFLAGS="-L$ssldir $saved_LDFLAGS"
339 if test ! -z "$need_dash_r" ; then
340 LDFLAGS="-R$ssldir $LDFLAGS"
343 # Try to use $ssldir/include if it exists, otherwise
345 if test -d "$ssldir/include" ; then
346 CFLAGS="-I$ssldir/include $saved_CFLAGS"
348 CFLAGS="-I$ssldir $saved_CFLAGS"
354 if test "x$with_db" != xno; then
355 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
359 if test -d "$db_dir/include/db4"; then
360 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
362 elif test "$db_dir"; then
363 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
364 elif test -d /usr/include/db4; then
365 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
370 AC_CHECK_DB([db db-4.1 db-4 db4],
372 DATABASE=database_sleepycat.c
374 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
375 library. Use --with-db=PATH to specify
381 dnl Checks for the zlib compression library.
382 if test "x$with_zlib" != xno ; then
383 AC_CHECK_HEADERS(zlib.h,
384 [AC_CHECK_LIB(z, zlibVersion,
389 if test "x$ok_zlib" = xyes ; then
390 SERVER_LIBS="-lz $SERVER_LIBS"
397 dnl Checks for the OpenLDAP client library.
398 if test "x$with_ldap" != xno ; then
399 AC_CHECK_HEADERS(ldap.h,
400 [AC_CHECK_LIB(ldap, ldap_init,
405 if test "x$ok_ldap" = xyes ; then
406 SERVER_LIBS="-lldap $SERVER_LIBS"
413 dnl Checks for the newt window library.
414 if test "x$with_newt" != xno ; then
415 AC_CHECK_HEADERS(newt.h,
416 [AC_CHECK_LIB(newt, newtInit,
421 if test "x$ok_newt" = xyes ; then
422 SETUP_LIBS="-lnewt $SETUP_LIBS"
431 dnl Checks for the libical calendaring library.
432 if test "x$with_libical" != xno ; then
433 AC_CHECK_HEADERS(ical.h,
434 [AC_CHECK_LIB(ical, icalcomponent_new,
439 if test "x$ok_libical" = xyes ; then
447 sscanf(ICAL_VERSION, "%f", &v);
448 printf("libical version: %0.2f\n", v);
452 printf("This version is ok.\n");
455 printf("libical 0.24 or newer required.\n");
456 printf("Citadel will be built without calendar support.\n");
461 SERVER_LIBS="-lical $SERVER_LIBS"
462 AC_DEFINE(HAVE_LIBICAL)
470 dnl Checks for header files.
476 dnl TODO: for the DB header checks, we should check whether the headers
477 dnl define db_env_create, somehow
479 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h malloc.h termios.h sys/ioctl.h sys/select.h sys/time.h sys/prctl.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db4/db.h pthread.h netinet/in.h arpa/nameser.h arpa/nameser_compat.h)
482 dnl need to check if this is actually compilable, sometimes there are
483 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
485 if test "x$with_ncurses" != xno; then
486 AC_CHECK_HEADERS(ncurses.h,,,[ ])
489 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
490 [#ifdef HAVE_SYS_TYPES_H
491 #include <sys/types.h>
493 #ifdef HAVE_NETINET_IN_H
494 #include <netinet/in.h>
496 #ifdef HAVE_ARPA_NAMESER_H
497 #include <arpa/nameser.h>
501 dnl Checks for typedefs, structures, and compiler characteristics.
507 dnl defined in acinclude.m4:
510 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
511 [AC_TRY_COMPILE([#include <sys/types.h>
512 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
513 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
514 if test $ac_cv_struct_ut_type = yes; then
515 AC_DEFINE(HAVE_UT_TYPE)
518 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
519 [AC_TRY_COMPILE([#include <sys/types.h>
520 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
521 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
522 if test $ac_cv_struct_ut_host = yes; then
523 AC_DEFINE(HAVE_UT_HOST)
526 dnl Checks for library functions.
528 AC_PROG_GCC_TRADITIONAL
531 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
533 dnl Now check for pthreads
535 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
536 dnl we need to include pthread.h
538 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
539 [AC_TRY_LINK([#include <pthread.h>],
542 /* The GNU C library defines this for functions which it implements
543 to always fail with ENOSYS. Some functions are actually named
544 something starting with __ and the normal name is an alias. */
545 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
548 pthread_cancel(thread);
550 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
551 if test "$ac_cv_func_pthread_cancel" = yes; then
552 AC_DEFINE(HAVE_PTHREAD_CANCEL)
555 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
556 [AC_TRY_LINK([#include <pthread.h>],
557 [ /* The GNU C library defines this for functions which it implements
558 to always fail with ENOSYS. Some functions are actually named
559 something starting with __ and the normal name is an alias. */
560 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
563 pthread_create(NULL, NULL, NULL, NULL);
565 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
566 if test "$ac_cv_func_pthread_create" = yes; then
567 test "$DATABASE" && TARGETS="client server utils"
568 if test "x$enable_threaded_client" != xno; then
569 AC_DEFINE(THREADED_CLIENT)
573 AC_REPLACE_FUNCS(snprintf getutline)
575 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
577 # echo $ECHO_N "opening your window... $ECHO_C" >&6
579 # month=`date | cut -f 2 -d ' '`
582 # ac_cv_weather="it's cold!"
585 # ac_cv_weather="it's wet!"
588 # ac_cv_weather="it's hot!"
591 # ac_cv_weather="it's cool"
593 # May | Jun | Sep | *)
594 # ac_cv_weather="it's fine"
599 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
600 number=`date | cut -c 19`
603 ac_cv_under_the_bed="lunatics and monsters found"
606 ac_cv_under_the_bed="dust bunnies found"
611 dnl Done! Now write the Makefile and sysdep.h
615 AC_SUBST(chkpwd_LIBS)
618 AC_SUBST(SERVER_LDFLAGS)
619 AC_SUBST(SERVER_LIBS)
621 AC_CONFIG_HEADER(sysdep.h)
622 AC_CONFIG_FILES([Makefile])
625 if test -z "$DATABASE"; then
626 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
631 echo "... On many operating systems, you must use GNU make (gmake) to compile"