1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [5.80], [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
41 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
42 AC_MSG_ERROR(can't enable both gdbm and db)
45 dnl By default, we only build the client (citadel and whobbs) unless we can
46 dnl figure out how to build with POSIX threads.
50 PTHREAD_DEFS=-D_REENTRANT
52 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
53 dnl for dlopen(), and has a wrapper script to link with shared libs.
54 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
56 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
57 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
60 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
62 dnl Digital Unix has an odd way to build for pthreads, and we can't
63 dnl build pthreads programs with gcc due to header problems.
65 test -z "$CC" && CC=cc
66 PTHREAD_LIBS="-lpthread -lexc"
69 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
71 if test "$with_kthread" = yes; then
77 PTHREAD_DEFS=-D_THREAD_SAFE
85 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
89 dnl Checks for programs.
92 dnl Set up system-dependent compiler flags.
93 if test "$GCC" = yes; then
96 CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
99 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
107 AC_SUBST(LIBTOOL_DEPS)
110 missing_dir=`cd $ac_aux_dir && pwd`
111 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
113 dnl Checks for system services.
115 dnl Checks for libraries.
117 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
118 dnl Makefile only passes $(LIBS) to that target. If other programs start
119 dnl requiring additional libraries, we'll have to use other variables, as is
120 dnl done with curses.
122 dnl We want to test for the following in libc before checking for their
123 dnl respective libraries, because some systems (like Irix) have both, and the
124 dnl non-libc versions may be broken.
125 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
127 if test "$ac_cv_func_gethostbyname" = no; then
128 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
131 if test "$ac_cv_func_connect" = no; then
132 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
135 if test "$ac_cv_func_dlopen" = no; then
136 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
137 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
140 dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
141 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
143 dnl Check for Solaris realtime support
144 AC_CHECK_LIB(rt, sched_yield)
146 dnl Determine the system's authentication capabilities, if autologin is
147 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
148 dnl (Linux shadow passwords)
149 if test "$enable_autologin" != no; then
150 if test "$with_pam" = yes; then
152 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
154 AC_CHECK_FUNCS(pam_start)
155 test "$enable_chkpwd" != no && LIBS=$save_LIBS
157 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
159 AC_SEARCH_LIBS(getspnam, shadow, [
160 if test "$ac_cv_search_getspnam" = -lshadow; then
161 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
163 test "$enable_chkpwd" != no && LIBS=$save_LIBS
164 if test "$ac_cv_func_crypt" = no; then
165 AC_CHECK_LIB(crypt, crypt, [
166 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
167 test "$enable_chkpwd" = no && \
168 LIBS="-lcrypt $LIBS"])
171 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
172 AC_DEFINE(ENABLE_AUTOLOGIN)
173 if test "$enable_chkpwd" != no; then
174 AC_DEFINE(ENABLE_CHKPWD)
182 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
183 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
184 AC_CHECK_LIB(db, db_env_create,
186 DATABASE=database_sleepycat.c
187 with_gdbm=no], [], [$NETLIBS])
190 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
191 AC_CHECK_LIB(gdbm, gdbm_open,
197 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
198 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
202 AC_SEARCH_LIBS(tgetent, [curses termcap])
203 AC_SEARCH_LIBS(initscr, [curses ncurses])
207 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
208 dnl which the -pthread flag takes care of this.)
209 if test "$check_pthread" != no; then
210 AC_CHECK_LIB(pthread, pthread_create,
211 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
212 AC_CHECK_LIB(pthreads, pthread_create,
213 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
216 dnl Checks for header files.
220 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" )
221 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)
223 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
227 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
228 dnl include pthread.h:
229 save_CPPFLAGS=$CPPFLAGS
230 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
231 AC_CHECK_HEADERS(pthread.h)
232 CPPFLAGS=$save_CPPFLAGS
234 dnl Checks for typedefs, structures, and compiler characteristics.
241 dnl Check the size of various builtin types; see typesize.h (error)
242 AC_CHECK_SIZEOF(char, 0)
243 AC_CHECK_SIZEOF(short, 0)
244 AC_CHECK_SIZEOF(int, 0)
245 AC_CHECK_SIZEOF(long, 0)
246 dnl AC_CHECK_SIZEOF(long long, 0)
248 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
249 [AC_TRY_COMPILE([#include <sys/types.h>
250 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
251 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
252 if test $ac_cv_struct_ut_type = yes; then
253 AC_DEFINE(HAVE_UT_TYPE)
256 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
257 [AC_TRY_COMPILE([#include <sys/types.h>
258 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
259 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
260 if test $ac_cv_struct_ut_host = yes; then
261 AC_DEFINE(HAVE_UT_HOST)
264 dnl Checks for library functions.
266 AC_PROG_GCC_TRADITIONAL
269 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
271 dnl Now check for pthreads -- set up variables so that the compiler will be run
272 dnl with proper flags for pthread programs
274 LIBS="$PTHREAD_LIBS $LIBS"
276 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
277 dnl we need to include pthread.h
278 dnl AC_CHECK_FUNCS(pthread_cancel)
280 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
281 [AC_TRY_LINK([#include <pthread.h>],
284 /* The GNU C library defines this for functions which it implements
285 to always fail with ENOSYS. Some functions are actually named
286 something starting with __ and the normal name is an alias. */
287 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
290 pthread_cancel(thread);
292 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
293 if test "$ac_cv_func_pthread_cancel" = yes; then
294 AC_DEFINE(HAVE_PTHREAD_CANCEL)
297 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
299 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
300 [AC_TRY_LINK([#include <pthread.h>],
301 [ /* The GNU C library defines this for functions which it implements
302 to always fail with ENOSYS. Some functions are actually named
303 something starting with __ and the normal name is an alias. */
304 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
307 pthread_create(NULL, NULL, NULL, NULL);
309 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
310 if test "$ac_cv_func_pthread_create" = yes; then
311 TARGETS="client server utils serv_modules"
312 if test "x$enable_threaded_client" != xno; then
313 AC_DEFINE(THREADED_CLIENT)
314 CLIENT_PTLIBS=$PTHREAD_LIBS
315 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
320 if test "x$CX" != x.ro; then
321 CL_LIBOBJS='$(LIBOBJS)'
325 dnl Now restore the old libs so we don't pass the wrong stuff to makefile
328 AC_REPLACE_FUNCS(snprintf getutline)
330 dnl Done! Now write the Makefile and sysdep.h
337 AC_SUBST(chkpwd_LIBS)
339 AC_SUBST(PTHREAD_DEFS)
340 AC_SUBST(PTHREAD_LIBS)
341 AC_SUBST(CLIENT_PTLIBS)
345 AC_CONFIG_HEADER(sysdep.h)
346 AC_CONFIG_FILES([Makefile weekly])