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
33 if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
38 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
42 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
43 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
44 -o -f /usr/local/lib/libdb3.a -o -f /usr/local/lib/libdb3.so && db_dir=/usr/local
46 test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
47 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
48 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
49 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
52 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
53 AC_MSG_ERROR(can't enable both gdbm and db)
56 dnl By default, we only build the client (citadel and whobbs) unless we can
57 dnl figure out how to build with POSIX threads.
61 PTHREAD_DEFS=-D_REENTRANT
63 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
64 dnl for dlopen(), and has a wrapper script to link with shared libs.
65 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
67 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
68 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
71 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
73 dnl Digital Unix has an odd way to build for pthreads, and we can't
74 dnl build pthreads programs with gcc due to header problems.
76 test -z "$CC" && CC=cc
77 LIBS="-lpthread -lexc $LIBS"
80 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
82 if test "$with_kthread" = yes; then
88 PTHREAD_DEFS=-D_THREAD_SAFE
96 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
99 DEFS="$DEFS $PTHREAD_DEFS"
101 dnl Checks for programs.
104 dnl Set up system-dependent compiler flags.
105 if test "$GCC" = yes; then
107 *-*-solaris*|alpha*-dec-osf*)
108 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
111 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
119 AC_SUBST(LIBTOOL_DEPS)
122 missing_dir=`cd $ac_aux_dir && pwd`
123 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
124 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
126 dnl Checks for system services.
128 dnl Checks for libraries.
130 dnl We want to test for the following in libc before checking for their
131 dnl respective libraries, because some systems (like Irix) have both, and the
132 dnl non-libc versions may be broken.
133 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
135 if test "$ac_cv_func_gethostbyname" = no; then
136 AC_CHECK_LIB(nsl, gethostbyname)
139 if test "$ac_cv_func_connect" = no; then
140 AC_CHECK_LIB(socket, connect)
143 if test "$ac_cv_func_dlopen" = no; then
144 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
145 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
148 dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
149 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
151 dnl Check for Solaris realtime support
152 AC_CHECK_LIB(rt, sched_yield)
154 dnl Determine the system's authentication capabilities, if autologin is
155 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
156 dnl (Linux shadow passwords)
157 if test "$enable_autologin" != no; then
158 if test "$with_pam" = yes; then
160 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
162 AC_CHECK_FUNCS(pam_start)
163 test "$enable_chkpwd" != no && LIBS=$save_LIBS
165 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
167 AC_SEARCH_LIBS(getspnam, shadow, [
168 if test "$ac_cv_search_getspnam" = -lshadow; then
169 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
171 test "$enable_chkpwd" != no && LIBS=$save_LIBS
172 if test "$ac_cv_func_crypt" = no; then
173 AC_CHECK_LIB(crypt, crypt, [
174 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
175 test "$enable_chkpwd" = no && \
176 LIBS="-lcrypt $LIBS"])
179 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
180 AC_DEFINE(ENABLE_AUTOLOGIN)
181 if test "$enable_chkpwd" != no; then
182 AC_DEFINE(ENABLE_CHKPWD)
190 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
191 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
194 test -d "$db_dir/include/db4" && CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4" && dblib="db4" || \
195 ( test -d "$db_dir/include/db3" && CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3" && dblib="db3" ) || \
196 ( test "$db_dir" -a -d "$db_dir/include" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" ) || \
197 ( test -d /usr/include/db4 && CPPFLAGS="$CPPFLAGS -I/usr/include/db4" && dblib="db4" ) || \
198 ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" && dblib="db3" )
200 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
201 DATABASE=database_sleepycat.c
207 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
208 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
209 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
211 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
213 AC_CHECK_LIB(gdbm, gdbm_open,
219 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
220 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
222 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
223 AC_SEARCH_LIBS(initscr, [ncurses curses])
224 AC_CHECK_FUNCS(vw_printw wcolor_set)
226 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
227 dnl which the -pthread flag takes care of this.)
228 if test "$check_pthread" != no; then
229 AC_CHECK_LIB(pthread, pthread_create)
230 AC_CHECK_LIB(pthreads, pthread_create)
233 # The big search for OpenSSL
234 if test "$with_ssl" != "no"; then
236 saved_LDFLAGS="$LDFLAGS"
237 saved_CFLAGS="$CFLAGS"
238 if test "x$prefix" != "xNONE"; then
239 tryssldir="$tryssldir $prefix"
241 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
242 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
243 CFLAGS="$saved_CFLAGS"
244 LDFLAGS="$saved_LDFLAGS"
245 LIBS="$saved_LIBS -lssl -lcrypto"
247 # Skip directories if they don't exist
248 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
251 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
252 # Try to use $ssldir/lib if it exists, otherwise
254 if test -d "$ssldir/lib" ; then
255 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
256 if test ! -z "$need_dash_r" ; then
257 LDFLAGS="-R$ssldir/lib $LDFLAGS"
260 LDFLAGS="-L$ssldir $saved_LDFLAGS"
261 if test ! -z "$need_dash_r" ; then
262 LDFLAGS="-R$ssldir $LDFLAGS"
265 # Try to use $ssldir/include if it exists, otherwise
267 if test -d "$ssldir/include" ; then
268 CFLAGS="-I$ssldir/include $saved_CFLAGS"
270 CFLAGS="-I$ssldir $saved_CFLAGS"
274 # Basic test to check for compatible version and correct linking
275 # *does not* test for RSA - that comes later.
279 #include <openssl/rand.h>
283 memset(a, 0, sizeof(a));
284 RAND_add(a, sizeof(a), sizeof(a));
285 return(RAND_status() <= 0);
294 if test ! -z "$found_crypto" ; then
299 if test -z "$ssldir" ; then
303 if test ! -z "$found_crypto" ; then
304 ac_cv_openssldir=$ssldir
306 ac_cv_openssldir="no"
310 LDFLAGS="$saved_LDFLAGS"
311 CFLAGS="$saved_CFLAGS"
313 if test "x$ac_cv_openssldir" != "xno" ; then
314 AC_DEFINE(HAVE_OPENSSL)
315 LIBS="-lssl -lcrypto $LIBS"
316 dnl Need to recover ssldir - test above runs in subshell
317 ssldir=$ac_cv_openssldir
318 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
319 # Try to use $ssldir/lib if it exists, otherwise
321 if test -d "$ssldir/lib" ; then
322 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
323 if test ! -z "$need_dash_r" ; then
324 LDFLAGS="-R$ssldir/lib $LDFLAGS"
327 LDFLAGS="-L$ssldir $saved_LDFLAGS"
328 if test ! -z "$need_dash_r" ; then
329 LDFLAGS="-R$ssldir $LDFLAGS"
332 # Try to use $ssldir/include if it exists, otherwise
334 if test -d "$ssldir/include" ; then
335 CFLAGS="-I$ssldir/include $saved_CFLAGS"
337 CFLAGS="-I$ssldir $saved_CFLAGS"
343 dnl Checks for header files.
349 dnl TODO: for the DB header checks, we should check whether the headers
350 dnl define db_env_create, somehow
352 AC_CHECK_HEADERS(curses.h ncurses.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)
354 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
355 [#ifdef HAVE_SYS_TYPES_H
356 #include <sys/types.h>
358 #ifdef HAVE_NETINET_IN_H
359 #include <netinet/in.h>
365 dnl Checks for typedefs, structures, and compiler characteristics.
371 dnl defined in acinclude.m4:
374 dnl Check the size of various builtin types; see typesize.h (error)
375 AC_CHECK_SIZEOF(char, 0)
376 AC_CHECK_SIZEOF(short, 0)
377 AC_CHECK_SIZEOF(int, 0)
378 AC_CHECK_SIZEOF(long, 0)
379 dnl AC_CHECK_SIZEOF(long long, 0)
381 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
382 [AC_TRY_COMPILE([#include <sys/types.h>
383 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
384 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
385 if test $ac_cv_struct_ut_type = yes; then
386 AC_DEFINE(HAVE_UT_TYPE)
389 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
390 [AC_TRY_COMPILE([#include <sys/types.h>
391 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
392 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
393 if test $ac_cv_struct_ut_host = yes; then
394 AC_DEFINE(HAVE_UT_HOST)
397 dnl Checks for library functions.
399 AC_PROG_GCC_TRADITIONAL
402 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
404 dnl Now check for pthreads
406 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
407 dnl we need to include pthread.h
409 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
410 [AC_TRY_LINK([#include <pthread.h>],
413 /* The GNU C library defines this for functions which it implements
414 to always fail with ENOSYS. Some functions are actually named
415 something starting with __ and the normal name is an alias. */
416 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
419 pthread_cancel(thread);
421 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
422 if test "$ac_cv_func_pthread_cancel" = yes; then
423 AC_DEFINE(HAVE_PTHREAD_CANCEL)
426 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
427 [AC_TRY_LINK([#include <pthread.h>],
428 [ /* The GNU C library defines this for functions which it implements
429 to always fail with ENOSYS. Some functions are actually named
430 something starting with __ and the normal name is an alias. */
431 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
434 pthread_create(NULL, NULL, NULL, NULL);
436 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
437 if test "$ac_cv_func_pthread_create" = yes; then
438 test "$DATABASE" && TARGETS="client server utils serv_modules"
439 if test "x$enable_threaded_client" != xno; then
440 AC_DEFINE(THREADED_CLIENT)
444 AC_REPLACE_FUNCS(snprintf getutline)
446 dnl Done! Now write the Makefile and sysdep.h
450 AC_SUBST(chkpwd_LIBS)
453 AC_CONFIG_HEADER(sysdep.h)
454 AC_CONFIG_FILES([Makefile weekly])
457 if test -z "$DATABASE"; then
458 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])