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
448 sscanf(ICAL_VERSION, "%f", &v);
449 printf("libical version: %0.2f\n", v);
453 printf("This version is ok.\n");
456 printf("libical 0.24 or newer required.\n");
457 printf("Citadel will be built without calendar support.\n");
462 SERVER_LIBS="-lical $SERVER_LIBS"
463 AC_DEFINE(HAVE_LIBICAL)
471 dnl Checks for header files.
477 dnl TODO: for the DB header checks, we should check whether the headers
478 dnl define db_env_create, somehow
480 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)
483 dnl need to check if this is actually compilable, sometimes there are
484 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
486 if test "x$with_ncurses" != xno; then
487 AC_CHECK_HEADERS(ncurses.h,,,[ ])
490 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
491 [#ifdef HAVE_SYS_TYPES_H
492 #include <sys/types.h>
494 #ifdef HAVE_NETINET_IN_H
495 #include <netinet/in.h>
497 #ifdef HAVE_ARPA_NAMESER_H
498 #include <arpa/nameser.h>
502 dnl Checks for typedefs, structures, and compiler characteristics.
508 dnl defined in acinclude.m4:
511 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
512 [AC_TRY_COMPILE([#include <sys/types.h>
513 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
514 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
515 if test $ac_cv_struct_ut_type = yes; then
516 AC_DEFINE(HAVE_UT_TYPE)
519 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
520 [AC_TRY_COMPILE([#include <sys/types.h>
521 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
522 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
523 if test $ac_cv_struct_ut_host = yes; then
524 AC_DEFINE(HAVE_UT_HOST)
527 dnl Checks for library functions.
529 AC_PROG_GCC_TRADITIONAL
532 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
534 dnl Now check for pthreads
536 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
537 dnl we need to include pthread.h
539 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
540 [AC_TRY_LINK([#include <pthread.h>],
543 /* The GNU C library defines this for functions which it implements
544 to always fail with ENOSYS. Some functions are actually named
545 something starting with __ and the normal name is an alias. */
546 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
549 pthread_cancel(thread);
551 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
552 if test "$ac_cv_func_pthread_cancel" = yes; then
553 AC_DEFINE(HAVE_PTHREAD_CANCEL)
556 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
557 [AC_TRY_LINK([#include <pthread.h>],
558 [ /* The GNU C library defines this for functions which it implements
559 to always fail with ENOSYS. Some functions are actually named
560 something starting with __ and the normal name is an alias. */
561 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
564 pthread_create(NULL, NULL, NULL, NULL);
566 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
567 if test "$ac_cv_func_pthread_create" = yes; then
568 test "$DATABASE" && TARGETS="client server utils"
569 if test "x$enable_threaded_client" != xno; then
570 AC_DEFINE(THREADED_CLIENT)
574 AC_REPLACE_FUNCS(snprintf getutline)
576 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
578 # echo $ECHO_N "opening your window... $ECHO_C" >&6
580 # month=`date | cut -f 2 -d ' '`
583 # ac_cv_weather="it's cold!"
586 # ac_cv_weather="it's wet!"
589 # ac_cv_weather="it's hot!"
592 # ac_cv_weather="it's cool"
594 # May | Jun | Sep | *)
595 # ac_cv_weather="it's fine"
600 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
601 number=`date | cut -c 19`
604 ac_cv_under_the_bed="lunatics and monsters found"
607 ac_cv_under_the_bed="dust bunnies found"
612 dnl Done! Now write the Makefile and sysdep.h
616 AC_SUBST(chkpwd_LIBS)
619 AC_SUBST(SERVER_LDFLAGS)
620 AC_SUBST(SERVER_LIBS)
622 AC_CONFIG_HEADER(sysdep.h)
623 AC_CONFIG_FILES([Makefile])
626 if test -z "$DATABASE"; then
627 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
632 echo "... On many operating systems, you must use GNU make (gmake) to compile"