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'])
14 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
15 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
17 dnl By default, we only build the client (citadel and whobbs) unless we can
18 dnl figure out how to build with POSIX threads.
23 PTHREAD_DEFS=-D_REENTRANT
24 LINK_SHARED='$(CC) -shared'
26 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
27 dnl for dlopen(), and has a wrapper script to link with shared libs.
28 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
30 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
32 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
35 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
37 dnl Digital Unix has an odd way to build for pthreads, and we can't
38 dnl build pthreads programs with gcc due to header problems.
40 test -z "$CC" && CC=cc
42 SERVER_LDFLAGS=-pthread
45 dnl FreeBSD is similar to Digital UNIX:
47 if test "$with_kthread" = yes; then
48 SERVER_LDFLAGS=-kthread
50 SERVER_LDFLAGS=-pthread
53 PTHREAD_DEFS=-D_THREAD_SAFE
56 SERVER_LDFLAGS=-pthread
59 LINK_SHARED="ld -x -Bshareable"
63 dnl Checks for programs.
66 dnl Set up system-dependent compiler flags.
67 if test "$GCC" = yes; then
68 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
76 SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
83 missing_dir=`cd $ac_aux_dir && pwd`
84 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
86 dnl Checks for system services.
89 dnl Checks for libraries.
91 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
92 dnl Makefile only passes $(LIBS) to that target. If other programs start
93 dnl requiring additional libraries, we'll have to use other variables, as is
96 dnl We want to test for the following in libc before checking for their
97 dnl respective libraries, because some systems (like Irix) have both, and the
98 dnl non-libc versions may be broken.
99 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
101 if test "$ac_cv_func_gethostbyname" = no; then
102 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
105 if test "$ac_cv_func_connect" = no; then
106 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
109 if test "$ac_cv_func_dlopen" = no; then
110 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
114 dnl Determine the system's authentication capabilities, if autologin is
115 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
116 dnl (Linux shadow passwords)
117 if test "$enable_autologin" != no; then
118 if test "$with_pam" = yes; then
120 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
122 AC_CHECK_FUNCS(pam_start)
123 test "$enable_chkpwd" != no && LIBS=$save_LIBS
125 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
126 AC_CHECK_LIB(shadow, getspnam)
127 if test "$ac_cv_func_crypt" = no; then
128 AC_CHECK_LIB(crypt, crypt, [chkpwd_LIBS=-lcrypt
129 test "$enable_chkpwd" = no && \
130 LIBS="-lcrypt $LIBS"])
133 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
134 AC_DEFINE(ENABLE_AUTOLOGIN)
135 if test "$enable_chkpwd" != no; then
136 AC_DEFINE(ENABLE_CHKPWD)
144 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
145 AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
148 AC_CHECK_LIB(termcap, tgetent, [LIBS="$LIBS -ltermcap"
150 AC_CHECK_LIB(curses, initscr, CURSES="-lcurses $CURSES", [
151 AC_CHECK_LIB(ncurses, initscr, CURSES="-lncurses")])
154 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
155 dnl which the -pthread flag takes care of this.)
156 if test "$check_pthread" != no; then
157 AC_CHECK_LIB(pthread, pthread_create)
158 AC_CHECK_LIB(pthreads, pthread_create)
161 dnl Checks for header files.
165 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
166 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 paths.h)
168 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
169 dnl include pthread.h:
170 save_CPPFLAGS=$CPPFLAGS
171 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
172 AC_CHECK_HEADERS(pthread.h)
173 CPPFLAGS=$save_CPPFLAGS
175 dnl Checks for typedefs, structures, and compiler characteristics.
182 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
183 [AC_TRY_COMPILE([#include <utmp.h>], [struct utmp ut; ut.ut_type;],
184 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
185 if test $ac_cv_struct_ut_type = yes; then
186 AC_DEFINE(HAVE_UT_TYPE)
189 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
190 [AC_TRY_COMPILE([#include <utmp.h>], [struct utmp ut; ut.ut_host;],
191 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
192 if test $ac_cv_struct_ut_host = yes; then
193 AC_DEFINE(HAVE_UT_HOST)
196 dnl Checks for library functions.
198 AC_PROG_GCC_TRADITIONAL
201 AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
203 dnl Now check for pthreads -- set up variables so that the compiler will be run
204 dnl with proper flags for pthread programs
205 save_LDFLAGS=$LDFLAGS
206 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
208 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
209 dnl we need to include pthread.h
210 dnl AC_CHECK_FUNCS(pthread_cancel)
212 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
213 [AC_TRY_LINK([#include <pthread.h>],
216 /* The GNU C library defines this for functions which it implements
217 to always fail with ENOSYS. Some functions are actually named
218 something starting with __ and the normal name is an alias. */
219 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
222 pthread_cancel(thread);
224 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
225 if test "$ac_cv_func_pthread_cancel" = yes; then
226 AC_DEFINE(HAVE_PTHREAD_CANCEL)
229 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
231 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
232 [AC_TRY_LINK([#include <pthread.h>],
233 [ /* The GNU C library defines this for functions which it implements
234 to always fail with ENOSYS. Some functions are actually named
235 something starting with __ and the normal name is an alias. */
236 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
239 pthread_create(NULL, NULL, NULL, NULL);
241 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
242 if test "$ac_cv_func_pthread_create" = yes; then
243 TARGETS="client server utils serv_modules"
246 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
247 LDFLAGS=$save_LDFLAGS
249 AC_REPLACE_FUNCS(snprintf getutline)
251 dnl Done! Now write the Makefile and sysdep.h
258 AC_SUBST(chkpwd_LIBS)
260 AC_SUBST(SERVER_LDFLAGS)
262 AC_SUBST(LINK_SHARED)
263 AC_SUBST(PTHREAD_DEFS)
264 AC_CONFIG_HEADER(sysdep.h)
265 AC_OUTPUT(Makefile weekly)