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"
227 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)
229 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
233 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
234 dnl include pthread.h:
235 save_CPPFLAGS=$CPPFLAGS
236 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
237 AC_CHECK_HEADERS(pthread.h)
238 CPPFLAGS=$save_CPPFLAGS
240 dnl Checks for typedefs, structures, and compiler characteristics.
247 dnl Check the size of various builtin types; see typesize.h (error)
248 AC_CHECK_SIZEOF(char, 0)
249 AC_CHECK_SIZEOF(short, 0)
250 AC_CHECK_SIZEOF(int, 0)
251 AC_CHECK_SIZEOF(long, 0)
252 dnl AC_CHECK_SIZEOF(long long, 0)
254 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
255 [AC_TRY_COMPILE([#include <sys/types.h>
256 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
257 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
258 if test $ac_cv_struct_ut_type = yes; then
259 AC_DEFINE(HAVE_UT_TYPE)
262 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
263 [AC_TRY_COMPILE([#include <sys/types.h>
264 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
265 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
266 if test $ac_cv_struct_ut_host = yes; then
267 AC_DEFINE(HAVE_UT_HOST)
270 dnl Checks for library functions.
272 AC_PROG_GCC_TRADITIONAL
275 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
277 dnl Now check for pthreads -- set up variables so that the compiler will be run
278 dnl with proper flags for pthread programs
280 LIBS="$PTHREAD_LIBS $LIBS"
282 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
283 dnl we need to include pthread.h
285 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
286 [AC_TRY_LINK([#include <pthread.h>],
289 /* The GNU C library defines this for functions which it implements
290 to always fail with ENOSYS. Some functions are actually named
291 something starting with __ and the normal name is an alias. */
292 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
295 pthread_cancel(thread);
297 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
298 if test "$ac_cv_func_pthread_cancel" = yes; then
299 AC_DEFINE(HAVE_PTHREAD_CANCEL)
302 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
303 [AC_TRY_LINK([#include <pthread.h>],
304 [ /* The GNU C library defines this for functions which it implements
305 to always fail with ENOSYS. Some functions are actually named
306 something starting with __ and the normal name is an alias. */
307 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
310 pthread_create(NULL, NULL, NULL, NULL);
312 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
313 if test "$ac_cv_func_pthread_create" = yes; then
314 test "$DATABASE" && TARGETS="client server utils serv_modules"
315 if test "x$enable_threaded_client" != xno; then
316 AC_DEFINE(THREADED_CLIENT)
317 CLIENT_PTLIBS=$PTHREAD_LIBS
318 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
323 if test "x$CX" != x.ro; then
324 CL_LIBOBJS='$(LIBOBJS)'
328 dnl Now restore the old libs so we don't pass the wrong stuff to makefile
331 AC_REPLACE_FUNCS(snprintf getutline)
333 dnl Done! Now write the Makefile and sysdep.h
340 AC_SUBST(chkpwd_LIBS)
342 AC_SUBST(PTHREAD_DEFS)
343 AC_SUBST(PTHREAD_LIBS)
344 AC_SUBST(CLIENT_PTLIBS)
348 AC_CONFIG_HEADER(sysdep.h)
349 AC_CONFIG_FILES([Makefile weekly])
352 if test -z "$DATABASE"; then
353 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])