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)])
21 dnl By default, we only build the client (citadel and whobbs) unless we can
22 dnl figure out how to build with POSIX threads.
27 PTHREAD_DEFS=-D_REENTRANT
28 LINK_SHARED='$(CC) -shared'
30 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
31 dnl for dlopen(), and has a wrapper script to link with shared libs.
32 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
34 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
36 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
39 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
41 dnl Digital Unix has an odd way to build for pthreads, and we can't
42 dnl build pthreads programs with gcc due to header problems.
44 test -z "$CC" && CC=cc
49 dnl FreeBSD is similar to Digital UNIX:
51 if test "$with_kthread" = yes; then
57 PTHREAD_DEFS=-D_THREAD_SAFE
63 LINK_SHARED="ld -x -Bshareable"
66 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
70 dnl Checks for programs.
73 dnl Set up system-dependent compiler flags.
74 if test "$GCC" = yes; then
77 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
80 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
84 CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
88 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
89 SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
97 missing_dir=`cd $ac_aux_dir && pwd`
98 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
100 dnl Checks for system services.
103 dnl Checks for libraries.
105 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
106 dnl Makefile only passes $(LIBS) to that target. If other programs start
107 dnl requiring additional libraries, we'll have to use other variables, as is
108 dnl done with curses.
110 dnl We want to test for the following in libc before checking for their
111 dnl respective libraries, because some systems (like Irix) have both, and the
112 dnl non-libc versions may be broken.
113 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
115 if test "$ac_cv_func_gethostbyname" = no; then
116 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
119 if test "$ac_cv_func_connect" = no; then
120 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
123 if test "$ac_cv_func_dlopen" = no; then
124 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
125 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
128 dnl Determine the system's authentication capabilities, if autologin is
129 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
130 dnl (Linux shadow passwords)
131 if test "$enable_autologin" != no; then
132 if test "$with_pam" = yes; then
134 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
136 AC_CHECK_FUNCS(pam_start)
137 test "$enable_chkpwd" != no && LIBS=$save_LIBS
139 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
141 AC_SEARCH_LIBS(getspnam, shadow, [
142 if test "$ac_cv_search_getspnam" = -lshadow; then
143 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
145 test "$enable_chkpwd" != no && LIBS=$save_LIBS
146 if test "$ac_cv_func_crypt" = no; then
147 AC_CHECK_LIB(crypt, crypt, [
148 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
149 test "$enable_chkpwd" = no && \
150 LIBS="-lcrypt $LIBS"])
153 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
154 AC_DEFINE(ENABLE_AUTOLOGIN)
155 if test "$enable_chkpwd" != no; then
156 AC_DEFINE(ENABLE_CHKPWD)
164 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
165 AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
167 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
168 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
172 AC_SEARCH_LIBS(tgetent, [curses termcap])
173 AC_SEARCH_LIBS(initscr, [curses ncurses])
177 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
178 dnl which the -pthread flag takes care of this.)
179 if test "$check_pthread" != no; then
180 AC_CHECK_LIB(pthread, pthread_create,
181 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
182 AC_CHECK_LIB(pthreads, pthread_create,
183 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
186 dnl Checks for header files.
190 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
191 AC_CHECK_HEADERS(curses.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h utmpx.h paths.h)
193 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
194 dnl include pthread.h:
195 save_CPPFLAGS=$CPPFLAGS
196 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
197 AC_CHECK_HEADERS(pthread.h)
198 CPPFLAGS=$save_CPPFLAGS
200 dnl Checks for typedefs, structures, and compiler characteristics.
207 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
208 [AC_TRY_COMPILE([#include <sys/types.h>
209 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
210 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
211 if test $ac_cv_struct_ut_type = yes; then
212 AC_DEFINE(HAVE_UT_TYPE)
215 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
216 [AC_TRY_COMPILE([#include <sys/types.h>
217 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
218 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
219 if test $ac_cv_struct_ut_host = yes; then
220 AC_DEFINE(HAVE_UT_HOST)
223 dnl Checks for library functions.
225 AC_PROG_GCC_TRADITIONAL
228 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
230 dnl Now check for pthreads -- set up variables so that the compiler will be run
231 dnl with proper flags for pthread programs
232 save_LDFLAGS=$LDFLAGS
233 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
235 LIBS="$PTHREAD_LIBS $LIBS"
237 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
238 dnl we need to include pthread.h
239 dnl AC_CHECK_FUNCS(pthread_cancel)
241 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
242 [AC_TRY_LINK([#include <pthread.h>],
245 /* The GNU C library defines this for functions which it implements
246 to always fail with ENOSYS. Some functions are actually named
247 something starting with __ and the normal name is an alias. */
248 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
251 pthread_cancel(thread);
253 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
254 if test "$ac_cv_func_pthread_cancel" = yes; then
255 AC_DEFINE(HAVE_PTHREAD_CANCEL)
258 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
260 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
261 [AC_TRY_LINK([#include <pthread.h>],
262 [ /* The GNU C library defines this for functions which it implements
263 to always fail with ENOSYS. Some functions are actually named
264 something starting with __ and the normal name is an alias. */
265 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
268 pthread_create(NULL, NULL, NULL, NULL);
270 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
271 if test "$ac_cv_func_pthread_create" = yes; then
272 TARGETS="client server utils serv_modules"
273 if test "x$enable_threaded_client" != xno; then
274 AC_DEFINE(THREADED_CLIENT)
275 CLIENT_PTLIBS=$PTHREAD_LIBS
276 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
281 if test "x$CX" != x.ro; then
282 CL_LIBOBJS='$(LIBOBJS)'
286 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
287 LDFLAGS=$save_LDFLAGS
290 AC_REPLACE_FUNCS(snprintf getutline)
292 dnl Done! Now write the Makefile and sysdep.h
300 AC_SUBST(chkpwd_LIBS)
302 AC_SUBST(SERVER_LDFLAGS)
304 AC_SUBST(LINK_SHARED)
305 AC_SUBST(PTHREAD_DEFS)
306 AC_SUBST(PTHREAD_LIBS)
307 AC_SUBST(CLIENT_PTLIBS)
310 AC_CONFIG_HEADER(sysdep.h)
311 AC_OUTPUT(Makefile weekly)