1 dnl Process this file with autoconf to produce a configure script.
5 AC_PREFIX_DEFAULT(/usr/local/citadel)
6 if test "$prefix" = NONE; then
7 AC_DEFINE_UNQUOTED(BBSDIR, "$ac_default_prefix")
9 AC_DEFINE_UNQUOTED(BBSDIR, "$prefix")
12 AC_ARG_ENABLE(autologin, [ --disable-autologin disable autologin (default is enabled if possible)])
13 AC_ARG_ENABLE(chkpwd, [ --disable-chkpwd don't build 'chkpwd'])
15 AC_ARG_ENABLE(threaded-client, [ --disable-threaded-client
16 disable multithreaded client])
18 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
19 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
20 AC_ARG_WITH(gdbm, [ --with-gdbm[=DIR] use GDBM [DIR=/usr/local]])
21 AC_ARG_WITH(db, [ --with-db[=DIR] use Sleepycat DB 3.1 [DIR=/usr/local/BerkeleyDB.3.1]])
23 if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyeso -a "$with_gdbm"; then
27 test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
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
38 if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
39 AC_MSG_ERROR(can't enable both gdbm and db)
42 dnl By default, we only build the client (citadel and whobbs) unless we can
43 dnl figure out how to build with POSIX threads.
48 PTHREAD_DEFS=-D_REENTRANT
49 LINK_SHARED='$(CC) -shared -fPIC'
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
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
70 dnl FreeBSD is similar to Digital UNIX:
72 if test "$with_kthread" = yes; then
78 PTHREAD_DEFS=-D_THREAD_SAFE
84 LINK_SHARED="ld -x -Bshareable"
87 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
91 dnl Checks for programs.
94 dnl Set up system-dependent compiler flags.
95 if test "$GCC" = yes; then
98 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
101 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
105 CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
109 SERVER_LDFLAGS="$SERVER_LDFLAGS -Wl,-E"
113 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
114 SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
122 missing_dir=`cd $ac_aux_dir && pwd`
123 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
125 dnl Checks for system services.
128 dnl Checks for libraries.
130 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
131 dnl Makefile only passes $(LIBS) to that target. If other programs start
132 dnl requiring additional libraries, we'll have to use other variables, as is
133 dnl done with curses.
135 dnl We want to test for the following in libc before checking for their
136 dnl respective libraries, because some systems (like Irix) have both, and the
137 dnl non-libc versions may be broken.
138 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
140 if test "$ac_cv_func_gethostbyname" = no; then
141 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
144 if test "$ac_cv_func_connect" = no; then
145 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
148 if test "$ac_cv_func_dlopen" = no; then
149 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
150 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
153 dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
154 AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
156 dnl Check for Solaris realtime support
157 AC_CHECK_LIB(rt, sched_yield)
159 dnl Determine the system's authentication capabilities, if autologin is
160 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
161 dnl (Linux shadow passwords)
162 if test "$enable_autologin" != no; then
163 if test "$with_pam" = yes; then
165 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
167 AC_CHECK_FUNCS(pam_start)
168 test "$enable_chkpwd" != no && LIBS=$save_LIBS
170 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
172 AC_SEARCH_LIBS(getspnam, shadow, [
173 if test "$ac_cv_search_getspnam" = -lshadow; then
174 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
176 test "$enable_chkpwd" != no && LIBS=$save_LIBS
177 if test "$ac_cv_func_crypt" = no; then
178 AC_CHECK_LIB(crypt, crypt, [
179 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
180 test "$enable_chkpwd" = no && \
181 LIBS="-lcrypt $LIBS"])
184 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
185 AC_DEFINE(ENABLE_AUTOLOGIN)
186 if test "$enable_chkpwd" != no; then
187 AC_DEFINE(ENABLE_CHKPWD)
195 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
196 if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
197 AC_CHECK_LIB(db, db_env_create,
199 DATABASE=database_sleepycat.c
200 with_gdbm=no], [], [$NETLIBS])
203 if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
204 AC_CHECK_LIB(gdbm, gdbm_open,
210 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
211 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
215 AC_SEARCH_LIBS(tgetent, [curses termcap])
216 AC_SEARCH_LIBS(initscr, [curses ncurses])
220 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
221 dnl which the -pthread flag takes care of this.)
222 if test "$check_pthread" != no; then
223 AC_CHECK_LIB(pthread, pthread_create,
224 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
225 AC_CHECK_LIB(pthreads, pthread_create,
226 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
229 dnl Checks for header files.
233 test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
234 AC_CHECK_HEADERS(curses.h dl.h dlfcn.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h)
236 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
237 dnl include pthread.h:
238 save_CPPFLAGS=$CPPFLAGS
239 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
240 AC_CHECK_HEADERS(pthread.h)
241 CPPFLAGS=$save_CPPFLAGS
243 dnl Checks for typedefs, structures, and compiler characteristics.
250 dnl Check the size of various builtin types; see typesize.h (error)
251 AC_CHECK_SIZEOF(char, 0)
252 AC_CHECK_SIZEOF(short, 0)
253 AC_CHECK_SIZEOF(int, 0)
254 AC_CHECK_SIZEOF(long, 0)
255 dnl AC_CHECK_SIZEOF(long long, 0)
257 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
258 [AC_TRY_COMPILE([#include <sys/types.h>
259 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
260 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
261 if test $ac_cv_struct_ut_type = yes; then
262 AC_DEFINE(HAVE_UT_TYPE)
265 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
266 [AC_TRY_COMPILE([#include <sys/types.h>
267 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
268 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
269 if test $ac_cv_struct_ut_host = yes; then
270 AC_DEFINE(HAVE_UT_HOST)
273 dnl Checks for library functions.
275 AC_PROG_GCC_TRADITIONAL
278 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
280 dnl Now check for pthreads -- set up variables so that the compiler will be run
281 dnl with proper flags for pthread programs
282 save_LDFLAGS=$LDFLAGS
283 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
285 LIBS="$PTHREAD_LIBS $LIBS"
287 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
288 dnl we need to include pthread.h
289 dnl AC_CHECK_FUNCS(pthread_cancel)
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 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
310 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
311 [AC_TRY_LINK([#include <pthread.h>],
312 [ /* The GNU C library defines this for functions which it implements
313 to always fail with ENOSYS. Some functions are actually named
314 something starting with __ and the normal name is an alias. */
315 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
318 pthread_create(NULL, NULL, NULL, NULL);
320 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
321 if test "$ac_cv_func_pthread_create" = yes; then
322 TARGETS="client server utils serv_modules"
323 if test "x$enable_threaded_client" != xno; then
324 AC_DEFINE(THREADED_CLIENT)
325 CLIENT_PTLIBS=$PTHREAD_LIBS
326 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
331 if test "x$CX" != x.ro; then
332 CL_LIBOBJS='$(LIBOBJS)'
336 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
337 LDFLAGS=$save_LDFLAGS
340 AC_REPLACE_FUNCS(snprintf getutline)
342 dnl Done! Now write the Makefile and sysdep.h
350 AC_SUBST(chkpwd_LIBS)
352 AC_SUBST(SERVER_LDFLAGS)
354 AC_SUBST(LINK_SHARED)
355 AC_SUBST(PTHREAD_DEFS)
356 AC_SUBST(PTHREAD_LIBS)
357 AC_SUBST(CLIENT_PTLIBS)
361 AC_CONFIG_HEADER(sysdep.h)
362 AC_OUTPUT(Makefile weekly)