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
50 test -d /usr/local/BerkeleyDB.4.3 && db_dir=/usr/local/BerkeleyDB.4.3
53 dnl By default, we only build the client (citadel and whobbs) unless we can
54 dnl figure out how to build with POSIX threads.
58 PTHREAD_DEFS=-D_REENTRANT
59 AC_MSG_CHECKING([how to compile with POSIX threads])
61 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
62 dnl for dlopen(), and has a wrapper script to link with shared libs.
63 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
65 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
66 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
67 AC_MSG_RESULT([Old BSDI])
70 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
71 AC_MSG_RESULT([BSD/OS])
73 dnl Curses support on Mac OS X is kind of screwed at the moment.
75 AC_DEFINE(DISABLE_CURSES)
76 AC_MSG_RESULT([Mac OS X])
78 dnl Digital Unix has an odd way to build for pthreads, and we can't
79 dnl build pthreads programs with gcc due to header problems.
81 test -z "$CC" && CC=cc
82 LIBS="-lpthread -lexc $LIBS"
84 AC_MSG_RESULT([Tru64 or Digital UNIX])
86 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
88 if test "$with_kthread" = yes; then
94 PTHREAD_DEFS=-D_THREAD_SAFE
95 AC_MSG_RESULT([FreeBSD])
100 PTHREAD_DEFS=-pthread
101 AC_MSG_RESULT([OpenBSD])
104 PTHREAD_DEFS="-D_REENTRANT -pthread"
105 AC_MSG_RESULT([Linux])
108 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
109 AC_MSG_RESULT([Solaris])
112 SERVER_LDFLAGS="-Wl,-subsystem,windows"
113 AC_MSG_RESULT([Cygwin])
116 AC_MSG_RESULT([default])
119 dnl DEFS="$DEFS $PTHREAD_DEFS"
121 dnl Checks for programs.
124 dnl Set up system-dependent compiler flags.
125 if test "$GCC" = yes; then
126 if test "$CC" = icc; then
130 *-*-solaris*|alpha*-dec-osf*)
131 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
134 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
140 if test "x$enable_pie" = xyes; then
141 save_CFLAGS="$CFLAGS"
142 save_LDFLAGS="$LDFLAGS"
143 CFLAGS="$CFLAGS -fpie"
144 LDFLAGS="$LDFLAGS -pie -fpie"
145 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
147 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
148 if test $ac_cv_pie_fpie = no; then
149 CFLAGS="$save_CFLAGS"
150 LDFLAGS="$save_LDFLAGS"
156 missing_dir=`cd $ac_aux_dir && pwd`
157 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
158 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
160 dnl Checks for system services.
162 dnl Check the size of various builtin types; see typesize.h (error)
163 AC_CHECK_SIZEOF(char, 0)
164 AC_CHECK_SIZEOF(short, 0)
165 AC_CHECK_SIZEOF(int, 0)
166 AC_CHECK_SIZEOF(long, 0)
167 dnl AC_CHECK_SIZEOF(long long, 0)
169 dnl Checks for libraries.
171 dnl We want to test for the following in libc before checking for their
172 dnl respective libraries, because some systems (like Irix) have both, and the
173 dnl non-libc versions may be broken.
174 AC_CHECK_FUNCS(crypt gethostbyname connect)
176 if test "$ac_cv_func_gethostbyname" = no; then
177 AC_CHECK_LIB(nsl, gethostbyname)
180 if test "$ac_cv_func_connect" = no; then
181 AC_CHECK_LIB(socket, connect)
184 dnl Check for Solaris realtime support
185 AC_CHECK_LIB(rt, sched_yield)
187 dnl Determine the system's authentication capabilities, if autologin is
188 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
189 dnl (Linux shadow passwords)
190 if test "$enable_autologin" != no; then
191 if test "$with_pam" = yes; then
193 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
195 AC_CHECK_FUNCS(pam_start)
196 test "$enable_chkpwd" != no && LIBS=$save_LIBS
198 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
200 AC_SEARCH_LIBS(getspnam, shadow, [
201 if test "$ac_cv_search_getspnam" = -lshadow; then
202 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
204 test "$enable_chkpwd" != no && LIBS=$save_LIBS
205 if test "$ac_cv_func_crypt" = no; then
206 AC_CHECK_LIB(crypt, crypt, [
207 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
208 test "$enable_chkpwd" = no && \
209 LIBS="-lcrypt $LIBS"])
212 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
213 AC_DEFINE(ENABLE_AUTOLOGIN)
214 if test "$enable_chkpwd" != no; then
215 AC_DEFINE(ENABLE_CHKPWD)
223 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
224 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
226 if test "x$with_ncurses" != "xno"; then
227 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
228 AC_SEARCH_LIBS(scrollok, [ncurses curses])
229 AC_SEARCH_LIBS(initscr, [ncurses curses])
231 AC_SEARCH_LIBS(tgetent, [curses termcap])
232 AC_SEARCH_LIBS(initscr, [curses])
234 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
236 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
237 dnl which the -pthread flag takes care of this.)
238 if test "$check_pthread" != no; then
239 AC_CHECK_LIB(pthread, pthread_create)
240 AC_CHECK_LIB(pthreads, pthread_create)
243 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
245 # The big search for OpenSSL
246 if test "$with_ssl" != "no"; then
248 saved_LDFLAGS="$LDFLAGS"
249 saved_CFLAGS="$CFLAGS"
250 if test "x$prefix" != "xNONE"; then
251 tryssldir="$tryssldir $prefix"
253 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
254 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
255 CFLAGS="$saved_CFLAGS"
256 LDFLAGS="$saved_LDFLAGS"
257 LIBS="$saved_LIBS -lssl -lcrypto"
259 # Skip directories if they don't exist
260 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
263 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
264 # Try to use $ssldir/lib if it exists, otherwise
266 if test -d "$ssldir/lib" ; then
267 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
268 if test ! -z "$need_dash_r" ; then
269 LDFLAGS="-R$ssldir/lib $LDFLAGS"
272 LDFLAGS="-L$ssldir $saved_LDFLAGS"
273 if test ! -z "$need_dash_r" ; then
274 LDFLAGS="-R$ssldir $LDFLAGS"
277 # Try to use $ssldir/include if it exists, otherwise
279 if test -d "$ssldir/include" ; then
280 CFLAGS="-I$ssldir/include $saved_CFLAGS"
282 CFLAGS="-I$ssldir $saved_CFLAGS"
286 # Basic test to check for compatible version and correct linking
287 # *does not* test for RSA - that comes later.
291 #include <openssl/rand.h>
295 memset(a, 0, sizeof(a));
296 RAND_add(a, sizeof(a), sizeof(a));
297 return(RAND_status() <= 0);
306 if test ! -z "$found_crypto" ; then
311 if test -z "$ssldir" ; then
315 if test ! -z "$found_crypto" ; then
316 ac_cv_openssldir=$ssldir
318 ac_cv_openssldir="no"
322 LDFLAGS="$saved_LDFLAGS"
323 CFLAGS="$saved_CFLAGS"
325 if test "x$ac_cv_openssldir" != "xno" ; then
326 AC_DEFINE(HAVE_OPENSSL)
327 LIBS="-lssl -lcrypto $LIBS"
328 dnl Need to recover ssldir - test above runs in subshell
329 ssldir=$ac_cv_openssldir
330 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
331 # Try to use $ssldir/lib if it exists, otherwise
333 if test -d "$ssldir/lib" ; then
334 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
335 if test ! -z "$need_dash_r" ; then
336 LDFLAGS="-R$ssldir/lib $LDFLAGS"
339 LDFLAGS="-L$ssldir $saved_LDFLAGS"
340 if test ! -z "$need_dash_r" ; then
341 LDFLAGS="-R$ssldir $LDFLAGS"
344 # Try to use $ssldir/include if it exists, otherwise
346 if test -d "$ssldir/include" ; then
347 CFLAGS="-I$ssldir/include $saved_CFLAGS"
349 CFLAGS="-I$ssldir $saved_CFLAGS"
355 if test "x$with_db" != xno; then
356 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
360 if test -d "$db_dir/include/db4"; then
361 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
363 elif test "$db_dir"; then
364 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
365 elif test -d /usr/include/db4; then
366 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
371 AC_CHECK_DB([db db-4.1 db-4 db4],
373 DATABASE=database_sleepycat.c
375 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
376 library. Use --with-db=PATH to specify
382 dnl Checks for the zlib compression library.
383 if test "x$with_zlib" != xno ; then
384 AC_CHECK_HEADERS(zlib.h,
385 [AC_CHECK_LIB(z, zlibVersion,
390 if test "x$ok_zlib" = xyes ; then
391 SERVER_LIBS="-lz $SERVER_LIBS"
398 dnl Checks for the OpenLDAP client library.
399 if test "x$with_ldap" != xno ; then
400 AC_CHECK_HEADERS(ldap.h,
401 [AC_CHECK_LIB(ldap, ldap_init,
406 if test "x$ok_ldap" = xyes ; then
407 SERVER_LIBS="-lldap $SERVER_LIBS"
414 dnl Checks for the newt window library.
415 if test "x$with_newt" != xno ; then
416 AC_CHECK_HEADERS(newt.h,
417 [AC_CHECK_LIB(newt, newtInit,
422 if test "x$ok_newt" = xyes ; then
423 SETUP_LIBS="-lnewt $SETUP_LIBS"
432 dnl Checks for the libical calendaring library.
433 if test "x$with_libical" != xno ; then
434 AC_CHECK_HEADERS(ical.h,
435 [AC_CHECK_LIB(ical, icalcomponent_new,
440 if test "x$ok_libical" = xyes ; then
447 sscanf(ICAL_VERSION, "%d.%d", &major, &minor);
448 v = 100*major + minor;
449 printf("libical version: %i\n", v);
451 printf("This version is ok.\n");
454 printf("libical 0.24 or newer required.\n");
455 printf("Citadel will be built without calendar support.\n");
460 SERVER_LIBS="-lical $SERVER_LIBS"
461 AC_DEFINE(HAVE_LIBICAL)
469 dnl Checks for header files.
475 dnl TODO: for the DB header checks, we should check whether the headers
476 dnl define db_env_create, somehow
478 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)
481 dnl need to check if this is actually compilable, sometimes there are
482 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
484 if test "x$with_ncurses" != xno; then
485 AC_CHECK_HEADERS(ncurses.h,,,[ ])
488 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
489 [#ifdef HAVE_SYS_TYPES_H
490 #include <sys/types.h>
492 #ifdef HAVE_NETINET_IN_H
493 #include <netinet/in.h>
495 #ifdef HAVE_ARPA_NAMESER_H
496 #include <arpa/nameser.h>
500 dnl Checks for typedefs, structures, and compiler characteristics.
506 dnl defined in acinclude.m4:
509 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
510 [AC_TRY_COMPILE([#include <sys/types.h>
511 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
512 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
513 if test $ac_cv_struct_ut_type = yes; then
514 AC_DEFINE(HAVE_UT_TYPE)
517 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
518 [AC_TRY_COMPILE([#include <sys/types.h>
519 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
520 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
521 if test $ac_cv_struct_ut_host = yes; then
522 AC_DEFINE(HAVE_UT_HOST)
525 dnl Checks for library functions.
527 AC_PROG_GCC_TRADITIONAL
530 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
532 dnl Now check for pthreads
534 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
535 dnl we need to include pthread.h
537 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
538 [AC_TRY_LINK([#include <pthread.h>],
541 /* The GNU C library defines this for functions which it implements
542 to always fail with ENOSYS. Some functions are actually named
543 something starting with __ and the normal name is an alias. */
544 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
547 pthread_cancel(thread);
549 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
550 if test "$ac_cv_func_pthread_cancel" = yes; then
551 AC_DEFINE(HAVE_PTHREAD_CANCEL)
554 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
555 [AC_TRY_LINK([#include <pthread.h>],
556 [ /* The GNU C library defines this for functions which it implements
557 to always fail with ENOSYS. Some functions are actually named
558 something starting with __ and the normal name is an alias. */
559 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
562 pthread_create(NULL, NULL, NULL, NULL);
564 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
565 if test "$ac_cv_func_pthread_create" = yes; then
566 test "$DATABASE" && TARGETS="client server utils"
567 if test "x$enable_threaded_client" != xno; then
568 AC_DEFINE(THREADED_CLIENT)
572 AC_REPLACE_FUNCS(snprintf getutline)
574 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
576 # echo $ECHO_N "opening your window... $ECHO_C" >&6
578 # month=`date | cut -f 2 -d ' '`
581 # ac_cv_weather="it's cold!"
584 # ac_cv_weather="it's wet!"
587 # ac_cv_weather="it's hot!"
590 # ac_cv_weather="it's cool"
592 # May | Jun | Sep | *)
593 # ac_cv_weather="it's fine"
598 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
599 number=`date | cut -c 19`
602 ac_cv_under_the_bed="lunatics and monsters found"
605 ac_cv_under_the_bed="dust bunnies found"
610 dnl Done! Now write the Makefile and sysdep.h
614 AC_SUBST(chkpwd_LIBS)
617 AC_SUBST(SERVER_LDFLAGS)
618 AC_SUBST(SERVER_LIBS)
620 AC_CONFIG_HEADER(sysdep.h)
621 AC_CONFIG_FILES([Makefile])
624 if test -z "$DATABASE"; then
625 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
630 echo "... On many operating systems, you must use GNU make (gmake) to compile"