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 Check the size of various builtin types; see typesize.h (error)
129 AC_CHECK_SIZEOF(char, 0)
130 AC_CHECK_SIZEOF(short, 0)
131 AC_CHECK_SIZEOF(int, 0)
132 AC_CHECK_SIZEOF(long, 0)
133 dnl AC_CHECK_SIZEOF(long long, 0)
135 dnl Checks for libraries.
137 dnl We want to test for the following in libc before checking for their
138 dnl respective libraries, because some systems (like Irix) have both, and the
139 dnl non-libc versions may be broken.
140 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
142 if test "$ac_cv_func_gethostbyname" = no; then
143 AC_CHECK_LIB(nsl, gethostbyname)
146 if test "$ac_cv_func_connect" = no; then
147 AC_CHECK_LIB(socket, connect)
150 if test "$ac_cv_func_dlopen" = no; then
151 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
152 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
155 dnl Check for HP/UX dynamic loader. This should only be in -ldld.
156 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
158 dnl Check for Solaris realtime support
159 AC_CHECK_LIB(rt, sched_yield)
161 dnl Determine the system's authentication capabilities, if autologin is
162 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
163 dnl (Linux shadow passwords)
164 if test "$enable_autologin" != no; then
165 if test "$with_pam" = yes; then
167 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
169 AC_CHECK_FUNCS(pam_start)
170 test "$enable_chkpwd" != no && LIBS=$save_LIBS
172 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
174 AC_SEARCH_LIBS(getspnam, shadow, [
175 if test "$ac_cv_search_getspnam" = -lshadow; then
176 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
178 test "$enable_chkpwd" != no && LIBS=$save_LIBS
179 if test "$ac_cv_func_crypt" = no; then
180 AC_CHECK_LIB(crypt, crypt, [
181 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
182 test "$enable_chkpwd" = no && \
183 LIBS="-lcrypt $LIBS"])
186 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
187 AC_DEFINE(ENABLE_AUTOLOGIN)
188 if test "$enable_chkpwd" != no; then
189 AC_DEFINE(ENABLE_CHKPWD)
197 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
198 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
200 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
201 AC_SEARCH_LIBS(initscr, [ncurses curses])
202 AC_CHECK_FUNCS(vw_printw wcolor_set)
204 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
205 dnl which the -pthread flag takes care of this.)
206 if test "$check_pthread" != no; then
207 AC_CHECK_LIB(pthread, pthread_create)
208 AC_CHECK_LIB(pthreads, pthread_create)
211 # The big search for OpenSSL
212 if test "$with_ssl" != "no"; then
214 saved_LDFLAGS="$LDFLAGS"
215 saved_CFLAGS="$CFLAGS"
216 if test "x$prefix" != "xNONE"; then
217 tryssldir="$tryssldir $prefix"
219 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
220 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
221 CFLAGS="$saved_CFLAGS"
222 LDFLAGS="$saved_LDFLAGS"
223 LIBS="$saved_LIBS -lssl -lcrypto"
225 # Skip directories if they don't exist
226 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
229 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
230 # Try to use $ssldir/lib if it exists, otherwise
232 if test -d "$ssldir/lib" ; then
233 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
234 if test ! -z "$need_dash_r" ; then
235 LDFLAGS="-R$ssldir/lib $LDFLAGS"
238 LDFLAGS="-L$ssldir $saved_LDFLAGS"
239 if test ! -z "$need_dash_r" ; then
240 LDFLAGS="-R$ssldir $LDFLAGS"
243 # Try to use $ssldir/include if it exists, otherwise
245 if test -d "$ssldir/include" ; then
246 CFLAGS="-I$ssldir/include $saved_CFLAGS"
248 CFLAGS="-I$ssldir $saved_CFLAGS"
252 # Basic test to check for compatible version and correct linking
253 # *does not* test for RSA - that comes later.
257 #include <openssl/rand.h>
261 memset(a, 0, sizeof(a));
262 RAND_add(a, sizeof(a), sizeof(a));
263 return(RAND_status() <= 0);
272 if test ! -z "$found_crypto" ; then
277 if test -z "$ssldir" ; then
281 if test ! -z "$found_crypto" ; then
282 ac_cv_openssldir=$ssldir
284 ac_cv_openssldir="no"
288 LDFLAGS="$saved_LDFLAGS"
289 CFLAGS="$saved_CFLAGS"
291 if test "x$ac_cv_openssldir" != "xno" ; then
292 AC_DEFINE(HAVE_OPENSSL)
293 LIBS="-lssl -lcrypto $LIBS"
294 dnl Need to recover ssldir - test above runs in subshell
295 ssldir=$ac_cv_openssldir
296 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
297 # Try to use $ssldir/lib if it exists, otherwise
299 if test -d "$ssldir/lib" ; then
300 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
301 if test ! -z "$need_dash_r" ; then
302 LDFLAGS="-R$ssldir/lib $LDFLAGS"
305 LDFLAGS="-L$ssldir $saved_LDFLAGS"
306 if test ! -z "$need_dash_r" ; then
307 LDFLAGS="-R$ssldir $LDFLAGS"
310 # Try to use $ssldir/include if it exists, otherwise
312 if test -d "$ssldir/include" ; then
313 CFLAGS="-I$ssldir/include $saved_CFLAGS"
315 CFLAGS="-I$ssldir $saved_CFLAGS"
321 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
322 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
326 if test -d "$db_dir/include/db4"; then
327 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
329 elif test -d "$db_dir/include/db3"; then
330 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
332 elif test "$db_dir"; then
333 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
334 elif test -d /usr/include/db4; then
335 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
337 elif test -d /usr/include/db3; then
338 CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
342 AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
343 DATABASE=database_sleepycat.c
349 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
350 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
351 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
353 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
355 AC_CHECK_LIB(gdbm, gdbm_open,
361 dnl Checks for header files.
367 dnl TODO: for the DB header checks, we should check whether the headers
368 dnl define db_env_create, somehow
370 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)
372 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
373 [#ifdef HAVE_SYS_TYPES_H
374 #include <sys/types.h>
376 #ifdef HAVE_NETINET_IN_H
377 #include <netinet/in.h>
383 dnl Checks for typedefs, structures, and compiler characteristics.
389 dnl defined in acinclude.m4:
392 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
393 [AC_TRY_COMPILE([#include <sys/types.h>
394 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
395 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
396 if test $ac_cv_struct_ut_type = yes; then
397 AC_DEFINE(HAVE_UT_TYPE)
400 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
401 [AC_TRY_COMPILE([#include <sys/types.h>
402 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
403 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
404 if test $ac_cv_struct_ut_host = yes; then
405 AC_DEFINE(HAVE_UT_HOST)
408 dnl Checks for library functions.
410 AC_PROG_GCC_TRADITIONAL
413 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
415 dnl Now check for pthreads
417 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
418 dnl we need to include pthread.h
420 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
421 [AC_TRY_LINK([#include <pthread.h>],
424 /* The GNU C library defines this for functions which it implements
425 to always fail with ENOSYS. Some functions are actually named
426 something starting with __ and the normal name is an alias. */
427 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
430 pthread_cancel(thread);
432 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
433 if test "$ac_cv_func_pthread_cancel" = yes; then
434 AC_DEFINE(HAVE_PTHREAD_CANCEL)
437 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
438 [AC_TRY_LINK([#include <pthread.h>],
439 [ /* The GNU C library defines this for functions which it implements
440 to always fail with ENOSYS. Some functions are actually named
441 something starting with __ and the normal name is an alias. */
442 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
445 pthread_create(NULL, NULL, NULL, NULL);
447 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
448 if test "$ac_cv_func_pthread_create" = yes; then
449 test "$DATABASE" && TARGETS="client server utils serv_modules"
450 if test "x$enable_threaded_client" != xno; then
451 AC_DEFINE(THREADED_CLIENT)
455 AC_REPLACE_FUNCS(snprintf getutline)
457 dnl Done! Now write the Makefile and sysdep.h
461 AC_SUBST(chkpwd_LIBS)
464 AC_CONFIG_HEADER(sysdep.h)
465 AC_CONFIG_FILES([Makefile weekly])
468 if test -z "$DATABASE"; then
469 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])