1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [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
126 *-*-solaris*|alpha*-dec-osf*)
127 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts $PTHREAD_DEFS"
130 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes $PTHREAD_DEFS"
135 if test "x$enable_pie" = xyes; then
136 save_CFLAGS="$CFLAGS"
137 save_LDFLAGS="$LDFLAGS"
138 CFLAGS="$CFLAGS -fpie"
139 LDFLAGS="$LDFLAGS -pie -fpie"
140 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
142 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
143 if test $ac_cv_pie_fpie = no; then
144 CFLAGS="$save_CFLAGS"
145 LDFLAGS="$save_LDFLAGS"
151 missing_dir=`cd $ac_aux_dir && pwd`
152 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
153 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
155 dnl Checks for system services.
157 dnl Check the size of various builtin types; see typesize.h (error)
158 AC_CHECK_SIZEOF(char, 0)
159 AC_CHECK_SIZEOF(short, 0)
160 AC_CHECK_SIZEOF(int, 0)
161 AC_CHECK_SIZEOF(long, 0)
162 dnl AC_CHECK_SIZEOF(long long, 0)
164 dnl Checks for libraries.
166 dnl We want to test for the following in libc before checking for their
167 dnl respective libraries, because some systems (like Irix) have both, and the
168 dnl non-libc versions may be broken.
169 AC_CHECK_FUNCS(crypt gethostbyname connect)
171 if test "$ac_cv_func_gethostbyname" = no; then
172 AC_CHECK_LIB(nsl, gethostbyname)
175 if test "$ac_cv_func_connect" = no; then
176 AC_CHECK_LIB(socket, connect)
179 dnl Check for Solaris realtime support
180 AC_CHECK_LIB(rt, sched_yield)
182 dnl Determine the system's authentication capabilities, if autologin is
183 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
184 dnl (Linux shadow passwords)
185 if test "$enable_autologin" != no; then
186 if test "$with_pam" = yes; then
188 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
190 AC_CHECK_FUNCS(pam_start)
191 test "$enable_chkpwd" != no && LIBS=$save_LIBS
193 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
195 AC_SEARCH_LIBS(getspnam, shadow, [
196 if test "$ac_cv_search_getspnam" = -lshadow; then
197 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
199 test "$enable_chkpwd" != no && LIBS=$save_LIBS
200 if test "$ac_cv_func_crypt" = no; then
201 AC_CHECK_LIB(crypt, crypt, [
202 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
203 test "$enable_chkpwd" = no && \
204 LIBS="-lcrypt $LIBS"])
207 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
208 AC_DEFINE(ENABLE_AUTOLOGIN)
209 if test "$enable_chkpwd" != no; then
210 AC_DEFINE(ENABLE_CHKPWD)
218 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
219 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
221 if test "x$with_ncurses" != "xno"; then
222 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
223 AC_SEARCH_LIBS(scrollok, [ncurses curses])
224 AC_SEARCH_LIBS(initscr, [ncurses curses])
226 AC_SEARCH_LIBS(tgetent, [curses termcap])
227 AC_SEARCH_LIBS(initscr, [curses])
229 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
231 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
232 dnl which the -pthread flag takes care of this.)
233 if test "$check_pthread" != no; then
234 AC_CHECK_LIB(pthread, pthread_create)
235 AC_CHECK_LIB(pthreads, pthread_create)
238 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
240 # The big search for OpenSSL
241 if test "$with_ssl" != "no"; then
243 saved_LDFLAGS="$LDFLAGS"
244 saved_CFLAGS="$CFLAGS"
245 if test "x$prefix" != "xNONE"; then
246 tryssldir="$tryssldir $prefix"
248 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
249 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
250 CFLAGS="$saved_CFLAGS"
251 LDFLAGS="$saved_LDFLAGS"
252 LIBS="$saved_LIBS -lssl -lcrypto"
254 # Skip directories if they don't exist
255 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
258 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
259 # Try to use $ssldir/lib if it exists, otherwise
261 if test -d "$ssldir/lib" ; then
262 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
263 if test ! -z "$need_dash_r" ; then
264 LDFLAGS="-R$ssldir/lib $LDFLAGS"
267 LDFLAGS="-L$ssldir $saved_LDFLAGS"
268 if test ! -z "$need_dash_r" ; then
269 LDFLAGS="-R$ssldir $LDFLAGS"
272 # Try to use $ssldir/include if it exists, otherwise
274 if test -d "$ssldir/include" ; then
275 CFLAGS="-I$ssldir/include $saved_CFLAGS"
277 CFLAGS="-I$ssldir $saved_CFLAGS"
281 # Basic test to check for compatible version and correct linking
282 # *does not* test for RSA - that comes later.
286 #include <openssl/rand.h>
290 memset(a, 0, sizeof(a));
291 RAND_add(a, sizeof(a), sizeof(a));
292 return(RAND_status() <= 0);
301 if test ! -z "$found_crypto" ; then
306 if test -z "$ssldir" ; then
310 if test ! -z "$found_crypto" ; then
311 ac_cv_openssldir=$ssldir
313 ac_cv_openssldir="no"
317 LDFLAGS="$saved_LDFLAGS"
318 CFLAGS="$saved_CFLAGS"
320 if test "x$ac_cv_openssldir" != "xno" ; then
321 AC_DEFINE(HAVE_OPENSSL)
322 LIBS="-lssl -lcrypto $LIBS"
323 dnl Need to recover ssldir - test above runs in subshell
324 ssldir=$ac_cv_openssldir
325 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
326 # Try to use $ssldir/lib if it exists, otherwise
328 if test -d "$ssldir/lib" ; then
329 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
330 if test ! -z "$need_dash_r" ; then
331 LDFLAGS="-R$ssldir/lib $LDFLAGS"
334 LDFLAGS="-L$ssldir $saved_LDFLAGS"
335 if test ! -z "$need_dash_r" ; then
336 LDFLAGS="-R$ssldir $LDFLAGS"
339 # Try to use $ssldir/include if it exists, otherwise
341 if test -d "$ssldir/include" ; then
342 CFLAGS="-I$ssldir/include $saved_CFLAGS"
344 CFLAGS="-I$ssldir $saved_CFLAGS"
350 if test "x$with_db" != xno; then
351 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
355 if test -d "$db_dir/include/db4"; then
356 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
358 elif test "$db_dir"; then
359 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
360 elif test -d /usr/include/db4; then
361 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
366 AC_CHECK_DB([db db-4.1 db-4 db4],
368 DATABASE=database_sleepycat.c
370 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
371 library. Use --with-db=PATH to specify
377 dnl Checks for the zlib compression library.
378 if test "x$with_zlib" != xno ; then
379 AC_CHECK_HEADERS(zlib.h,
380 [AC_CHECK_LIB(z, zlibVersion,
385 if test "x$ok_zlib" = xyes ; then
386 SERVER_LIBS="-lz $SERVER_LIBS"
393 dnl Checks for the OpenLDAP client library.
394 if test "x$with_ldap" != xno ; then
395 AC_CHECK_HEADERS(ldap.h,
396 [AC_CHECK_LIB(ldap, ldap_init,
401 if test "x$ok_ldap" = xyes ; then
402 SERVER_LIBS="-lldap $SERVER_LIBS"
409 dnl Checks for the newt window library.
410 if test "x$with_newt" != xno ; then
411 AC_CHECK_HEADERS(newt.h,
412 [AC_CHECK_LIB(newt, newtInit,
417 if test "x$ok_newt" = xyes ; then
418 SETUP_LIBS="-lnewt $SETUP_LIBS"
427 dnl Checks for the libical calendaring library.
428 if test "x$with_libical" != xno ; then
429 AC_CHECK_HEADERS(ical.h,
430 [AC_CHECK_LIB(ical, icalcomponent_new,
435 if test "x$ok_libical" = xyes ; then
443 sscanf(ICAL_VERSION, "%f", &v);
444 printf("libical version: %0.2f\n", v);
448 printf("This version is ok.\n");
451 printf("libical 0.24 or newer required.\n");
452 printf("Citadel will be built without calendar support.\n");
457 SERVER_LIBS="-lical $SERVER_LIBS"
458 AC_DEFINE(HAVE_LIBICAL)
466 dnl Checks for header files.
472 dnl TODO: for the DB header checks, we should check whether the headers
473 dnl define db_env_create, somehow
475 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)
478 dnl need to check if this is actually compilable, sometimes there are
479 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
481 if test "x$with_ncurses" != xno; then
482 AC_CHECK_HEADERS(ncurses.h,,,[ ])
485 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
486 [#ifdef HAVE_SYS_TYPES_H
487 #include <sys/types.h>
489 #ifdef HAVE_NETINET_IN_H
490 #include <netinet/in.h>
492 #ifdef HAVE_ARPA_NAMESER_H
493 #include <arpa/nameser.h>
497 dnl Checks for typedefs, structures, and compiler characteristics.
503 dnl defined in acinclude.m4:
506 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
507 [AC_TRY_COMPILE([#include <sys/types.h>
508 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
509 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
510 if test $ac_cv_struct_ut_type = yes; then
511 AC_DEFINE(HAVE_UT_TYPE)
514 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
515 [AC_TRY_COMPILE([#include <sys/types.h>
516 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
517 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
518 if test $ac_cv_struct_ut_host = yes; then
519 AC_DEFINE(HAVE_UT_HOST)
522 dnl Checks for library functions.
524 AC_PROG_GCC_TRADITIONAL
527 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
529 dnl Now check for pthreads
531 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
532 dnl we need to include pthread.h
534 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
535 [AC_TRY_LINK([#include <pthread.h>],
538 /* The GNU C library defines this for functions which it implements
539 to always fail with ENOSYS. Some functions are actually named
540 something starting with __ and the normal name is an alias. */
541 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
544 pthread_cancel(thread);
546 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
547 if test "$ac_cv_func_pthread_cancel" = yes; then
548 AC_DEFINE(HAVE_PTHREAD_CANCEL)
551 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
552 [AC_TRY_LINK([#include <pthread.h>],
553 [ /* The GNU C library defines this for functions which it implements
554 to always fail with ENOSYS. Some functions are actually named
555 something starting with __ and the normal name is an alias. */
556 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
559 pthread_create(NULL, NULL, NULL, NULL);
561 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
562 if test "$ac_cv_func_pthread_create" = yes; then
563 test "$DATABASE" && TARGETS="client server utils"
564 if test "x$enable_threaded_client" != xno; then
565 AC_DEFINE(THREADED_CLIENT)
569 AC_REPLACE_FUNCS(snprintf getutline)
571 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
573 # echo $ECHO_N "opening your window... $ECHO_C" >&6
575 # month=`date | cut -f 2 -d ' '`
578 # ac_cv_weather="it's cold!"
581 # ac_cv_weather="it's wet!"
584 # ac_cv_weather="it's hot!"
587 # ac_cv_weather="it's cool"
589 # May | Jun | Sep | *)
590 # ac_cv_weather="it's fine"
595 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
596 number=`date | cut -c 19`
599 ac_cv_under_the_bed="lunatics and monsters found"
602 ac_cv_under_the_bed="dust bunnies found"
607 dnl Done! Now write the Makefile and sysdep.h
611 AC_SUBST(chkpwd_LIBS)
614 AC_SUBST(SERVER_LDFLAGS)
615 AC_SUBST(SERVER_LIBS)
617 AC_CONFIG_HEADER(sysdep.h)
618 AC_CONFIG_FILES([Makefile])
621 if test -z "$DATABASE"; then
622 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
627 echo "... On many operating systems, you must use GNU make (gmake) to compile"