1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [6.15], [http://uncensored.citadel.org/])
5 AC_REVISION([$Revision$])
6 AC_CONFIG_SRCDIR([citserver.c])
7 AC_PREFIX_DEFAULT(/usr/local/citadel)
8 if test "$prefix" = NONE; then
9 AC_DEFINE_UNQUOTED(BBSDIR, "$ac_default_prefix")
11 AC_DEFINE_UNQUOTED(BBSDIR, "$prefix")
14 AC_ARG_ENABLE(autologin, [ --disable-autologin disable autologin (default is enabled if possible)])
15 AC_ARG_ENABLE(chkpwd, [ --disable-chkpwd don't build 'chkpwd'])
17 AC_ARG_ENABLE(threaded-client, [ --disable-threaded-client
18 disable multithreaded client])
20 AC_ARG_ENABLE(pie, [ --enable-pie build position-independent executables])
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)])
24 AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
26 [ --with-ssl=PATH Specify path to OpenSSL installation ],
28 if test "x$withval" != "xno" ; then
33 AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
35 AC_ARG_WITH(with_zlib, [ --with-zlib use zlib compression if present])
36 AC_ARG_WITH(with_ldap, [ --with-ldap use OpenLDAP client library])
37 AC_ARG_WITH(with_libical, [ --with-libical use libical calendaring library])
38 AC_ARG_WITH(with_newt, [ --with-newt use newt window library])
40 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
44 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
45 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
48 test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
51 dnl By default, we only build the client (citadel and whobbs) unless we can
52 dnl figure out how to build with POSIX threads.
56 PTHREAD_DEFS=-D_REENTRANT
58 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
59 dnl for dlopen(), and has a wrapper script to link with shared libs.
60 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
62 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
63 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
66 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
68 dnl Curses support on Mac OS X is kind of screwed at the moment.
70 AC_DEFINE(DISABLE_CURSES)
72 dnl Digital Unix has an odd way to build for pthreads, and we can't
73 dnl build pthreads programs with gcc due to header problems.
75 test -z "$CC" && CC=cc
76 LIBS="-lpthread -lexc $LIBS"
79 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
81 if test "$with_kthread" = yes; then
87 PTHREAD_DEFS=-D_THREAD_SAFE
95 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
98 SERVER_LDFLAGS="-Wl,-subsystem,windows"
101 DEFS="$DEFS $PTHREAD_DEFS"
103 dnl Checks for programs.
106 dnl Set up system-dependent compiler flags.
107 if test "$GCC" = yes; then
109 *-*-solaris*|alpha*-dec-osf*)
110 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
113 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
118 if test "x$enable_pie" = xyes; then
119 save_CFLAGS="$CFLAGS"
120 save_LDFLAGS="$LDFLAGS"
121 CFLAGS="$CFLAGS -fpie"
122 LDFLAGS="$LDFLAGS -pie -fpie"
123 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
125 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
126 if test $ac_cv_pie_fpie = no; then
127 CFLAGS="$save_CFLAGS"
128 LDFLAGS="$save_LDFLAGS"
134 missing_dir=`cd $ac_aux_dir && pwd`
135 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
136 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
138 dnl Checks for system services.
140 dnl Check the size of various builtin types; see typesize.h (error)
141 AC_CHECK_SIZEOF(char, 0)
142 AC_CHECK_SIZEOF(short, 0)
143 AC_CHECK_SIZEOF(int, 0)
144 AC_CHECK_SIZEOF(long, 0)
145 dnl AC_CHECK_SIZEOF(long long, 0)
147 dnl Checks for libraries.
149 dnl We want to test for the following in libc before checking for their
150 dnl respective libraries, because some systems (like Irix) have both, and the
151 dnl non-libc versions may be broken.
152 AC_CHECK_FUNCS(crypt gethostbyname connect)
154 if test "$ac_cv_func_gethostbyname" = no; then
155 AC_CHECK_LIB(nsl, gethostbyname)
158 if test "$ac_cv_func_connect" = no; then
159 AC_CHECK_LIB(socket, connect)
162 dnl Check for Solaris realtime support
163 AC_CHECK_LIB(rt, sched_yield)
165 dnl Determine the system's authentication capabilities, if autologin is
166 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
167 dnl (Linux shadow passwords)
168 if test "$enable_autologin" != no; then
169 if test "$with_pam" = yes; then
171 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
173 AC_CHECK_FUNCS(pam_start)
174 test "$enable_chkpwd" != no && LIBS=$save_LIBS
176 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
178 AC_SEARCH_LIBS(getspnam, shadow, [
179 if test "$ac_cv_search_getspnam" = -lshadow; then
180 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
182 test "$enable_chkpwd" != no && LIBS=$save_LIBS
183 if test "$ac_cv_func_crypt" = no; then
184 AC_CHECK_LIB(crypt, crypt, [
185 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
186 test "$enable_chkpwd" = no && \
187 LIBS="-lcrypt $LIBS"])
190 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
191 AC_DEFINE(ENABLE_AUTOLOGIN)
192 if test "$enable_chkpwd" != no; then
193 AC_DEFINE(ENABLE_CHKPWD)
201 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
202 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
204 if test "x$with_ncurses" != "xno"; then
205 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
206 AC_SEARCH_LIBS(scrollok, [ncurses curses])
207 AC_SEARCH_LIBS(initscr, [ncurses curses])
209 AC_SEARCH_LIBS(tgetent, [curses termcap])
210 AC_SEARCH_LIBS(initscr, [curses])
212 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
214 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
215 dnl which the -pthread flag takes care of this.)
216 if test "$check_pthread" != no; then
217 AC_CHECK_LIB(pthread, pthread_create)
218 AC_CHECK_LIB(pthreads, pthread_create)
221 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
223 # The big search for OpenSSL
224 if test "$with_ssl" != "no"; then
226 saved_LDFLAGS="$LDFLAGS"
227 saved_CFLAGS="$CFLAGS"
228 if test "x$prefix" != "xNONE"; then
229 tryssldir="$tryssldir $prefix"
231 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
232 for ssldir in $tryssldir "" /usr /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/pkg /opt /opt/openssl ; do
233 CFLAGS="$saved_CFLAGS"
234 LDFLAGS="$saved_LDFLAGS"
235 LIBS="$saved_LIBS -lssl -lcrypto"
237 # Skip directories if they don't exist
238 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
241 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
242 # Try to use $ssldir/lib if it exists, otherwise
244 if test -d "$ssldir/lib" ; then
245 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
246 if test ! -z "$need_dash_r" ; then
247 LDFLAGS="-R$ssldir/lib $LDFLAGS"
250 LDFLAGS="-L$ssldir $saved_LDFLAGS"
251 if test ! -z "$need_dash_r" ; then
252 LDFLAGS="-R$ssldir $LDFLAGS"
255 # Try to use $ssldir/include if it exists, otherwise
257 if test -d "$ssldir/include" ; then
258 CFLAGS="-I$ssldir/include $saved_CFLAGS"
260 CFLAGS="-I$ssldir $saved_CFLAGS"
264 # Basic test to check for compatible version and correct linking
265 # *does not* test for RSA - that comes later.
269 #include <openssl/rand.h>
273 memset(a, 0, sizeof(a));
274 RAND_add(a, sizeof(a), sizeof(a));
275 return(RAND_status() <= 0);
284 if test ! -z "$found_crypto" ; then
289 if test -z "$ssldir" ; then
293 if test ! -z "$found_crypto" ; then
294 ac_cv_openssldir=$ssldir
296 ac_cv_openssldir="no"
300 LDFLAGS="$saved_LDFLAGS"
301 CFLAGS="$saved_CFLAGS"
303 if test "x$ac_cv_openssldir" != "xno" ; then
304 AC_DEFINE(HAVE_OPENSSL)
305 LIBS="-lssl -lcrypto $LIBS"
306 dnl Need to recover ssldir - test above runs in subshell
307 ssldir=$ac_cv_openssldir
308 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
309 # Try to use $ssldir/lib if it exists, otherwise
311 if test -d "$ssldir/lib" ; then
312 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
313 if test ! -z "$need_dash_r" ; then
314 LDFLAGS="-R$ssldir/lib $LDFLAGS"
317 LDFLAGS="-L$ssldir $saved_LDFLAGS"
318 if test ! -z "$need_dash_r" ; then
319 LDFLAGS="-R$ssldir $LDFLAGS"
322 # Try to use $ssldir/include if it exists, otherwise
324 if test -d "$ssldir/include" ; then
325 CFLAGS="-I$ssldir/include $saved_CFLAGS"
327 CFLAGS="-I$ssldir $saved_CFLAGS"
333 if test "x$with_db" != xno; then
334 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
338 if test -d "$db_dir/include/db4"; then
339 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
341 elif test "$db_dir"; then
342 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
343 elif test -d /usr/include/db4; then
344 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
349 AC_CHECK_DB([db db-4.1 db-4 db4],
351 DATABASE=database_sleepycat.c
353 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
354 library. Use --with-db=PATH to specify
360 dnl Checks for the zlib compression library.
361 if test "x$with_zlib" != xno ; then
362 AC_CHECK_HEADERS(zlib.h,
363 [AC_CHECK_LIB(z, zlibVersion,
368 if test "x$ok_zlib" = xyes ; then
369 SERVER_LIBS="-lz $SERVER_LIBS"
376 dnl Checks for the OpenLDAP client library.
377 if test "x$with_ldap" != xno ; then
378 AC_CHECK_HEADERS(ldap.h,
379 [AC_CHECK_LIB(ldap, ldap_init,
384 if test "x$ok_ldap" = xyes ; then
385 SERVER_LIBS="-lldap $SERVER_LIBS"
392 dnl Checks for the newt window library.
393 if test "x$with_newt" != xno ; then
394 AC_CHECK_HEADERS(newt.h,
395 [AC_CHECK_LIB(newt, newtInit,
400 if test "x$ok_newt" = xyes ; then
401 SETUP_LIBS="-lnewt $SETUP_LIBS"
410 dnl Checks for the libical calendaring library.
411 if test "x$with_libical" != xno ; then
412 AC_CHECK_HEADERS(ical.h,
413 [AC_CHECK_LIB(ical, icalcomponent_new,
418 if test "x$ok_libical" = xyes ; then
426 sscanf(ICAL_VERSION, "%f", &v);
427 printf("libical version: %0.2f\n", v);
431 printf("This version is ok.\n");
434 printf("libical 0.24 or newer required.\n");
435 printf("Citadel will be built without calendar support.\n");
440 SERVER_LIBS="-lical $SERVER_LIBS"
441 AC_DEFINE(HAVE_LIBICAL)
449 dnl Checks for header files.
455 dnl TODO: for the DB header checks, we should check whether the headers
456 dnl define db_env_create, somehow
458 AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h malloc.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db4/db.h pthread.h netinet/in.h arpa/nameser.h arpa/nameser_compat.h)
461 dnl need to check if this is actually compilable, sometimes there are
462 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
464 if test "x$with_ncurses" != xno; then
465 AC_CHECK_HEADERS(ncurses.h,,,[ ])
468 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
469 [#ifdef HAVE_SYS_TYPES_H
470 #include <sys/types.h>
472 #ifdef HAVE_NETINET_IN_H
473 #include <netinet/in.h>
475 #ifdef HAVE_ARPA_NAMESER_H
476 #include <arpa/nameser.h>
480 dnl Checks for typedefs, structures, and compiler characteristics.
486 dnl defined in acinclude.m4:
489 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
490 [AC_TRY_COMPILE([#include <sys/types.h>
491 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
492 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
493 if test $ac_cv_struct_ut_type = yes; then
494 AC_DEFINE(HAVE_UT_TYPE)
497 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
498 [AC_TRY_COMPILE([#include <sys/types.h>
499 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
500 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
501 if test $ac_cv_struct_ut_host = yes; then
502 AC_DEFINE(HAVE_UT_HOST)
505 dnl Checks for library functions.
507 AC_PROG_GCC_TRADITIONAL
510 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
512 dnl Now check for pthreads
514 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
515 dnl we need to include pthread.h
517 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
518 [AC_TRY_LINK([#include <pthread.h>],
521 /* The GNU C library defines this for functions which it implements
522 to always fail with ENOSYS. Some functions are actually named
523 something starting with __ and the normal name is an alias. */
524 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
527 pthread_cancel(thread);
529 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
530 if test "$ac_cv_func_pthread_cancel" = yes; then
531 AC_DEFINE(HAVE_PTHREAD_CANCEL)
534 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
535 [AC_TRY_LINK([#include <pthread.h>],
536 [ /* The GNU C library defines this for functions which it implements
537 to always fail with ENOSYS. Some functions are actually named
538 something starting with __ and the normal name is an alias. */
539 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
542 pthread_create(NULL, NULL, NULL, NULL);
544 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
545 if test "$ac_cv_func_pthread_create" = yes; then
546 test "$DATABASE" && TARGETS="client server utils"
547 if test "x$enable_threaded_client" != xno; then
548 AC_DEFINE(THREADED_CLIENT)
552 AC_REPLACE_FUNCS(snprintf getutline)
554 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
556 # echo $ECHO_N "opening your window... $ECHO_C" >&6
558 # month=`date | cut -f 2 -d ' '`
561 # ac_cv_weather="it's cold!"
564 # ac_cv_weather="it's wet!"
567 # ac_cv_weather="it's hot!"
570 # ac_cv_weather="it's cool"
572 # May | Jun | Sep | *)
573 # ac_cv_weather="it's fine"
578 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
579 number=`date | cut -c 19`
582 ac_cv_under_the_bed="lunatics and monsters found"
585 ac_cv_under_the_bed="dust bunnies found"
590 dnl Done! Now write the Makefile and sysdep.h
594 AC_SUBST(chkpwd_LIBS)
597 AC_SUBST(SERVER_LDFLAGS)
598 AC_SUBST(SERVER_LIBS)
600 AC_CONFIG_HEADER(sysdep.h)
601 AC_CONFIG_FILES([Makefile])
604 if test -z "$DATABASE"; then
605 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
610 echo "... On many operating systems, you must use GNU make (gmake) to compile"