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 <utmp.h>], [struct utmp ut; ut.ut_type;],
196 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
197 if test $ac_cv_struct_ut_type = yes; then
198 AC_DEFINE(HAVE_UT_TYPE)
201 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
202 [AC_TRY_COMPILE([#include <utmp.h>], [struct utmp ut; ut.ut_host;],
203 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
204 if test $ac_cv_struct_ut_host = yes; then
205 AC_DEFINE(HAVE_UT_HOST)
208 dnl Checks for library functions.
210 AC_PROG_GCC_TRADITIONAL
213 AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
215 dnl Now check for pthreads -- set up variables so that the compiler will be run
216 dnl with proper flags for pthread programs
217 save_LDFLAGS=$LDFLAGS
218 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
220 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
221 dnl we need to include pthread.h
222 dnl AC_CHECK_FUNCS(pthread_cancel)
224 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
225 [AC_TRY_LINK([#include <pthread.h>],
228 /* The GNU C library defines this for functions which it implements
229 to always fail with ENOSYS. Some functions are actually named
230 something starting with __ and the normal name is an alias. */
231 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
234 pthread_cancel(thread);
236 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
237 if test "$ac_cv_func_pthread_cancel" = yes; then
238 AC_DEFINE(HAVE_PTHREAD_CANCEL)
241 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
243 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
244 [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_create(NULL, NULL, NULL, NULL);
253 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
254 if test "$ac_cv_func_pthread_create" = yes; then
255 TARGETS="client server utils serv_modules"
258 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
259 LDFLAGS=$save_LDFLAGS
261 AC_REPLACE_FUNCS(snprintf getutline)
263 dnl Done! Now write the Makefile and sysdep.h
270 AC_SUBST(chkpwd_LIBS)
272 AC_SUBST(SERVER_LDFLAGS)
275 AC_SUBST(LINK_SHARED)
276 AC_SUBST(PTHREAD_DEFS)
277 AC_CONFIG_HEADER(sysdep.h)
278 AC_OUTPUT(Makefile weekly)