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(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
24 [ --with-ssl=PATH Specify path to OpenSSL installation ],
26 if test "x$withval" != "xno" ; then
31 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
33 AC_ARG_WITH(with_zlib, [ --with-zlib use zlib compression if present])
34 AC_ARG_WITH(with_libical, [ --with-libical use libical calendaring library])
36 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
40 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
41 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
44 test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
47 dnl By default, we only build the client (citadel and whobbs) unless we can
48 dnl figure out how to build with POSIX threads.
52 PTHREAD_DEFS=-D_REENTRANT
54 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
55 dnl for dlopen(), and has a wrapper script to link with shared libs.
56 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
58 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
59 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
62 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
64 dnl Curses support on Mac OS X is kind of screwed at the moment.
66 AC_DEFINE(DISABLE_CURSES)
68 dnl Digital Unix has an odd way to build for pthreads, and we can't
69 dnl build pthreads programs with gcc due to header problems.
71 test -z "$CC" && CC=cc
72 LIBS="-lpthread -lexc $LIBS"
75 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
77 if test "$with_kthread" = yes; then
83 PTHREAD_DEFS=-D_THREAD_SAFE
91 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
94 SERVER_LDFLAGS="-Wl,-subsystem,windows"
97 DEFS="$DEFS $PTHREAD_DEFS"
99 dnl Checks for programs.
102 dnl Set up system-dependent compiler flags.
103 if test "$GCC" = yes; then
105 *-*-solaris*|alpha*-dec-osf*)
106 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
109 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
116 missing_dir=`cd $ac_aux_dir && pwd`
117 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
118 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
120 dnl Checks for system services.
122 dnl Check the size of various builtin types; see typesize.h (error)
123 AC_CHECK_SIZEOF(char, 0)
124 AC_CHECK_SIZEOF(short, 0)
125 AC_CHECK_SIZEOF(int, 0)
126 AC_CHECK_SIZEOF(long, 0)
127 dnl AC_CHECK_SIZEOF(long long, 0)
129 dnl Checks for libraries.
131 dnl We want to test for the following in libc before checking for their
132 dnl respective libraries, because some systems (like Irix) have both, and the
133 dnl non-libc versions may be broken.
134 AC_CHECK_FUNCS(crypt gethostbyname connect)
136 if test "$ac_cv_func_gethostbyname" = no; then
137 AC_CHECK_LIB(nsl, gethostbyname)
140 if test "$ac_cv_func_connect" = no; then
141 AC_CHECK_LIB(socket, connect)
144 dnl Check for Solaris realtime support
145 AC_CHECK_LIB(rt, sched_yield)
147 dnl Determine the system's authentication capabilities, if autologin is
148 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
149 dnl (Linux shadow passwords)
150 if test "$enable_autologin" != no; then
151 if test "$with_pam" = yes; then
153 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
155 AC_CHECK_FUNCS(pam_start)
156 test "$enable_chkpwd" != no && LIBS=$save_LIBS
158 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
160 AC_SEARCH_LIBS(getspnam, shadow, [
161 if test "$ac_cv_search_getspnam" = -lshadow; then
162 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
164 test "$enable_chkpwd" != no && LIBS=$save_LIBS
165 if test "$ac_cv_func_crypt" = no; then
166 AC_CHECK_LIB(crypt, crypt, [
167 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
168 test "$enable_chkpwd" = no && \
169 LIBS="-lcrypt $LIBS"])
172 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
173 AC_DEFINE(ENABLE_AUTOLOGIN)
174 if test "$enable_chkpwd" != no; then
175 AC_DEFINE(ENABLE_CHKPWD)
183 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
184 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
186 if test "x$with_ncurses" != "xno"; then
187 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
188 AC_SEARCH_LIBS(scrollok, [ncurses curses])
189 AC_SEARCH_LIBS(initscr, [ncurses curses])
191 AC_SEARCH_LIBS(tgetent, [curses termcap])
192 AC_SEARCH_LIBS(initscr, [curses])
194 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
196 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
197 dnl which the -pthread flag takes care of this.)
198 if test "$check_pthread" != no; then
199 AC_CHECK_LIB(pthread, pthread_create)
200 AC_CHECK_LIB(pthreads, pthread_create)
203 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
205 # The big search for OpenSSL
206 if test "$with_ssl" != "no"; then
208 saved_LDFLAGS="$LDFLAGS"
209 saved_CFLAGS="$CFLAGS"
210 if test "x$prefix" != "xNONE"; then
211 tryssldir="$tryssldir $prefix"
213 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
214 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
215 CFLAGS="$saved_CFLAGS"
216 LDFLAGS="$saved_LDFLAGS"
217 LIBS="$saved_LIBS -lssl -lcrypto"
219 # Skip directories if they don't exist
220 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
223 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
224 # Try to use $ssldir/lib if it exists, otherwise
226 if test -d "$ssldir/lib" ; then
227 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
228 if test ! -z "$need_dash_r" ; then
229 LDFLAGS="-R$ssldir/lib $LDFLAGS"
232 LDFLAGS="-L$ssldir $saved_LDFLAGS"
233 if test ! -z "$need_dash_r" ; then
234 LDFLAGS="-R$ssldir $LDFLAGS"
237 # Try to use $ssldir/include if it exists, otherwise
239 if test -d "$ssldir/include" ; then
240 CFLAGS="-I$ssldir/include $saved_CFLAGS"
242 CFLAGS="-I$ssldir $saved_CFLAGS"
246 # Basic test to check for compatible version and correct linking
247 # *does not* test for RSA - that comes later.
251 #include <openssl/rand.h>
255 memset(a, 0, sizeof(a));
256 RAND_add(a, sizeof(a), sizeof(a));
257 return(RAND_status() <= 0);
266 if test ! -z "$found_crypto" ; then
271 if test -z "$ssldir" ; then
275 if test ! -z "$found_crypto" ; then
276 ac_cv_openssldir=$ssldir
278 ac_cv_openssldir="no"
282 LDFLAGS="$saved_LDFLAGS"
283 CFLAGS="$saved_CFLAGS"
285 if test "x$ac_cv_openssldir" != "xno" ; then
286 AC_DEFINE(HAVE_OPENSSL)
287 LIBS="-lssl -lcrypto $LIBS"
288 dnl Need to recover ssldir - test above runs in subshell
289 ssldir=$ac_cv_openssldir
290 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
291 # Try to use $ssldir/lib if it exists, otherwise
293 if test -d "$ssldir/lib" ; then
294 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
295 if test ! -z "$need_dash_r" ; then
296 LDFLAGS="-R$ssldir/lib $LDFLAGS"
299 LDFLAGS="-L$ssldir $saved_LDFLAGS"
300 if test ! -z "$need_dash_r" ; then
301 LDFLAGS="-R$ssldir $LDFLAGS"
304 # Try to use $ssldir/include if it exists, otherwise
306 if test -d "$ssldir/include" ; then
307 CFLAGS="-I$ssldir/include $saved_CFLAGS"
309 CFLAGS="-I$ssldir $saved_CFLAGS"
315 if test "x$with_db" != xno; then
316 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
320 if test -d "$db_dir/include/db4"; then
321 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
323 elif test "$db_dir"; then
324 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
325 elif test -d /usr/include/db4; then
326 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
331 AC_CHECK_DB([db db-4.1 db-4 db4],
333 DATABASE=database_sleepycat.c
335 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
336 library. Use --with-db=PATH to specify
342 dnl Checks for the zlib compression library.
343 if test "x$with_zlib" != xno ; then
344 AC_CHECK_HEADERS(zlib.h,
345 [AC_CHECK_LIB(z, zlibVersion,
350 if test "x$ok_zlib" = xyes ; then
357 dnl Checks for the libical calendaring library.
358 if test "x$with_libical" != xno ; then
359 AC_CHECK_HEADERS(ical.h,
360 [AC_CHECK_LIB(ical, icalcomponent_new,
365 if test "x$ok_libical" = xyes ; then
373 sscanf(ICAL_VERSION, "%f", &v);
374 printf("libical version: %0.2f\n", v);
378 printf("This version is ok.\n");
381 printf("libical 0.24 or newer required.\n");
382 printf("Citadel will be built without calendar support.\n");
388 AC_DEFINE(HAVE_LIBICAL)
395 dnl Checks for header files.
401 dnl TODO: for the DB header checks, we should check whether the headers
402 dnl define db_env_create, somehow
404 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 db4/db.h pthread.h netinet/in.h arpa/nameser.h)
407 dnl need to check if this is actually compilable, sometimes there are
408 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
410 if test "x$with_ncurses" != xno; then
411 AC_CHECK_HEADERS(ncurses.h,,,[ ])
414 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
415 [#ifdef HAVE_SYS_TYPES_H
416 #include <sys/types.h>
418 #ifdef HAVE_NETINET_IN_H
419 #include <netinet/in.h>
421 #ifdef HAVE_ARPA_NAMESER_H
422 #include <arpa/nameser.h>
426 dnl Checks for typedefs, structures, and compiler characteristics.
432 dnl defined in acinclude.m4:
435 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
436 [AC_TRY_COMPILE([#include <sys/types.h>
437 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
438 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
439 if test $ac_cv_struct_ut_type = yes; then
440 AC_DEFINE(HAVE_UT_TYPE)
443 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
444 [AC_TRY_COMPILE([#include <sys/types.h>
445 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
446 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
447 if test $ac_cv_struct_ut_host = yes; then
448 AC_DEFINE(HAVE_UT_HOST)
451 dnl Checks for library functions.
453 AC_PROG_GCC_TRADITIONAL
456 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
458 dnl Now check for pthreads
460 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
461 dnl we need to include pthread.h
463 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
464 [AC_TRY_LINK([#include <pthread.h>],
467 /* The GNU C library defines this for functions which it implements
468 to always fail with ENOSYS. Some functions are actually named
469 something starting with __ and the normal name is an alias. */
470 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
473 pthread_cancel(thread);
475 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
476 if test "$ac_cv_func_pthread_cancel" = yes; then
477 AC_DEFINE(HAVE_PTHREAD_CANCEL)
480 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
481 [AC_TRY_LINK([#include <pthread.h>],
482 [ /* The GNU C library defines this for functions which it implements
483 to always fail with ENOSYS. Some functions are actually named
484 something starting with __ and the normal name is an alias. */
485 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
488 pthread_create(NULL, NULL, NULL, NULL);
490 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
491 if test "$ac_cv_func_pthread_create" = yes; then
492 test "$DATABASE" && TARGETS="client server utils"
493 if test "x$enable_threaded_client" != xno; then
494 AC_DEFINE(THREADED_CLIENT)
498 AC_REPLACE_FUNCS(snprintf getutline)
500 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
502 # echo $ECHO_N "opening your window... $ECHO_C" >&6
504 # month=`date | cut -f 2 -d ' '`
507 # ac_cv_weather="it's cold!"
510 # ac_cv_weather="it's wet!"
513 # ac_cv_weather="it's hot!"
516 # ac_cv_weather="it's cool"
518 # May | Jun | Sep | *)
519 # ac_cv_weather="it's fine"
524 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
525 number=`date | cut -c 19`
528 ac_cv_under_the_bed="lunatics and monsters found"
531 ac_cv_under_the_bed="dust bunnies found"
536 dnl Done! Now write the Makefile and sysdep.h
540 AC_SUBST(chkpwd_LIBS)
543 AC_SUBST(SERVER_LDFLAGS)
544 AC_CONFIG_HEADER(sysdep.h)
545 AC_CONFIG_FILES([Makefile weekly])
548 if test -z "$DATABASE"; then
549 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
554 echo "... On many operating systems, you must use GNU make (gmake) to compile"