1 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([Citadel/UX], [6.02], [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, [ --disable-pie don't 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_libical, [ --with-libical use libical calendaring library])
37 AC_ARG_WITH(with_newt, [ --with-newt use newt window library])
39 if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
43 test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
44 -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
47 test -d /usr/local/BerkeleyDB.4.1 && db_dir=/usr/local/BerkeleyDB.4.1
50 dnl By default, we only build the client (citadel and whobbs) unless we can
51 dnl figure out how to build with POSIX threads.
55 PTHREAD_DEFS=-D_REENTRANT
57 dnl BSDI 3.0 wants relocatable object modules instead of shared libs
58 dnl for dlopen(), and has a wrapper script to link with shared libs.
59 dnl Also has stupid non-reentrant gethostbyaddr() and friends.
61 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
62 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
65 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
67 dnl Curses support on Mac OS X is kind of screwed at the moment.
69 AC_DEFINE(DISABLE_CURSES)
71 dnl Digital Unix has an odd way to build for pthreads, and we can't
72 dnl build pthreads programs with gcc due to header problems.
74 test -z "$CC" && CC=cc
75 LIBS="-lpthread -lexc $LIBS"
78 dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
80 if test "$with_kthread" = yes; then
86 PTHREAD_DEFS=-D_THREAD_SAFE
94 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
97 SERVER_LDFLAGS="-Wl,-subsystem,windows"
100 DEFS="$DEFS $PTHREAD_DEFS"
102 dnl Checks for programs.
105 dnl Set up system-dependent compiler flags.
106 if test "$GCC" = yes; then
108 *-*-solaris*|alpha*-dec-osf*)
109 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
112 CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
117 if test "x$enable_pie" != xno; then
118 save_CFLAGS="$CFLAGS"
119 save_LDFLAGS="$LDFLAGS"
120 CFLAGS="$CFLAGS -fpie"
121 LDFLAGS="$LDFLAGS -pie -fpie"
122 AC_CACHE_CHECK([whether compiler accepts -pie -fpie], ac_cv_pie_fpie,
124 ac_cv_pie_fpie=yes, ac_cv_pie_fpie=no)])
125 if test $ac_cv_pie_fpie = no; then
126 CFLAGS="$save_CFLAGS"
127 LDFLAGS="$save_LDFLAGS"
133 missing_dir=`cd $ac_aux_dir && pwd`
134 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
135 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
137 dnl Checks for system services.
139 dnl Check the size of various builtin types; see typesize.h (error)
140 AC_CHECK_SIZEOF(char, 0)
141 AC_CHECK_SIZEOF(short, 0)
142 AC_CHECK_SIZEOF(int, 0)
143 AC_CHECK_SIZEOF(long, 0)
144 dnl AC_CHECK_SIZEOF(long long, 0)
146 dnl Checks for libraries.
148 dnl We want to test for the following in libc before checking for their
149 dnl respective libraries, because some systems (like Irix) have both, and the
150 dnl non-libc versions may be broken.
151 AC_CHECK_FUNCS(crypt gethostbyname connect)
153 if test "$ac_cv_func_gethostbyname" = no; then
154 AC_CHECK_LIB(nsl, gethostbyname)
157 if test "$ac_cv_func_connect" = no; then
158 AC_CHECK_LIB(socket, connect)
161 dnl Check for Solaris realtime support
162 AC_CHECK_LIB(rt, sched_yield)
164 dnl Determine the system's authentication capabilities, if autologin is
165 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
166 dnl (Linux shadow passwords)
167 if test "$enable_autologin" != no; then
168 if test "$with_pam" = yes; then
170 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
172 AC_CHECK_FUNCS(pam_start)
173 test "$enable_chkpwd" != no && LIBS=$save_LIBS
175 if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
177 AC_SEARCH_LIBS(getspnam, shadow, [
178 if test "$ac_cv_search_getspnam" = -lshadow; then
179 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
181 test "$enable_chkpwd" != no && LIBS=$save_LIBS
182 if test "$ac_cv_func_crypt" = no; then
183 AC_CHECK_LIB(crypt, crypt, [
184 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
185 test "$enable_chkpwd" = no && \
186 LIBS="-lcrypt $LIBS"])
189 if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
190 AC_DEFINE(ENABLE_AUTOLOGIN)
191 if test "$enable_chkpwd" != no; then
192 AC_DEFINE(ENABLE_CHKPWD)
200 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
201 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
203 if test "x$with_ncurses" != "xno"; then
204 AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
205 AC_SEARCH_LIBS(scrollok, [ncurses curses])
206 AC_SEARCH_LIBS(initscr, [ncurses curses])
208 AC_SEARCH_LIBS(tgetent, [curses termcap])
209 AC_SEARCH_LIBS(initscr, [curses])
211 AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
213 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
214 dnl which the -pthread flag takes care of this.)
215 if test "$check_pthread" != no; then
216 AC_CHECK_LIB(pthread, pthread_create)
217 AC_CHECK_LIB(pthreads, pthread_create)
220 test -d /usr/kerberos/include && CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
222 # The big search for OpenSSL
223 if test "$with_ssl" != "no"; then
225 saved_LDFLAGS="$LDFLAGS"
226 saved_CFLAGS="$CFLAGS"
227 if test "x$prefix" != "xNONE"; then
228 tryssldir="$tryssldir $prefix"
230 AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
231 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
232 CFLAGS="$saved_CFLAGS"
233 LDFLAGS="$saved_LDFLAGS"
234 LIBS="$saved_LIBS -lssl -lcrypto"
236 # Skip directories if they don't exist
237 if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
240 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
241 # Try to use $ssldir/lib if it exists, otherwise
243 if test -d "$ssldir/lib" ; then
244 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
245 if test ! -z "$need_dash_r" ; then
246 LDFLAGS="-R$ssldir/lib $LDFLAGS"
249 LDFLAGS="-L$ssldir $saved_LDFLAGS"
250 if test ! -z "$need_dash_r" ; then
251 LDFLAGS="-R$ssldir $LDFLAGS"
254 # Try to use $ssldir/include if it exists, otherwise
256 if test -d "$ssldir/include" ; then
257 CFLAGS="-I$ssldir/include $saved_CFLAGS"
259 CFLAGS="-I$ssldir $saved_CFLAGS"
263 # Basic test to check for compatible version and correct linking
264 # *does not* test for RSA - that comes later.
268 #include <openssl/rand.h>
272 memset(a, 0, sizeof(a));
273 RAND_add(a, sizeof(a), sizeof(a));
274 return(RAND_status() <= 0);
283 if test ! -z "$found_crypto" ; then
288 if test -z "$ssldir" ; then
292 if test ! -z "$found_crypto" ; then
293 ac_cv_openssldir=$ssldir
295 ac_cv_openssldir="no"
299 LDFLAGS="$saved_LDFLAGS"
300 CFLAGS="$saved_CFLAGS"
302 if test "x$ac_cv_openssldir" != "xno" ; then
303 AC_DEFINE(HAVE_OPENSSL)
304 LIBS="-lssl -lcrypto $LIBS"
305 dnl Need to recover ssldir - test above runs in subshell
306 ssldir=$ac_cv_openssldir
307 if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
308 # Try to use $ssldir/lib if it exists, otherwise
310 if test -d "$ssldir/lib" ; then
311 LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
312 if test ! -z "$need_dash_r" ; then
313 LDFLAGS="-R$ssldir/lib $LDFLAGS"
316 LDFLAGS="-L$ssldir $saved_LDFLAGS"
317 if test ! -z "$need_dash_r" ; then
318 LDFLAGS="-R$ssldir $LDFLAGS"
321 # Try to use $ssldir/include if it exists, otherwise
323 if test -d "$ssldir/include" ; then
324 CFLAGS="-I$ssldir/include $saved_CFLAGS"
326 CFLAGS="-I$ssldir $saved_CFLAGS"
332 if test "x$with_db" != xno; then
333 test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
337 if test -d "$db_dir/include/db4"; then
338 CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
340 elif test "$db_dir"; then
341 CPPFLAGS="$CPPFLAGS -I$db_dir/include"
342 elif test -d /usr/include/db4; then
343 CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
348 AC_CHECK_DB([db db-4.1 db-4 db4],
350 DATABASE=database_sleepycat.c
352 AC_MSG_ERROR([[Can not locate a suitable Berkeley DB
353 library. Use --with-db=PATH to specify
359 dnl Checks for the zlib compression library.
360 if test "x$with_zlib" != xno ; then
361 AC_CHECK_HEADERS(zlib.h,
362 [AC_CHECK_LIB(z, zlibVersion,
367 if test "x$ok_zlib" = xyes ; then
368 SERVER_LIBS="-lz $SERVER_LIBS"
375 dnl Checks for the newt window library.
376 if test "x$with_newt" != xno ; then
377 AC_CHECK_HEADERS(newt.h,
378 [AC_CHECK_LIB(newt, newtInit,
383 if test "x$ok_newt" = xyes ; then
384 SETUP_LIBS="-lnewt $SETUP_LIBS"
393 dnl Checks for the libical calendaring library.
394 if test "x$with_libical" != xno ; then
395 AC_CHECK_HEADERS(ical.h,
396 [AC_CHECK_LIB(ical, icalcomponent_new,
401 if test "x$ok_libical" = xyes ; then
409 sscanf(ICAL_VERSION, "%f", &v);
410 printf("libical version: %0.2f\n", v);
414 printf("This version is ok.\n");
417 printf("libical 0.24 or newer required.\n");
418 printf("Citadel will be built without calendar support.\n");
423 SERVER_LIBS="-lical $SERVER_LIBS"
424 AC_DEFINE(HAVE_LIBICAL)
432 dnl Checks for header files.
438 dnl TODO: for the DB header checks, we should check whether the headers
439 dnl define db_env_create, somehow
441 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)
444 dnl need to check if this is actually compilable, sometimes there are
445 dnl conflicts with the system's headers (eg solaris xpg4 style headers)
447 if test "x$with_ncurses" != xno; then
448 AC_CHECK_HEADERS(ncurses.h,,,[ ])
451 AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,
452 [#ifdef HAVE_SYS_TYPES_H
453 #include <sys/types.h>
455 #ifdef HAVE_NETINET_IN_H
456 #include <netinet/in.h>
458 #ifdef HAVE_ARPA_NAMESER_H
459 #include <arpa/nameser.h>
463 dnl Checks for typedefs, structures, and compiler characteristics.
469 dnl defined in acinclude.m4:
472 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
473 [AC_TRY_COMPILE([#include <sys/types.h>
474 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
475 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
476 if test $ac_cv_struct_ut_type = yes; then
477 AC_DEFINE(HAVE_UT_TYPE)
480 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
481 [AC_TRY_COMPILE([#include <sys/types.h>
482 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
483 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
484 if test $ac_cv_struct_ut_host = yes; then
485 AC_DEFINE(HAVE_UT_HOST)
488 dnl Checks for library functions.
490 AC_PROG_GCC_TRADITIONAL
493 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
495 dnl Now check for pthreads
497 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
498 dnl we need to include pthread.h
500 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
501 [AC_TRY_LINK([#include <pthread.h>],
504 /* The GNU C library defines this for functions which it implements
505 to always fail with ENOSYS. Some functions are actually named
506 something starting with __ and the normal name is an alias. */
507 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
510 pthread_cancel(thread);
512 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
513 if test "$ac_cv_func_pthread_cancel" = yes; then
514 AC_DEFINE(HAVE_PTHREAD_CANCEL)
517 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
518 [AC_TRY_LINK([#include <pthread.h>],
519 [ /* The GNU C library defines this for functions which it implements
520 to always fail with ENOSYS. Some functions are actually named
521 something starting with __ and the normal name is an alias. */
522 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
525 pthread_create(NULL, NULL, NULL, NULL);
527 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
528 if test "$ac_cv_func_pthread_create" = yes; then
529 test "$DATABASE" && TARGETS="client server utils"
530 if test "x$enable_threaded_client" != xno; then
531 AC_DEFINE(THREADED_CLIENT)
535 AC_REPLACE_FUNCS(snprintf getutline)
537 # AC_CACHE_CHECK([the weather], ac_cv_weather, [
539 # echo $ECHO_N "opening your window... $ECHO_C" >&6
541 # month=`date | cut -f 2 -d ' '`
544 # ac_cv_weather="it's cold!"
547 # ac_cv_weather="it's wet!"
550 # ac_cv_weather="it's hot!"
553 # ac_cv_weather="it's cool"
555 # May | Jun | Sep | *)
556 # ac_cv_weather="it's fine"
561 AC_CACHE_CHECK([under the bed], ac_cv_under_the_bed, [
562 number=`date | cut -c 19`
565 ac_cv_under_the_bed="lunatics and monsters found"
568 ac_cv_under_the_bed="dust bunnies found"
573 dnl Done! Now write the Makefile and sysdep.h
577 AC_SUBST(chkpwd_LIBS)
580 AC_SUBST(SERVER_LDFLAGS)
581 AC_SUBST(SERVER_LIBS)
583 AC_CONFIG_HEADER(sysdep.h)
584 AC_CONFIG_FILES([Makefile])
587 if test -z "$DATABASE"; then
588 AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
593 echo "... On many operating systems, you must use GNU make (gmake) to compile"