AC_ARG_WITH(kthread, [ --with-kthread use kernel threads (on FreeBSD) (not recommended yet)])
AC_ARG_WITH(gdbm, [ --with-gdbm@<:@=DIR@:>@ use GDBM @<:@DIR=/usr/local@:>@])
AC_ARG_WITH(db, [ --with-db@<:@=DIR@:>@ use Sleepycat DB 3.x @<:@DIR=/usr/local/BerkeleyDB.3.@<:@123@:>@@:>@])
+AC_ARG_WITH(ssl,
+ [ --with-ssl=PATH Specify path to OpenSSL installation ],
+ [
+ if test "x$withval" != "xno" ; then
+ tryssldir=$withval
+ fi
+ ]
+)
+AC_ARG_WITH(ncurses, [ --without-ncurses don't use ncurses])
if test "x$with_gdbm" != xno -a "x$with_gdbm" != xyes -a "$with_gdbm"; then
db_dir="$with_gdbm"
with_gdbm=yes
-else
- test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
fi
if test "x$with_db" != xno -a "x$with_db" != xyes -a "$with_db"; then
db_dir="$with_db"
with_db=yes
else
+ test -f /usr/local/lib/libdb.a -o -f /usr/local/lib/libdb.so \
+ -o -f /usr/local/lib/libdb4.a -o -f /usr/local/lib/libdb4.so \
+ -o -f /usr/local/lib/libdb3.a -o -f /usr/local/lib/libdb3.so && db_dir=/usr/local
+
test -d /usr/local/BerkeleyDB.3.1 && db_dir=/usr/local/BerkeleyDB.3.1
test -d /usr/local/BerkeleyDB.3.2 && db_dir=/usr/local/BerkeleyDB.3.2
test -d /usr/local/BerkeleyDB.3.3 && db_dir=/usr/local/BerkeleyDB.3.3
+ test -d /usr/local/BerkeleyDB.4.0 && db_dir=/usr/local/BerkeleyDB.4.0
fi
if test "x$with_gdbm" = xyes -a "x$with_db" = xyes; then
dnl build pthreads programs with gcc due to header problems.
alpha*-dec-osf*)
test -z "$CC" && CC=cc
- PTHREAD_LIBS="-lpthread -lexc"
+ LIBS="-lpthread -lexc $LIBS"
check_pthread=no
;;
dnl FreeBSD is similar to Digital UNIX with DEC C, which has a -pthread flag:
*-*-freebsd*)
if test "$with_kthread" = yes; then
- PTHREAD_LIBS=-kthread
+ LIBS="-kthread $LIBS"
else
- PTHREAD_LIBS=-pthread
+ LIBS="-pthread $LIBS"
fi
check_pthread=no
PTHREAD_DEFS=-D_THREAD_SAFE
;;
*-*-openbsd*)
- PTHREAD_LIBS=-pthread
+ LIBS="-pthread $LIBS"
check_pthread=no
PTHREAD_DEFS=-pthread
;;
PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
;;
esac
+DEFS="$DEFS $PTHREAD_DEFS"
dnl Checks for programs.
AC_PROG_CC
if test "$GCC" = yes; then
case "$host" in
*-*-solaris*|alpha*-dec-osf*)
- CFLAGS="$CFLAGS -Wall -Wcast-align -Wno-char-subscripts"
+ CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wno-char-subscripts"
;;
*)
- CFLAGS="$CFLAGS -Wall -Wcast-align -Wstrict-prototypes"
+ CFLAGS="$CFLAGS -Wall -Wcast-qual -Wcast-align -Wstrict-prototypes"
;;
esac
fi
AC_PROG_YACC
missing_dir=`cd $ac_aux_dir && pwd`
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
dnl Checks for system services.
-dnl Checks for libraries.
+dnl Check the size of various builtin types; see typesize.h (error)
+AC_CHECK_SIZEOF(char, 0)
+AC_CHECK_SIZEOF(short, 0)
+AC_CHECK_SIZEOF(int, 0)
+AC_CHECK_SIZEOF(long, 0)
+dnl AC_CHECK_SIZEOF(long long, 0)
-dnl libdl, libgdbm, and libcrypt are only used in the server, so the
-dnl Makefile only passes $(LIBS) to that target. If other programs start
-dnl requiring additional libraries, we'll have to use other variables, as is
-dnl done with curses.
+dnl Checks for libraries.
dnl We want to test for the following in libc before checking for their
dnl respective libraries, because some systems (like Irix) have both, and the
AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
if test "$ac_cv_func_gethostbyname" = no; then
- AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
+ AC_CHECK_LIB(nsl, gethostbyname)
fi
if test "$ac_cv_func_connect" = no; then
- AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
+ AC_CHECK_LIB(socket, connect)
fi
if test "$ac_cv_func_dlopen" = no; then
test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
fi
-dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
+dnl Check for HP/UX dynamic loader. This should only be in -ldld.
AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
dnl Check for Solaris realtime support
fi
fi
-test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
+test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
+AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
+
+if test "x$with_ncurses" != xno; then
+ AC_SEARCH_LIBS(tgetent, [ncurses curses termcap])
+ AC_SEARCH_LIBS(initscr, [ncurses curses])
+else
+ AC_SEARCH_LIBS(tgetent, [curses termcap])
+ AC_SEARCH_LIBS(initscr, [curses])
+fi
+AC_CHECK_FUNCS(vw_printw wcolor_set resizeterm wresize)
+
+dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
+dnl which the -pthread flag takes care of this.)
+if test "$check_pthread" != no; then
+ AC_CHECK_LIB(pthread, pthread_create)
+ AC_CHECK_LIB(pthreads, pthread_create)
+fi
+
+# The big search for OpenSSL
+if test "$with_ssl" != "no"; then
+ saved_LIBS="$LIBS"
+ saved_LDFLAGS="$LDFLAGS"
+ saved_CFLAGS="$CFLAGS"
+ if test "x$prefix" != "xNONE"; then
+ tryssldir="$tryssldir $prefix"
+ fi
+ AC_CACHE_CHECK([for OpenSSL], ac_cv_openssldir, [
+ 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
+ CFLAGS="$saved_CFLAGS"
+ LDFLAGS="$saved_LDFLAGS"
+ LIBS="$saved_LIBS -lssl -lcrypto"
+
+ # Skip directories if they don't exist
+ if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
+ continue;
+ fi
+ if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
+ # Try to use $ssldir/lib if it exists, otherwise
+ # $ssldir
+ if test -d "$ssldir/lib" ; then
+ LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
+ if test ! -z "$need_dash_r" ; then
+ LDFLAGS="-R$ssldir/lib $LDFLAGS"
+ fi
+ else
+ LDFLAGS="-L$ssldir $saved_LDFLAGS"
+ if test ! -z "$need_dash_r" ; then
+ LDFLAGS="-R$ssldir $LDFLAGS"
+ fi
+ fi
+ # Try to use $ssldir/include if it exists, otherwise
+ # $ssldir
+ if test -d "$ssldir/include" ; then
+ CFLAGS="-I$ssldir/include $saved_CFLAGS"
+ else
+ CFLAGS="-I$ssldir $saved_CFLAGS"
+ fi
+ fi
+
+ # Basic test to check for compatible version and correct linking
+ # *does not* test for RSA - that comes later.
+ AC_TRY_RUN(
+ [
+ #include <string.h>
+ #include <openssl/rand.h>
+ int main(void)
+ {
+ char a[2048];
+ memset(a, 0, sizeof(a));
+ RAND_add(a, sizeof(a), sizeof(a));
+ return(RAND_status() <= 0);
+ }
+ ],
+ [
+ found_crypto=1
+ break;
+ ], []
+ )
+
+ if test ! -z "$found_crypto" ; then
+ break;
+ fi
+ done
+
+ if test -z "$ssldir" ; then
+ ssldir="(system)"
+ fi
+
+ if test ! -z "$found_crypto" ; then
+ ac_cv_openssldir=$ssldir
+ else
+ ac_cv_openssldir="no"
+ fi
+ ])
+ LIBS="$saved_LIBS"
+ LDFLAGS="$saved_LDFLAGS"
+ CFLAGS="$saved_CFLAGS"
+
+ if test "x$ac_cv_openssldir" != "xno" ; then
+ AC_DEFINE(HAVE_OPENSSL)
+ LIBS="-lssl -lcrypto $LIBS"
+ dnl Need to recover ssldir - test above runs in subshell
+ ssldir=$ac_cv_openssldir
+ if test ! -z "$ssldir" -a "x$ssldir" != "x/usr" -a "x$ssldir" != "x(system)"; then
+ # Try to use $ssldir/lib if it exists, otherwise
+ # $ssldir
+ if test -d "$ssldir/lib" ; then
+ LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
+ if test ! -z "$need_dash_r" ; then
+ LDFLAGS="-R$ssldir/lib $LDFLAGS"
+ fi
+ else
+ LDFLAGS="-L$ssldir $saved_LDFLAGS"
+ if test ! -z "$need_dash_r" ; then
+ LDFLAGS="-R$ssldir $LDFLAGS"
+ fi
+ fi
+ # Try to use $ssldir/include if it exists, otherwise
+ # $ssldir
+ if test -d "$ssldir/include" ; then
+ CFLAGS="-I$ssldir/include $saved_CFLAGS"
+ else
+ CFLAGS="-I$ssldir $saved_CFLAGS"
+ fi
+ fi
+ fi
+fi
+
if test "x$with_db" != xno -a "x$with_gdbm" != xyes; then
- AC_CHECK_LIB(db3, db_env_create,
- [GDBM="$GDBM -ldb3"
+ test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
+
+ dblib=""
+
+ if test -d "$db_dir/include/db4"; then
+ CPPFLAGS="$CPPFLAGS -I$db_dir/include/db4"
+ dblib="db4"
+ elif test -d "$db_dir/include/db3"; then
+ CPPFLAGS="$CPPFLAGS -I$db_dir/include/db3"
+ dblib="db3"
+ elif test "$db_dir"; then
+ CPPFLAGS="$CPPFLAGS -I$db_dir/include"
+ elif test -d /usr/include/db4; then
+ CPPFLAGS="$CPPFLAGS -I/usr/include/db4"
+ dblib="db4"
+ elif test -d /usr/include/db3; then
+ CPPFLAGS="$CPPFLAGS -I/usr/include/db3"
+ dblib="db3"
+ fi
+
+ AC_SEARCH_LIBS(db_env_create, [$dblib db db4 db3], [
DATABASE=database_sleepycat.c
- with_gdbm=no], [AC_CHECK_LIB(db, db_env_create,
- [GDBM="$GDBM -ldb"
- DATABASE=database_sleepycat.c
- with_gdbm=no], [], [$NETLIBS])], [$NETLIBS])
+ with_gdbm=no
+ ])
+
fi
if test "x$with_gdbm" != xno -a "x$with_db" != xyes; then
+ test -f /usr/local/lib/libgdbm.a -o -f /usr/local/lib/libgdbm.so && db_dir=/usr/local
+ test "$db_dir" && LDFLAGS="$LDFLAGS -L$db_dir/lib"
+
+ test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
+
AC_CHECK_LIB(gdbm, gdbm_open,
- [GDBM="$GDBM -lgdbm"
+ [LIBS="-lgdbm $LIBS"
DATABASE=database.c
with_db=no])
fi
-test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
-AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
-
-save_LIBS=$LIBS
-LIBS=$CURSES
-AC_SEARCH_LIBS(tgetent, [curses termcap])
-AC_SEARCH_LIBS(initscr, [curses ncurses])
-CURSES=$LIBS
-LIBS=$save_LIBS
-
-dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
-dnl which the -pthread flag takes care of this.)
-if test "$check_pthread" != no; then
- AC_CHECK_LIB(pthread, pthread_create,
- PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
- AC_CHECK_LIB(pthreads, pthread_create,
- PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
-fi
-
dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
-test "$db_dir" && CPPFLAGS="$CPPFLAGS -I$db_dir/include"
-AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db3/db.h)
-AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c])
+dnl
+dnl TODO: for the DB header checks, we should check whether the headers
+dnl define db_env_create, somehow
+dnl
+AC_CHECK_HEADERS(curses.h dl.h fcntl.h limits.h termios.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h utmp.h utmpx.h paths.h db.h db3/db.h db4/db.h pthread.h netinet/in.h)
+
+dnl
+dnl need to check if this is actually compilable, sometimes there are
+dnl conflicts with the system's headers (eg solaris xpg4 style headers)
+dnl
+if test "x$with_ncurses" != xno; then
+ AC_CHECK_HEADERS(ncurses.h,,,[ ])
+fi
+
+AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
+[#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif])
+
AC_SUBST(SMTP)
AC_SUBST(DOMAIN)
-dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
-dnl include pthread.h:
-save_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
-AC_CHECK_HEADERS(pthread.h)
-CPPFLAGS=$save_CPPFLAGS
-
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
-AC_STRUCT_TM
-dnl Check the size of various builtin types; see typesize.h (error)
-AC_CHECK_SIZEOF(char, 0)
-AC_CHECK_SIZEOF(short, 0)
-AC_CHECK_SIZEOF(int, 0)
-AC_CHECK_SIZEOF(long, 0)
-dnl AC_CHECK_SIZEOF(long long, 0)
+dnl defined in acinclude.m4:
+CIT_STRUCT_TM
AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
[AC_TRY_COMPILE([#include <sys/types.h>
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
-dnl Now check for pthreads -- set up variables so that the compiler will be run
-dnl with proper flags for pthread programs
-save_LIBS=$LIBS
-LIBS="$PTHREAD_LIBS $LIBS"
+dnl Now check for pthreads
dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
dnl we need to include pthread.h
-dnl AC_CHECK_FUNCS(pthread_cancel)
AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
[AC_TRY_LINK([#include <pthread.h>],
AC_DEFINE(HAVE_PTHREAD_CANCEL)
fi
-dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
-
AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
[AC_TRY_LINK([#include <pthread.h>],
[ /* The GNU C library defines this for functions which it implements
#endif],
ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
if test "$ac_cv_func_pthread_create" = yes; then
- TARGETS="client server utils serv_modules"
+ test "$DATABASE" && TARGETS="client server utils serv_modules"
if test "x$enable_threaded_client" != xno; then
AC_DEFINE(THREADED_CLIENT)
- CLIENT_PTLIBS=$PTHREAD_LIBS
- CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
- CX=.ro
fi
fi
-if test "x$CX" != x.ro; then
- CL_LIBOBJS='$(LIBOBJS)'
- CX=.o
-fi
-
-dnl Now restore the old libs so we don't pass the wrong stuff to makefile
-LIBS=$save_LIBS
-
AC_REPLACE_FUNCS(snprintf getutline)
dnl Done! Now write the Makefile and sysdep.h
AC_SUBST(AUTH)
AC_SUBST(CHKPWD)
-AC_SUBST(CURSES)
-AC_SUBST(GDBM)
AC_SUBST(RESOLV)
-AC_SUBST(NETLIBS)
AC_SUBST(chkpwd_LIBS)
AC_SUBST(TARGETS)
-AC_SUBST(PTHREAD_DEFS)
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(CLIENT_PTLIBS)
-AC_SUBST(CL_LIBOBJS)
-AC_SUBST(CX)
AC_SUBST(DATABASE)
AC_CONFIG_HEADER(sysdep.h)
AC_CONFIG_FILES([Makefile weekly])
AC_OUTPUT
+
+if test -z "$DATABASE"; then
+ AC_MSG_WARN([No database driver was found. Please install Berkeley DB.])
+fi