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(icq, [ --enable-icq include server ICQ support], [
16 if test "x$enableval" = xyes; then
17 SERV_ICQ='modules/serv_icq$(SO)'
19 AC_ARG_ENABLE(threaded-client, [ --disable-threaded-client
20 disable multithreaded client])
22 AC_ARG_WITH(pam, [ --with-pam use PAM if present (see PAM.txt before you try this)])
23 AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
25 dnl By default, we only build the client (citadel and whobbs) unless we can
26 dnl figure out how to build with POSIX threads.
31 PTHREAD_DEFS=-D_REENTRANT
32 LINK_SHARED='$(CC) -shared'
34 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
35 dnl for dlopen(), and has a wrapper script to link with shared libs.
36 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
38 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
40 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
43 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
45 dnl Digital Unix has an odd way to build for pthreads, and we can't
46 dnl build pthreads programs with gcc due to header problems.
48 test -z "$CC" && CC=cc
53 dnl FreeBSD is similar to Digital UNIX:
55 if test "$with_kthread" = yes; then
61 PTHREAD_DEFS=-D_THREAD_SAFE
67 LINK_SHARED="ld -x -Bshareable"
70 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
74 dnl Checks for programs.
77 dnl Set up system-dependent compiler flags.
78 if test "$GCC" = yes; then
81 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
84 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
88 CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
92 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
93 SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
100 missing_dir=`cd $ac_aux_dir && pwd`
101 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
103 dnl Checks for system services.
106 dnl Checks for libraries.
108 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
109 dnl Makefile only passes $(LIBS) to that target. If other programs start
110 dnl requiring additional libraries, we'll have to use other variables, as is
111 dnl done with curses.
113 dnl We want to test for the following in libc before checking for their
114 dnl respective libraries, because some systems (like Irix) have both, and the
115 dnl non-libc versions may be broken.
116 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
118 if test "$ac_cv_func_gethostbyname" = no; then
119 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
122 if test "$ac_cv_func_connect" = no; then
123 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
126 if test "$ac_cv_func_dlopen" = no; then
127 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
128 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
131 dnl Determine the system's authentication capabilities, if autologin is
132 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
133 dnl (Linux shadow passwords)
134 if test "$enable_autologin" != no; then
135 if test "$with_pam" = yes; then
137 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
139 AC_CHECK_FUNCS(pam_start)
140 test "$enable_chkpwd" != no && LIBS=$save_LIBS
142 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
144 AC_SEARCH_LIBS(getspnam, shadow, [
145 if test "$ac_cv_search_getspnam" = -lshadow; then
146 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
148 test "$enable_chkpwd" != no && LIBS=$save_LIBS
149 if test "$ac_cv_func_crypt" = no; then
150 AC_CHECK_LIB(crypt, crypt, [
151 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
152 test "$enable_chkpwd" = no && \
153 LIBS="-lcrypt $LIBS"])
156 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
157 AC_DEFINE(ENABLE_AUTOLOGIN)
158 if test "$enable_chkpwd" != no; then
159 AC_DEFINE(ENABLE_CHKPWD)
167 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
168 AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
170 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
171 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
175 AC_SEARCH_LIBS(tgetent, [curses termcap])
176 AC_SEARCH_LIBS(initscr, [curses ncurses])
180 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
181 dnl which the -pthread flag takes care of this.)
182 if test "$check_pthread" != no; then
183 AC_CHECK_LIB(pthread, pthread_create,
184 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
185 AC_CHECK_LIB(pthreads, pthread_create,
186 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
189 dnl Checks for header files.
193 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
194 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)
196 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
197 dnl include pthread.h:
198 save_CPPFLAGS=$CPPFLAGS
199 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
200 AC_CHECK_HEADERS(pthread.h)
201 CPPFLAGS=$save_CPPFLAGS
203 dnl Checks for typedefs, structures, and compiler characteristics.
210 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
211 [AC_TRY_COMPILE([#include <sys/types.h>
212 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
213 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
214 if test $ac_cv_struct_ut_type = yes; then
215 AC_DEFINE(HAVE_UT_TYPE)
218 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
219 [AC_TRY_COMPILE([#include <sys/types.h>
220 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
221 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
222 if test $ac_cv_struct_ut_host = yes; then
223 AC_DEFINE(HAVE_UT_HOST)
226 dnl Checks for library functions.
228 AC_PROG_GCC_TRADITIONAL
231 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror)
233 dnl Now check for pthreads -- set up variables so that the compiler will be run
234 dnl with proper flags for pthread programs
235 save_LDFLAGS=$LDFLAGS
236 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
238 LIBS="$PTHREAD_LIBS $LIBS"
240 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
241 dnl we need to include pthread.h
242 dnl AC_CHECK_FUNCS(pthread_cancel)
244 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
245 [AC_TRY_LINK([#include <pthread.h>],
248 /* The GNU C library defines this for functions which it implements
249 to always fail with ENOSYS. Some functions are actually named
250 something starting with __ and the normal name is an alias. */
251 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
254 pthread_cancel(thread);
256 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
257 if test "$ac_cv_func_pthread_cancel" = yes; then
258 AC_DEFINE(HAVE_PTHREAD_CANCEL)
261 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
263 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
264 [AC_TRY_LINK([#include <pthread.h>],
265 [ /* The GNU C library defines this for functions which it implements
266 to always fail with ENOSYS. Some functions are actually named
267 something starting with __ and the normal name is an alias. */
268 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
271 pthread_create(NULL, NULL, NULL, NULL);
273 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
274 if test "$ac_cv_func_pthread_create" = yes; then
275 TARGETS="client server utils serv_modules"
276 if test "x$enable_threaded_client" != xno; then
277 AC_DEFINE(THREADED_CLIENT)
278 CLIENT_PTLIBS=$PTHREAD_LIBS
279 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
284 if test "x$CX" != x.ro; then
285 CL_LIBOBJS='$(LIBOBJS)'
289 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
290 LDFLAGS=$save_LDFLAGS
293 AC_REPLACE_FUNCS(snprintf getutline)
295 dnl Done! Now write the Makefile and sysdep.h
303 AC_SUBST(chkpwd_LIBS)
305 AC_SUBST(SERVER_LDFLAGS)
308 AC_SUBST(LINK_SHARED)
309 AC_SUBST(PTHREAD_DEFS)
310 AC_SUBST(PTHREAD_LIBS)
311 AC_SUBST(CLIENT_PTLIBS)
314 AC_CONFIG_HEADER(sysdep.h)
315 AC_OUTPUT(Makefile weekly)