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], [AC_CHECK_LIB(db3, db_env_create,
189 DATABASE=database_sleepycat.c
190 with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
193 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
194 AC_CHECK_LIB(gdbm, gdbm_open,
200 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
201 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
205 AC_SEARCH_LIBS(tgetent, [curses termcap])
206 AC_SEARCH_LIBS(initscr, [curses ncurses])
210 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
211 dnl which the -pthread flag takes care of this.)
212 if test "$check_pthread" != no; then
213 AC_CHECK_LIB(pthread, pthread_create,
214 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
215 AC_CHECK_LIB(pthreads, pthread_create,
216 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
219 dnl Checks for header files.
223 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include" || \
224 ( test -d /usr/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/include/db3" ) || \
225 ( test -d /usr/local/include/db3 && CPPFLAGS="$CPPFLAGS -I/usr/local/include/db3" )
226 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)
228 AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
232 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
233 dnl include pthread.h:
234 save_CPPFLAGS=$CPPFLAGS
235 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
236 AC_CHECK_HEADERS(pthread.h)
237 CPPFLAGS=$save_CPPFLAGS
239 dnl Checks for typedefs, structures, and compiler characteristics.
246 dnl Check the size of various builtin types; see typesize.h (error)
247 AC_CHECK_SIZEOF(char, 0)
248 AC_CHECK_SIZEOF(short, 0)
249 AC_CHECK_SIZEOF(int, 0)
250 AC_CHECK_SIZEOF(long, 0)
251 dnl AC_CHECK_SIZEOF(long long, 0)
253 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
254 [AC_TRY_COMPILE([#include <sys/types.h>
255 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
256 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
257 if test $ac_cv_struct_ut_type = yes; then
258 AC_DEFINE(HAVE_UT_TYPE)
261 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
262 [AC_TRY_COMPILE([#include <sys/types.h>
263 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
264 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
265 if test $ac_cv_struct_ut_host = yes; then
266 AC_DEFINE(HAVE_UT_HOST)
269 dnl Checks for library functions.
271 AC_PROG_GCC_TRADITIONAL
274 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
276 dnl Now check for pthreads -- set up variables so that the compiler will be run
277 dnl with proper flags for pthread programs
279 LIBS="$PTHREAD_LIBS $LIBS"
281 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
282 dnl we need to include pthread.h
283 dnl AC_CHECK_FUNCS(pthread_cancel)
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 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
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 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])