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")
159 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
160 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
163 AC_CHECK_LIB(termcap, tgetent, [LIBS="$LIBS -ltermcap"
165 AC_CHECK_LIB(curses, initscr, CURSES="-lcurses $CURSES", [
166 AC_CHECK_LIB(ncurses, initscr, CURSES="-lncurses")])
169 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
170 dnl which the -pthread flag takes care of this.)
171 if test "$check_pthread" != no; then
172 AC_CHECK_LIB(pthread, pthread_create)
173 AC_CHECK_LIB(pthreads, pthread_create)
176 dnl Checks for header files.
180 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
181 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)
183 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
184 dnl include pthread.h:
185 save_CPPFLAGS=$CPPFLAGS
186 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
187 AC_CHECK_HEADERS(pthread.h)
188 CPPFLAGS=$save_CPPFLAGS
190 dnl Checks for typedefs, structures, and compiler characteristics.
197 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
198 [AC_TRY_COMPILE([#include <sys/types.h>
199 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
200 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
201 if test $ac_cv_struct_ut_type = yes; then
202 AC_DEFINE(HAVE_UT_TYPE)
205 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
206 [AC_TRY_COMPILE([#include <sys/types.h>
207 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
208 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
209 if test $ac_cv_struct_ut_host = yes; then
210 AC_DEFINE(HAVE_UT_HOST)
213 dnl Checks for library functions.
215 AC_PROG_GCC_TRADITIONAL
218 AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
220 dnl Now check for pthreads -- set up variables so that the compiler will be run
221 dnl with proper flags for pthread programs
222 save_LDFLAGS=$LDFLAGS
223 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
225 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
226 dnl we need to include pthread.h
227 dnl AC_CHECK_FUNCS(pthread_cancel)
229 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
230 [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_cancel(thread);
241 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
242 if test "$ac_cv_func_pthread_cancel" = yes; then
243 AC_DEFINE(HAVE_PTHREAD_CANCEL)
246 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
248 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
249 [AC_TRY_LINK([#include <pthread.h>],
250 [ /* The GNU C library defines this for functions which it implements
251 to always fail with ENOSYS. Some functions are actually named
252 something starting with __ and the normal name is an alias. */
253 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
256 pthread_create(NULL, NULL, NULL, NULL);
258 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
259 if test "$ac_cv_func_pthread_create" = yes; then
260 TARGETS="client server utils serv_modules"
263 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
264 LDFLAGS=$save_LDFLAGS
266 AC_REPLACE_FUNCS(snprintf getutline)
268 dnl Done! Now write the Makefile and sysdep.h
276 AC_SUBST(chkpwd_LIBS)
278 AC_SUBST(SERVER_LDFLAGS)
281 AC_SUBST(LINK_SHARED)
282 AC_SUBST(PTHREAD_DEFS)
283 AC_CONFIG_HEADER(sysdep.h)
284 AC_OUTPUT(Makefile weekly)