1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [5.91], [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(gdbm, [ --with-gdbm@<:@=DIR@:>@ use GDBM @<:@DIR=/usr/local@:>@])
23 AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
25 [ --with-ssl=PATH Specify path to OpenSSL installation ],
27 if test "x$withval" != "xno" ; then
32 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
34 if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
39 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
43 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
44 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
45 -o -f /usr/local/lib/libdb3.a -o -f /usr/local/lib/libdb3.so && db_dir=/usr/local
47 test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
48 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
49 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
50 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
53 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
54 AC_MSG_ERROR(can't enable both gdbm and db)
57 dnl By default, we only build the client (citadel and whobbs) unless we can
58 dnl figure out how to build with POSIX threads.
62 PTHREAD_DEFS=-D_REENTRANT
64 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
65 dnl for dlopen(), and has a wrapper script to link with shared libs.
66 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
68 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
69 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
72 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
74 dnl Digital Unix has an odd way to build for pthreads, and we can't
75 dnl build pthreads programs with gcc due to header problems.
77 test -z "$CC" && CC=cc
78 LIBS="-lpthread -lexc $LIBS"
81 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
83 if test "$with_kthread" = yes; then
89 PTHREAD_DEFS=-D_THREAD_SAFE
97 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
100 DEFS="$DEFS $PTHREAD_DEFS"
102 dnl Checks for programs.
105 dnl Set up system-dependent compiler flags.
106 if test "$GCC" = yes; then
108 *-*-solaris*|alpha*-dec-osf*)
109 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
112 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
120 AC_SUBST(LIBTOOL_DEPS)
123 missing_dir=`cd $ac_aux_dir && pwd`
124 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
125 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
127 dnl Checks for system services.
129 dnl Check the size of various builtin types; see typesize.h (error)
130 AC_CHECK_SIZEOF(char, 0)
131 AC_CHECK_SIZEOF(short, 0)
132 AC_CHECK_SIZEOF(int, 0)
133 AC_CHECK_SIZEOF(long, 0)
134 dnl AC_CHECK_SIZEOF(long long, 0)
136 dnl Checks for libraries.
138 dnl We want to test for the following in libc before checking for their
139 dnl respective libraries, because some systems (like Irix) have both, and the
140 dnl non-libc versions may be broken.
141 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
143 if test "$ac_cv_func_gethostbyname" = no; then
144 AC_CHECK_LIB(nsl, gethostbyname)
147 if test "$ac_cv_func_connect" = no; then
148 AC_CHECK_LIB(socket, connect)
151 if test "$ac_cv_func_dlopen" = no; then
152 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
153 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
156 dnl Check for HP/UX dynamic loader. This should only be in -ldld.
157 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
159 dnl Check for Solaris realtime support
160 AC_CHECK_LIB(rt, sched_yield)
162 dnl Determine the system's authentication capabilities, if autologin is
163 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
164 dnl (Linux shadow passwords)
165 if test "$enable_autologin" != no; then
166 if test "$with_pam" = yes; then
168 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
170 AC_CHECK_FUNCS(pam_start)
171 test "$enable_chkpwd" != no && LIBS=$save_LIBS
173 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
175 AC_SEARCH_LIBS(getspnam, shadow, [
176 if test "$ac_cv_search_getspnam" = -lshadow; then
177 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
179 test "$enable_chkpwd" != no && LIBS=$save_LIBS
180 if test "$ac_cv_func_crypt" = no; then
181 AC_CHECK_LIB(crypt, crypt, [
182 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
183 test "$enable_chkpwd" = no && \
184 LIBS="-lcrypt $LIBS"])
187 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
188 AC_DEFINE(ENABLE_AUTOLOGIN)
189 if test "$enable_chkpwd" != no; then
190 AC_DEFINE(ENABLE_CHKPWD)
198 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
199 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
201 if test "x$with_ncurses" != xno; then
202 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
203 AC_SEARCH_LIBS(initscr, [ncurses curses])
205 AC_SEARCH_LIBS(tgetent, [curses termcap])
206 AC_SEARCH_LIBS(initscr, [curses])
208 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
210 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
211 dnl which the -pthread flag takes care of this.)
212 if test "$check_pthread" != no; then
213 AC_CHECK_LIB(pthread, pthread_create)
214 AC_CHECK_LIB(pthreads, pthread_create)
217 # The big search for OpenSSL
218 if test "$with_ssl" != "no"; then
220 saved_LDFLAGS="$LDFLAGS"
221 saved_CFLAGS="$CFLAGS"
222 if test "x$prefix" != "xNONE"; then
223 tryssldir="$tryssldir $prefix"
225 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
226 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
227 CFLAGS="$saved_CFLAGS"
228 LDFLAGS="$saved_LDFLAGS"
229 LIBS="$saved_LIBS -lssl -lcrypto"
231 # Skip directories if they don't exist
232 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
235 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
236 # Try to use $ssldir/lib if it exists, otherwise
238 if test -d "$ssldir/lib" ; then
239 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
240 if test ! -z "$need_dash_r" ; then
241 LDFLAGS="-R$ssldir/lib $LDFLAGS"
244 LDFLAGS="-L$ssldir $saved_LDFLAGS"
245 if test ! -z "$need_dash_r" ; then
246 LDFLAGS="-R$ssldir $LDFLAGS"
249 # Try to use $ssldir/include if it exists, otherwise
251 if test -d "$ssldir/include" ; then
252 CFLAGS="-I$ssldir/include $saved_CFLAGS"
254 CFLAGS="-I$ssldir $saved_CFLAGS"
258 # Basic test to check for compatible version and correct linking
259 # *does not* test for RSA - that comes later.
263 #include <openssl/rand.h>
267 memset(a, 0, sizeof(a));
268 RAND_add(a, sizeof(a), sizeof(a));
269 return(RAND_status() <= 0);
278 if test ! -z "$found_crypto" ; then
283 if test -z "$ssldir" ; then
287 if test ! -z "$found_crypto" ; then
288 ac_cv_openssldir=$ssldir
290 ac_cv_openssldir="no"
294 LDFLAGS="$saved_LDFLAGS"
295 CFLAGS="$saved_CFLAGS"
297 if test "x$ac_cv_openssldir" != "xno" ; then
298 AC_DEFINE(HAVE_OPENSSL)
299 LIBS="-lssl -lcrypto $LIBS"
300 dnl Need to recover ssldir - test above runs in subshell
301 ssldir=$ac_cv_openssldir
302 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
303 # Try to use $ssldir/lib if it exists, otherwise
305 if test -d "$ssldir/lib" ; then
306 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
307 if test ! -z "$need_dash_r" ; then
308 LDFLAGS="-R$ssldir/lib $LDFLAGS"
311 LDFLAGS="-L$ssldir $saved_LDFLAGS"
312 if test ! -z "$need_dash_r" ; then
313 LDFLAGS="-R$ssldir $LDFLAGS"
316 # Try to use $ssldir/include if it exists, otherwise
318 if test -d "$ssldir/include" ; then
319 CFLAGS="-I$ssldir/include $saved_CFLAGS"
321 CFLAGS="-I$ssldir $saved_CFLAGS"
327 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
328 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
332 if test -d "$db_dir/include/db4"; then
333 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
335 elif test -d "$db_dir/include/db3"; then
336 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
338 elif test "$db_dir"; then
339 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
340 elif test -d /usr/include/db4; then
341 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
343 elif test -d /usr/include/db3; then
344 CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
348 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
349 DATABASE=database_sleepycat.c
355 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
356 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
357 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
359 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
361 AC_CHECK_LIB(gdbm, gdbm_open,
367 dnl Checks for header files.
373 dnl TODO: for the DB header checks, we should check whether the headers
374 dnl define db_env_create, somehow
376 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db3/db.h db4/db.h pthread.h netinet/in.h)
379 dnl need to check if this is actually compilable, sometimes there are
380 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
382 if test "x$with_ncurses" != xno; then
383 AC_CHECK_HEADERS(ncurses.h,,,[ ])
386 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
387 [#ifdef HAVE_SYS_TYPES_H
388 #include <sys/types.h>
390 #ifdef HAVE_NETINET_IN_H
391 #include <netinet/in.h>
397 dnl Checks for typedefs, structures, and compiler characteristics.
403 dnl defined in acinclude.m4:
406 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
407 [AC_TRY_COMPILE([#include <sys/types.h>
408 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
409 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
410 if test $ac_cv_struct_ut_type = yes; then
411 AC_DEFINE(HAVE_UT_TYPE)
414 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
415 [AC_TRY_COMPILE([#include <sys/types.h>
416 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
417 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
418 if test $ac_cv_struct_ut_host = yes; then
419 AC_DEFINE(HAVE_UT_HOST)
422 dnl Checks for library functions.
424 AC_PROG_GCC_TRADITIONAL
427 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
429 dnl Now check for pthreads
431 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
432 dnl we need to include pthread.h
434 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
435 [AC_TRY_LINK([#include <pthread.h>],
438 /* The GNU C library defines this for functions which it implements
439 to always fail with ENOSYS. Some functions are actually named
440 something starting with __ and the normal name is an alias. */
441 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
444 pthread_cancel(thread);
446 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
447 if test "$ac_cv_func_pthread_cancel" = yes; then
448 AC_DEFINE(HAVE_PTHREAD_CANCEL)
451 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
452 [AC_TRY_LINK([#include <pthread.h>],
453 [ /* The GNU C library defines this for functions which it implements
454 to always fail with ENOSYS. Some functions are actually named
455 something starting with __ and the normal name is an alias. */
456 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
459 pthread_create(NULL, NULL, NULL, NULL);
461 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
462 if test "$ac_cv_func_pthread_create" = yes; then
463 test "$DATABASE" && TARGETS="client server utils serv_modules"
464 if test "x$enable_threaded_client" != xno; then
465 AC_DEFINE(THREADED_CLIENT)
469 AC_REPLACE_FUNCS(snprintf getutline)
471 dnl Done! Now write the Makefile and sysdep.h
475 AC_SUBST(chkpwd_LIBS)
478 AC_CONFIG_HEADER(sysdep.h)
479 AC_CONFIG_FILES([Makefile weekly])
482 if test -z "$DATABASE"; then
483 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
488 echo "... On many operating systems, you must use GNU make (gmake) to compile"