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
30 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
34 test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
35 test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
36 test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
37 test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
40 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
41 AC_MSG_ERROR(can't enable both gdbm and db)
44 dnl By default, we only build the client (citadel and whobbs) unless we can
45 dnl figure out how to build with POSIX threads.
49 PTHREAD_DEFS=-D_REENTRANT
51 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
52 dnl for dlopen(), and has a wrapper script to link with shared libs.
53 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
55 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
56 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
59 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
61 dnl Digital Unix has an odd way to build for pthreads, and we can't
62 dnl build pthreads programs with gcc due to header problems.
64 test -z "$CC" && CC=cc
65 PTHREAD_LIBS="-lpthread -lexc"
68 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
70 if test "$with_kthread" = yes; then
76 PTHREAD_DEFS=-D_THREAD_SAFE
84 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
88 dnl Checks for programs.
91 dnl Set up system-dependent compiler flags.
92 if test "$GCC" = yes; then
94 *-*-solaris*|alpha*-dec-osf*)
95 CFLAGS="$CFLAGS -Wall -Wcast-align -Wno-char-subscripts"
98 CFLAGS="$CFLAGS -Wall -Wcast-align -Wstrict-prototypes"
106 AC_SUBST(LIBTOOL_DEPS)
109 missing_dir=`cd $ac_aux_dir && pwd`
110 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
112 dnl Checks for system services.
114 dnl Checks for libraries.
116 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
117 dnl Makefile only passes $(LIBS) to that target. If other programs start
118 dnl requiring additional libraries, we'll have to use other variables, as is
119 dnl done with curses.
121 dnl We want to test for the following in libc before checking for their
122 dnl respective libraries, because some systems (like Irix) have both, and the
123 dnl non-libc versions may be broken.
124 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
126 if test "$ac_cv_func_gethostbyname" = no; then
127 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
130 if test "$ac_cv_func_connect" = no; then
131 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
134 if test "$ac_cv_func_dlopen" = no; then
135 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
136 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
139 dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
140 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
142 dnl Check for Solaris realtime support
143 AC_CHECK_LIB(rt, sched_yield)
145 dnl Determine the system's authentication capabilities, if autologin is
146 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
147 dnl (Linux shadow passwords)
148 if test "$enable_autologin" != no; then
149 if test "$with_pam" = yes; then
151 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
153 AC_CHECK_FUNCS(pam_start)
154 test "$enable_chkpwd" != no && LIBS=$save_LIBS
156 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
158 AC_SEARCH_LIBS(getspnam, shadow, [
159 if test "$ac_cv_search_getspnam" = -lshadow; then
160 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
162 test "$enable_chkpwd" != no && LIBS=$save_LIBS
163 if test "$ac_cv_func_crypt" = no; then
164 AC_CHECK_LIB(crypt, crypt, [
165 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
166 test "$enable_chkpwd" = no && \
167 LIBS="-lcrypt $LIBS"])
170 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
171 AC_DEFINE(ENABLE_AUTOLOGIN)
172 if test "$enable_chkpwd" != no; then
173 AC_DEFINE(ENABLE_CHKPWD)
181 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
182 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
184 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || \
185 ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" ) || \
186 ( test -d /usr/local/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db3" )
188 AC_CHECK_LIB(db3, db_env_create,
190 DATABASE=database_sleepycat.c
191 with_gdbm=no], [AC_CHECK_LIB(db, db_env_create,
193 DATABASE=database_sleepycat.c
194 with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
197 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
198 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
199 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
201 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
203 AC_CHECK_LIB(gdbm, gdbm_open,
209 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
210 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
214 AC_SEARCH_LIBS(tgetent, [curses termcap])
215 AC_SEARCH_LIBS(initscr, [curses ncurses])
219 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
220 dnl which the -pthread flag takes care of this.)
221 if test "$check_pthread" != no; then
222 AC_CHECK_LIB(pthread, pthread_create,
223 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
224 AC_CHECK_LIB(pthreads, pthread_create,
225 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
228 dnl Checks for header files.
233 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)
235 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
239 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
240 dnl include pthread.h:
241 save_CPPFLAGS=$CPPFLAGS
242 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
243 AC_CHECK_HEADERS(pthread.h)
244 CPPFLAGS=$save_CPPFLAGS
246 dnl Checks for typedefs, structures, and compiler characteristics.
253 dnl Check the size of various builtin types; see typesize.h (error)
254 AC_CHECK_SIZEOF(char, 0)
255 AC_CHECK_SIZEOF(short, 0)
256 AC_CHECK_SIZEOF(int, 0)
257 AC_CHECK_SIZEOF(long, 0)
258 dnl AC_CHECK_SIZEOF(long long, 0)
260 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
261 [AC_TRY_COMPILE([#include <sys/types.h>
262 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
263 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
264 if test $ac_cv_struct_ut_type = yes; then
265 AC_DEFINE(HAVE_UT_TYPE)
268 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
269 [AC_TRY_COMPILE([#include <sys/types.h>
270 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
271 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
272 if test $ac_cv_struct_ut_host = yes; then
273 AC_DEFINE(HAVE_UT_HOST)
276 dnl Checks for library functions.
278 AC_PROG_GCC_TRADITIONAL
281 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
283 dnl Now check for pthreads -- set up variables so that the compiler will be run
284 dnl with proper flags for pthread programs
286 LIBS="$PTHREAD_LIBS $LIBS"
288 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
289 dnl we need to include pthread.h
291 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
292 [AC_TRY_LINK([#include <pthread.h>],
295 /* The GNU C library defines this for functions which it implements
296 to always fail with ENOSYS. Some functions are actually named
297 something starting with __ and the normal name is an alias. */
298 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
301 pthread_cancel(thread);
303 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
304 if test "$ac_cv_func_pthread_cancel" = yes; then
305 AC_DEFINE(HAVE_PTHREAD_CANCEL)
308 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
309 [AC_TRY_LINK([#include <pthread.h>],
310 [ /* The GNU C library defines this for functions which it implements
311 to always fail with ENOSYS. Some functions are actually named
312 something starting with __ and the normal name is an alias. */
313 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
316 pthread_create(NULL, NULL, NULL, NULL);
318 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
319 if test "$ac_cv_func_pthread_create" = yes; then
320 test "$DATABASE" && TARGETS="client server utils serv_modules"
321 if test "x$enable_threaded_client" != xno; then
322 AC_DEFINE(THREADED_CLIENT)
323 CLIENT_PTLIBS=$PTHREAD_LIBS
324 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
329 if test "x$CX" != x.ro; then
330 CL_LIBOBJS='$(LIBOBJS)'
334 dnl Now restore the old libs so we don't pass the wrong stuff to makefile
337 AC_REPLACE_FUNCS(snprintf getutline)
339 dnl Done! Now write the Makefile and sysdep.h
346 AC_SUBST(chkpwd_LIBS)
348 AC_SUBST(PTHREAD_DEFS)
349 AC_SUBST(PTHREAD_LIBS)
350 AC_SUBST(CLIENT_PTLIBS)
354 AC_CONFIG_HEADER(sysdep.h)
355 AC_CONFIG_FILES([Makefile weekly])
358 if test -z "$DATABASE"; then
359 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])