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 if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
29 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
32 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
36 test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
37 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
38 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
39 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
42 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
43 AC_MSG_ERROR(can't enable both gdbm and db)
46 dnl By default, we only build the client (citadel and whobbs) unless we can
47 dnl figure out how to build with POSIX threads.
51 PTHREAD_DEFS=-D_REENTRANT
53 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
54 dnl for dlopen(), and has a wrapper script to link with shared libs.
55 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
57 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
58 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
61 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
63 dnl Digital Unix has an odd way to build for pthreads, and we can't
64 dnl build pthreads programs with gcc due to header problems.
66 test -z "$CC" && CC=cc
67 PTHREAD_LIBS="-lpthread -lexc"
70 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
72 if test "$with_kthread" = yes; then
78 PTHREAD_DEFS=-D_THREAD_SAFE
86 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
90 dnl Checks for programs.
93 dnl Set up system-dependent compiler flags.
94 if test "$GCC" = yes; then
96 *-*-solaris*|alpha*-dec-osf*)
97 CFLAGS="$CFLAGS -Wall -Wcast-align -Wno-char-subscripts"
100 CFLAGS="$CFLAGS -Wall -Wcast-align -Wstrict-prototypes"
108 AC_SUBST(LIBTOOL_DEPS)
111 missing_dir=`cd $ac_aux_dir && pwd`
112 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
114 dnl Checks for system services.
116 dnl Checks for libraries.
118 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
119 dnl Makefile only passes $(LIBS) to that target. If other programs start
120 dnl requiring additional libraries, we'll have to use other variables, as is
121 dnl done with curses.
123 dnl We want to test for the following in libc before checking for their
124 dnl respective libraries, because some systems (like Irix) have both, and the
125 dnl non-libc versions may be broken.
126 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
128 if test "$ac_cv_func_gethostbyname" = no; then
129 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
132 if test "$ac_cv_func_connect" = no; then
133 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
136 if test "$ac_cv_func_dlopen" = no; then
137 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
138 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
141 dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
142 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
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 "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
184 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
185 AC_CHECK_LIB(db3, db_env_create,
187 DATABASE=database_sleepycat.c
188 with_gdbm=no], [AC_CHECK_LIB(db, db_env_create,
190 DATABASE=database_sleepycat.c
191 with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
194 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
195 AC_CHECK_LIB(gdbm, gdbm_open,
201 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
202 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
206 AC_SEARCH_LIBS(tgetent, [curses termcap])
207 AC_SEARCH_LIBS(initscr, [curses ncurses])
211 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
212 dnl which the -pthread flag takes care of this.)
213 if test "$check_pthread" != no; then
214 AC_CHECK_LIB(pthread, pthread_create,
215 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
216 AC_CHECK_LIB(pthreads, pthread_create,
217 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
220 dnl Checks for header files.
225 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || \
226 ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" ) || \
227 ( test -d /usr/local/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db3" )
229 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)
231 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
235 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
236 dnl include pthread.h:
237 save_CPPFLAGS=$CPPFLAGS
238 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
239 AC_CHECK_HEADERS(pthread.h)
240 CPPFLAGS=$save_CPPFLAGS
242 dnl Checks for typedefs, structures, and compiler characteristics.
249 dnl Check the size of various builtin types; see typesize.h (error)
250 AC_CHECK_SIZEOF(char, 0)
251 AC_CHECK_SIZEOF(short, 0)
252 AC_CHECK_SIZEOF(int, 0)
253 AC_CHECK_SIZEOF(long, 0)
254 dnl AC_CHECK_SIZEOF(long long, 0)
256 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
257 [AC_TRY_COMPILE([#include <sys/types.h>
258 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
259 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
260 if test $ac_cv_struct_ut_type = yes; then
261 AC_DEFINE(HAVE_UT_TYPE)
264 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
265 [AC_TRY_COMPILE([#include <sys/types.h>
266 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
267 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
268 if test $ac_cv_struct_ut_host = yes; then
269 AC_DEFINE(HAVE_UT_HOST)
272 dnl Checks for library functions.
274 AC_PROG_GCC_TRADITIONAL
277 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
279 dnl Now check for pthreads -- set up variables so that the compiler will be run
280 dnl with proper flags for pthread programs
282 LIBS="$PTHREAD_LIBS $LIBS"
284 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
285 dnl we need to include pthread.h
287 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
288 [AC_TRY_LINK([#include <pthread.h>],
291 /* The GNU C library defines this for functions which it implements
292 to always fail with ENOSYS. Some functions are actually named
293 something starting with __ and the normal name is an alias. */
294 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
297 pthread_cancel(thread);
299 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
300 if test "$ac_cv_func_pthread_cancel" = yes; then
301 AC_DEFINE(HAVE_PTHREAD_CANCEL)
304 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
305 [AC_TRY_LINK([#include <pthread.h>],
306 [ /* The GNU C library defines this for functions which it implements
307 to always fail with ENOSYS. Some functions are actually named
308 something starting with __ and the normal name is an alias. */
309 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
312 pthread_create(NULL, NULL, NULL, NULL);
314 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
315 if test "$ac_cv_func_pthread_create" = yes; then
316 test "$DATABASE" && TARGETS="client server utils serv_modules"
317 if test "x$enable_threaded_client" != xno; then
318 AC_DEFINE(THREADED_CLIENT)
319 CLIENT_PTLIBS=$PTHREAD_LIBS
320 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
325 if test "x$CX" != x.ro; then
326 CL_LIBOBJS='$(LIBOBJS)'
330 dnl Now restore the old libs so we don't pass the wrong stuff to makefile
333 AC_REPLACE_FUNCS(snprintf getutline)
335 dnl Done! Now write the Makefile and sysdep.h
342 AC_SUBST(chkpwd_LIBS)
344 AC_SUBST(PTHREAD_DEFS)
345 AC_SUBST(PTHREAD_LIBS)
346 AC_SUBST(CLIENT_PTLIBS)
350 AC_CONFIG_HEADER(sysdep.h)
351 AC_CONFIG_FILES([Makefile weekly])
354 if test -z "$DATABASE"; then
355 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])