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)'
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)])
23 dnl By default, we only build the client (citadel and whobbs) unless we can
24 dnl figure out how to build with POSIX threads.
29 PTHREAD_DEFS=-D_REENTRANT
30 LINK_SHARED='$(CC) -shared'
32 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
33 dnl for dlopen(), and has a wrapper script to link with shared libs.
34 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
36 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
38 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
41 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
43 dnl Digital Unix has an odd way to build for pthreads, and we can't
44 dnl build pthreads programs with gcc due to header problems.
46 test -z "$CC" && CC=cc
48 SERVER_LDFLAGS=-pthread
51 dnl FreeBSD is similar to Digital UNIX:
53 if test "$with_kthread" = yes; then
54 SERVER_LDFLAGS=-kthread
56 SERVER_LDFLAGS=-pthread
59 PTHREAD_DEFS=-D_THREAD_SAFE
62 SERVER_LDFLAGS=-pthread
65 LINK_SHARED="ld -x -Bshareable"
69 dnl Checks for programs.
72 dnl Set up system-dependent compiler flags.
73 if test "$GCC" = yes; then
74 CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
82 SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
89 missing_dir=`cd $ac_aux_dir && pwd`
90 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
92 dnl Checks for system services.
95 dnl Checks for libraries.
97 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
98 dnl Makefile only passes $(LIBS) to that target. If other programs start
99 dnl requiring additional libraries, we'll have to use other variables, as is
100 dnl done with curses.
102 dnl We want to test for the following in libc before checking for their
103 dnl respective libraries, because some systems (like Irix) have both, and the
104 dnl non-libc versions may be broken.
105 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
107 if test "$ac_cv_func_gethostbyname" = no; then
108 AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
111 if test "$ac_cv_func_connect" = no; then
112 AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
115 if test "$ac_cv_func_dlopen" = no; then
116 AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
117 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
120 dnl Determine the system's authentication capabilities, if autologin is
121 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
122 dnl (Linux shadow passwords)
123 if test "$enable_autologin" != no; then
124 if test "$with_pam" = yes; then
126 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
128 AC_CHECK_FUNCS(pam_start)
129 test "$enable_chkpwd" != no && LIBS=$save_LIBS
131 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
133 AC_SEARCH_LIBS(getspnam, shadow, [
134 if test "$ac_cv_search_getspnam" = -lshadow; then
135 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
137 test "$enable_chkpwd" != no && LIBS=$save_LIBS
138 if test "$ac_cv_func_crypt" = no; then
139 AC_CHECK_LIB(crypt, crypt, [
140 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
141 test "$enable_chkpwd" = no && \
142 LIBS="-lcrypt $LIBS"])
145 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
146 AC_DEFINE(ENABLE_AUTOLOGIN)
147 if test "$enable_chkpwd" != no; then
148 AC_DEFINE(ENABLE_CHKPWD)
156 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
157 AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
160 AC_CHECK_LIB(termcap, tgetent, [LIBS="$LIBS -ltermcap"
162 AC_CHECK_LIB(curses, initscr, CURSES="-lcurses $CURSES", [
163 AC_CHECK_LIB(ncurses, initscr, CURSES="-lncurses")])
166 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
167 dnl which the -pthread flag takes care of this.)
168 if test "$check_pthread" != no; then
169 AC_CHECK_LIB(pthread, pthread_create)
170 AC_CHECK_LIB(pthreads, pthread_create)
173 dnl Checks for header files.
177 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
178 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)
180 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
181 dnl include pthread.h:
182 save_CPPFLAGS=$CPPFLAGS
183 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
184 AC_CHECK_HEADERS(pthread.h)
185 CPPFLAGS=$save_CPPFLAGS
187 dnl Checks for typedefs, structures, and compiler characteristics.
194 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
195 [AC_TRY_COMPILE([#include <sys/types.h>
196 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
197 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
198 if test $ac_cv_struct_ut_type = yes; then
199 AC_DEFINE(HAVE_UT_TYPE)
202 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
203 [AC_TRY_COMPILE([#include <sys/types.h>
204 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
205 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
206 if test $ac_cv_struct_ut_host = yes; then
207 AC_DEFINE(HAVE_UT_HOST)
210 dnl Checks for library functions.
212 AC_PROG_GCC_TRADITIONAL
215 AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
217 dnl Now check for pthreads -- set up variables so that the compiler will be run
218 dnl with proper flags for pthread programs
219 save_LDFLAGS=$LDFLAGS
220 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
222 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
223 dnl we need to include pthread.h
224 dnl AC_CHECK_FUNCS(pthread_cancel)
226 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
227 [AC_TRY_LINK([#include <pthread.h>],
230 /* The GNU C library defines this for functions which it implements
231 to always fail with ENOSYS. Some functions are actually named
232 something starting with __ and the normal name is an alias. */
233 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
236 pthread_cancel(thread);
238 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
239 if test "$ac_cv_func_pthread_cancel" = yes; then
240 AC_DEFINE(HAVE_PTHREAD_CANCEL)
243 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
245 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
246 [AC_TRY_LINK([#include <pthread.h>],
247 [ /* The GNU C library defines this for functions which it implements
248 to always fail with ENOSYS. Some functions are actually named
249 something starting with __ and the normal name is an alias. */
250 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
253 pthread_create(NULL, NULL, NULL, NULL);
255 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
256 if test "$ac_cv_func_pthread_create" = yes; then
257 TARGETS="client server utils serv_modules"
260 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
261 LDFLAGS=$save_LDFLAGS
263 AC_REPLACE_FUNCS(snprintf getutline)
265 dnl Done! Now write the Makefile and sysdep.h
272 AC_SUBST(chkpwd_LIBS)
274 AC_SUBST(SERVER_LDFLAGS)
277 AC_SUBST(LINK_SHARED)
278 AC_SUBST(PTHREAD_DEFS)
279 AC_CONFIG_HEADER(sysdep.h)
280 AC_OUTPUT(Makefile weekly)