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 -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
43 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
44 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
45 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
48 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
49 AC_MSG_ERROR(can't enable both gdbm and db)
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
59 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
60 dnl for dlopen(), and has a wrapper script to link with shared libs.
61 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
63 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
64 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
67 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
69 dnl Digital Unix has an odd way to build for pthreads, and we can't
70 dnl build pthreads programs with gcc due to header problems.
72 test -z "$CC" && CC=cc
73 PTHREAD_LIBS="-lpthread -lexc"
76 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
78 if test "$with_kthread" = yes; then
84 PTHREAD_DEFS=-D_THREAD_SAFE
92 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
96 dnl Checks for programs.
99 dnl Set up system-dependent compiler flags.
100 if test "$GCC" = yes; then
102 *-*-solaris*|alpha*-dec-osf*)
103 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
106 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
114 AC_SUBST(LIBTOOL_DEPS)
117 missing_dir=`cd $ac_aux_dir && pwd`
118 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
119 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
121 dnl Checks for system services.
123 dnl Checks for libraries.
125 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
126 dnl Makefile only passes $(LIBS) to that target. If other programs start
127 dnl requiring additional libraries, we'll have to use other variables, as is
128 dnl done with curses.
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, NETLIBS="-lnsl $NETLIBS")
139 if test "$ac_cv_func_connect" = no; then
140 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
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"
193 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || \
194 ( test -d /usr/include/db4 && CPPFLAGS="$CPPFLAGS -I/usr/include/db4" ) || \
195 ( test -d /usr/local/include/db4 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db4" ) || \
196 ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" ) || \
197 ( test -d /usr/local/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db3" )
199 AC_CHECK_LIB(db3, db_env_create,
201 DATABASE=database_sleepycat.c
202 with_gdbm=no], [AC_CHECK_LIB(db, db_env_create,
204 DATABASE=database_sleepycat.c
205 with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
208 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
209 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
210 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
212 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
214 AC_CHECK_LIB(gdbm, gdbm_open,
220 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
221 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
225 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
226 AC_SEARCH_LIBS(initscr, [ncurses curses])
227 AC_CHECK_FUNCS(vw_printw wcolor_set)
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 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
236 AC_CHECK_LIB(pthreads, pthread_create,
237 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
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)
323 SSL_LIBS="-lssl -lcrypto"
324 dnl Need to recover ssldir - test above runs in subshell
325 ssldir=$ac_cv_openssldir
326 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
327 # Try to use $ssldir/lib if it exists, otherwise
329 if test -d "$ssldir/lib" ; then
330 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
331 if test ! -z "$need_dash_r" ; then
332 LDFLAGS="-R$ssldir/lib $LDFLAGS"
335 LDFLAGS="-L$ssldir $saved_LDFLAGS"
336 if test ! -z "$need_dash_r" ; then
337 LDFLAGS="-R$ssldir $LDFLAGS"
340 # Try to use $ssldir/include if it exists, otherwise
342 if test -d "$ssldir/include" ; then
343 CFLAGS="-I$ssldir/include $saved_CFLAGS"
345 CFLAGS="-I$ssldir $saved_CFLAGS"
351 dnl Checks for header files.
357 dnl TODO: for the DB header checks, we should check whether the headers
358 dnl define db_env_create, somehow
360 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)
362 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
366 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
367 dnl include pthread.h:
368 save_CPPFLAGS=$CPPFLAGS
369 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
370 AC_CHECK_HEADERS(pthread.h)
371 CPPFLAGS=$save_CPPFLAGS
373 dnl Checks for typedefs, structures, and compiler characteristics.
379 dnl defined in acinclude.m4:
382 dnl Check the size of various builtin types; see typesize.h (error)
383 AC_CHECK_SIZEOF(char, 0)
384 AC_CHECK_SIZEOF(short, 0)
385 AC_CHECK_SIZEOF(int, 0)
386 AC_CHECK_SIZEOF(long, 0)
387 dnl AC_CHECK_SIZEOF(long long, 0)
389 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
390 [AC_TRY_COMPILE([#include <sys/types.h>
391 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
392 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
393 if test $ac_cv_struct_ut_type = yes; then
394 AC_DEFINE(HAVE_UT_TYPE)
397 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
398 [AC_TRY_COMPILE([#include <sys/types.h>
399 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
400 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
401 if test $ac_cv_struct_ut_host = yes; then
402 AC_DEFINE(HAVE_UT_HOST)
405 dnl Checks for library functions.
407 AC_PROG_GCC_TRADITIONAL
410 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
412 dnl Now check for pthreads -- set up variables so that the compiler will be run
413 dnl with proper flags for pthread programs
415 LIBS="$PTHREAD_LIBS $LIBS"
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)
452 CLIENT_PTLIBS=$PTHREAD_LIBS
453 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
458 if test "x$CX" != x.ro; then
459 CL_LIBOBJS='$(LIBOBJS)'
463 dnl Now restore the old libs so we don't pass the wrong stuff to makefile
466 AC_REPLACE_FUNCS(snprintf getutline)
468 dnl Done! Now write the Makefile and sysdep.h
475 AC_SUBST(chkpwd_LIBS)
477 AC_SUBST(PTHREAD_DEFS)
478 AC_SUBST(PTHREAD_LIBS)
479 AC_SUBST(CLIENT_PTLIBS)
484 AC_CONFIG_HEADER(sysdep.h)
485 AC_CONFIG_FILES([Makefile weekly])
488 if test -z "$DATABASE"; then
489 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])