Mercurial > dovecot > core-2.2
view configure.ac @ 22568:c50f46578b86
director: Ignore CONNECT requests to hosts that have been removed already
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 14 Sep 2017 17:59:05 +0300 |
parents | fc335480acb3 |
children | b50c55023f08 |
line wrap: on
line source
AC_PREREQ([2.59]) # Be sure to update ABI version also if anything changes that might require # recompiling plugins. Most importantly that means if any structs are changed. AC_INIT([Dovecot],[2.2.devel],[dovecot@dovecot.org]) AC_DEFINE_UNQUOTED([DOVECOT_ABI_VERSION], "2.2.ABIv20($PACKAGE_VERSION)", [Dovecot ABI version]) AC_CONFIG_AUX_DIR([.]) AC_CONFIG_SRCDIR([src]) AM_INIT_AUTOMAKE([foreign]) AM_MAINTAINER_MODE PKG_PROG_PKG_CONFIG ACLOCAL_AMFLAGS='-I $(top_srcdir)' AC_SUBST(ACLOCAL_AMFLAGS) dnl TEST_WITH(name, value, [plugin]) AC_DEFUN([TEST_WITH], [ want=want_`echo $1|sed s/-/_/g` if test $2 = yes || test $2 = no || test $2 = auto; then eval $want=$2 elif test $2 = plugin; then if test "$3" = plugin; then eval $want=plugin else AC_ERROR([--with-$1=plugin not supported]) fi elif `echo $2|grep '^/' >/dev/null`; then AC_ERROR([--with-$1=path not supported. You may want to use instead: CPPFLAGS=-I$2/include LDFLAGS=-L$2/lib ./configure --with-$1]) else AC_ERROR([--with-$1: Unknown value: $2]) fi ]) AC_ARG_ENABLE(devel-checks, AS_HELP_STRING([--enable-devel-checks], [Enable some extra expensive checks for developers]), if test x$enableval = xyes; then AC_DEFINE(DEBUG,, [Build with extra debugging checks]) want_devel_checks=yes fi) AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts], [Enable asserts (default)]), if test x$enableval = xno; then AC_DEFINE(DISABLE_ASSERTS,, [Disable asserts]) fi) AC_ARG_WITH(shared-libs, AS_HELP_STRING([--with-shared-libs], [Link binaries using shared Dovecot libraries (default)]), want_shared_libs=$withval, want_shared_libs=yes) AM_CONDITIONAL(BUILD_SHARED_LIBS, test "$want_shared_libs" = "yes") AC_ARG_WITH(mem-align, AS_HELP_STRING([--with-mem-align=BYTES], [Set the memory alignment (default: 8)]), mem_align=$withval, mem_align=8) AC_ARG_WITH(ioloop, AS_HELP_STRING([--with-ioloop=IOLOOP], [Specify the I/O loop method to use (epoll, kqueue, poll; best for the fastest available; default is best)]), ioloop=$withval, ioloop=best) AC_ARG_WITH(notify, AS_HELP_STRING([--with-notify=NOTIFY], [Specify the file system notification method to use (inotify, kqueue, none; default is detected in the above order)]), notify=$withval, notify=) AC_ARG_WITH(nss, AS_HELP_STRING([--with-nss], [Build with NSS module support (auto)]), TEST_WITH(nss, $withval), want_nss=auto) AC_ARG_WITH(shadow, AS_HELP_STRING([--with-shadow], [Build with shadow password support (auto)]), TEST_WITH(shadow, $withval), want_shadow=auto) AC_ARG_WITH(pam, AS_HELP_STRING([--with-pam], [Build with PAM support (auto)]), TEST_WITH(pam, $withval), want_pam=auto) AC_ARG_WITH(bsdauth, AS_HELP_STRING([--with-bsdauth], [Build with BSD authentication support (auto)]), TEST_WITH(bsdauth, $withval), want_bsdauth=auto) AC_ARG_WITH(gssapi, AS_HELP_STRING([--with-gssapi=yes|plugin Build with GSSAPI authentication support]), TEST_WITH(gssapi, $withval, plugin), want_gssapi=no) AC_ARG_WITH(sia, AS_HELP_STRING([--with-sia], [Build with Tru64 SIA support]), TEST_WITH(sia, $withval), want_sia=no) AC_ARG_WITH(ldap, AS_HELP_STRING([--with-ldap=yes|plugin], [Build with LDAP support]), TEST_WITH(ldap, $withval, plugin), want_ldap=no) AC_ARG_WITH(vpopmail, AS_HELP_STRING([--with-vpopmail], [Build with vpopmail support (auto)]), if test x$withval = xno; then want_vpopmail=no else if test x$withval = xyes || test x$withval = xauto; then vpopmail_home="`echo ~vpopmail`" want_vpopmail=$withval else vpopmail_home="$withval" want_vpopmail=yes fi fi, [ want_vpopmail=no ]) # Berkeley DB support is more or less broken. Disabled for now. #AC_ARG_WITH(db, #AS_HELP_STRING([--with-db], [Build with Berkeley DB support]), # TEST_WITH(db, $withval), # want_db=no) want_db=no AC_ARG_WITH(cdb, AS_HELP_STRING([--with-cdb], [Build with CDB support]), TEST_WITH(cdb, $withval), want_cdb=no) dnl The --with-sql is useful only if Dovecot is being built with all the SQL dnl drivers as modules. If any SQL driver is built-in, this option is ignored. AC_ARG_WITH(sql, AS_HELP_STRING([--with-sql=yes|plugin], [Build with generic SQL support]), TEST_WITH(sql, $withval, plugin), want_sql=no) AC_ARG_WITH(pgsql, AS_HELP_STRING([--with-pgsql], [Build with PostgreSQL driver support]), TEST_WITH(pgsql, $withval), want_pgsql=no) AC_ARG_WITH(mysql, AS_HELP_STRING([--with-mysql], [Build with MySQL driver support]), TEST_WITH(mysql, $withval), want_mysql=no) AC_ARG_WITH(sqlite, AS_HELP_STRING([--with-sqlite], [Build with SQLite3 driver support]), TEST_WITH(sqlite, $withval), want_sqlite=no) AC_ARG_WITH(cassandra, AS_HELP_STRING([--with-cassandra], [Build with Cassandra driver support]), TEST_WITH(cassandra, $withval), want_cassandra=no) AC_ARG_WITH(lucene, AS_HELP_STRING([--with-lucene], [Build with CLucene full text search support]), TEST_WITH(lucene, $withval), want_lucene=no) AM_CONDITIONAL(BUILD_LUCENE, test "$want_lucene" = "yes") AC_ARG_WITH(stemmer, AS_HELP_STRING([--with-stemmer], [Build with libstemmer support (for FTS) (auto)]), TEST_WITH(stemmer, $withval), want_stemmer=auto) AC_ARG_WITH(textcat, AS_HELP_STRING([--with-textcat], [Build with libtextcat support (for FTS) (auto)]), TEST_WITH(textcat, $withval), want_textcat=auto) AC_ARG_WITH(icu, AS_HELP_STRING([--with-icu], [Build with libicu support (for FTS normalization) (auto)]), want_icu=$withval, want_icu=auto) AC_ARG_WITH(solr, AS_HELP_STRING([--with-solr], [Build with Solr full text search support]), TEST_WITH(solr, $withval), want_solr=no) AC_ARG_WITH(zlib, AS_HELP_STRING([--with-zlib], [Build with zlib compression support (auto)]), TEST_WITH(zlib, $withval), want_zlib=auto) AC_ARG_WITH(bzlib, AS_HELP_STRING([--with-bzlib], [Build with bzlib compression support (auto)]), TEST_WITH(bzlib, $withval), want_bzlib=auto) AC_ARG_WITH(lzma, AS_HELP_STRING([--with-lzma], [Build with LZMA compression support (auto)]), TEST_WITH(lzma, $withval), want_lzma=auto) AC_ARG_WITH(lz4, AS_HELP_STRING([--with-lz4], [Build with LZ4 compression support (auto)]), TEST_WITH(lz4, $withval), want_lz4=auto) AC_ARG_WITH(libcap, AS_HELP_STRING([--with-libcap], [Build with libcap support (Dropping capabilities) (auto)]), TEST_WITH(libcap, $withval), want_libcap=auto) AC_ARG_WITH(libwrap, AS_HELP_STRING([--with-libwrap], [Build with libwrap, ie. TCP-wrappers]), TEST_WITH(libwrap, $withval), want_libwrap=no) AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=gnutls|openssl], [Build with GNUTLS or OpenSSL (default)]), if test x$withval = xno; then want_gnutls=no want_openssl=no elif test x$withval = xgnutls; then AC_ERROR([GNUTLS support is broken currently]) want_gnutls=yes want_openssl=no elif test x$withval = xopenssl; then want_gnutls=no want_openssl=yes elif test x$withval = xyes; then want_gnutls=no want_openssl=yes else AC_ERROR([--with-ssl: Invalid value: $withval]) fi, [ want_gnutls=no want_openssl=auto ]) AC_ARG_WITH(ssldir, AS_HELP_STRING([--with-ssldir=DIR], [SSL base directory for certificates (/etc/ssl)]), ssldir="$withval", ssldir=/etc/ssl ) AC_SUBST(ssldir) AC_ARG_WITH(rundir, AS_HELP_STRING([--with-rundir=DIR], [Runtime data directory (LOCALSTATEDIR/run/dovecot)]), rundir="$withval", rundir=$localstatedir/run/$PACKAGE ) AC_SUBST(rundir) AC_ARG_WITH(statedir, AS_HELP_STRING([--with-statedir=DIR], [Permanent data directory (LOCALSTATEDIR/lib/dovecot)]), statedir="$withval", statedir=$localstatedir/lib/$PACKAGE ) AC_SUBST(statedir) AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files (auto=detect)]), [ if test "$withval" = "auto"; then systemdsystemunitdir=`$PKG_CONFIG --variable=systemdsystemunitdir systemd` elif test "$withval" != "no"; then systemdsystemunitdir=$withval fi ], []) if test "$systemdsystemunitdir" != ""; then AC_SUBST(systemdsystemunitdir) AC_DEFINE(HAVE_SYSTEMD,, [Define if you want to use systemd socket activation]) fi AM_CONDITIONAL(HAVE_SYSTEMD, test "$systemdsystemunitdir" != "") AC_ARG_WITH(gc, AS_HELP_STRING([--with-gc], [Use Boehm garbage collector]), TEST_WITH(gc, $withval), want_gc=no) AC_ARG_WITH(storages, AS_HELP_STRING([--with-storages], [Build with specified mail storage formats (mdbox sdbox maildir mbox cydir imapc pop3c)]), [ if test "$withval" = "yes" || test "$withval" = "no"; then AC_MSG_ERROR([--with-storages needs storage list as parameter]) fi mail_storages="shared `echo "$withval"|sed 's/,/ /g'`" ], mail_storages="shared mdbox sdbox maildir mbox cydir imapc pop3c") AC_SUBST(mail_storages) mail_storages="$mail_storages raw fail" # drop duplicates duplicates=`(for i in $mail_storages; do echo $i; done)|sort|uniq -d|xargs echo` if test "$duplicates" != ""; then AC_ERROR([Duplicate --with-storages: $duplicates]) fi DC_DOVECOT_MODULEDIR AC_ARG_WITH(docs, AS_HELP_STRING([--with-docs], [Install documentation (default)]), if test x$withval = xno; then want_docs=no else want_docs=yes fi, want_docs=yes) AM_CONDITIONAL(BUILD_DOCS, test "$want_docs" = "yes") dnl always enable all of the passbs and userdbs that don't require extra libs want_passwd=yes want_passwd_file=yes want_checkpassword=yes want_prefetch_userdb=yes AC_ISC_POSIX AC_PROG_CC AC_PROG_CPP AC_PROG_CXX # lucene plugin needs this AC_HEADER_STDC AC_C_INLINE AC_PROG_LIBTOOL AM_ICONV # SIZE_MAX is missing without this CXXFLAGS="$CXXFLAGS -D__STDC_LIMIT_MACROS" AC_DEFINE_UNQUOTED(DOVECOT_NAME, "$PACKAGE_NAME", [Dovecot name]) AC_DEFINE_UNQUOTED(DOVECOT_STRING, "$PACKAGE_STRING", [Dovecot string]) AC_DEFINE_UNQUOTED(DOVECOT_VERSION, "$PACKAGE_VERSION", [Dovecot version]) AC_DEFINE([DOVECOT_VERSION_MAJOR], regexp(AC_PACKAGE_VERSION, [^\([0-9]+\)\.\([0-9]+\)], [\1]), [Dovecot major version]) AC_DEFINE([DOVECOT_VERSION_MINOR], regexp(AC_PACKAGE_VERSION, [^\([0-9]+\)\.\([0-9]+\)], [\2]), [Dovecot minor version]) AC_CHECK_HEADERS(strings.h stdint.h unistd.h dirent.h malloc.h inttypes.h \ sys/uio.h sys/sysmacros.h sys/resource.h sys/select.h libgen.h \ sys/quota.h sys/fs/ufs_quota.h ufs/ufs/quota.h jfs/quota.h \ quota.h sys/fs/quota_common.h \ mntent.h sys/mnttab.h sys/event.h sys/time.h sys/mkdev.h linux/dqblk_xfs.h \ xfs/xqm.h execinfo.h ucontext.h malloc_np.h sys/utsname.h sys/vmount.h \ sys/utsname.h glob.h linux/falloc.h ucred.h sys/ucred.h) dnl * clang check have_clang=no if $CC -dM -E -x c /dev/null | grep __clang__ > /dev/null 2>&1; then have_clang=yes fi dnl * gcc specific options if test "x$ac_cv_c_compiler_gnu" = "xyes"; then # -Wcast-qual -Wcast-align -Wconversion -Wunreachable-code # too many warnings # -Wstrict-prototypes -Wredundant-decls # may give warnings in some systems # -Wmissing-format-attribute -Wmissing-noreturn -Wwrite-strings # a couple of warnings CFLAGS="$CFLAGS -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast" if test "$have_clang" = "yes"; then AC_TRY_COMPILE([ #if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 3) # error new clang #endif ],,,[ # clang 3.3+ unfortunately this gives warnings with hash.h CFLAGS="$CFLAGS -Wno-duplicate-decl-specifier" ]) else # This is simply to avoid warning when building strftime() wrappers.. CFLAGS="$CFLAGS -fno-builtin-strftime" fi AC_TRY_COMPILE([ #if __GNUC__ < 4 # error old gcc #endif ],,[ # gcc4 CFLAGS="$CFLAGS -Wstrict-aliasing=2" ]) # Use std=gnu99 if we have new enough gcc old_cflags=$CFLAGS CFLAGS="-std=gnu99" AC_TRY_COMPILE([ ],, [ CFLAGS="$CFLAGS $old_cflags" ], [ CFLAGS="$old_cflags" ]) fi if test "$have_clang" = "yes"; then # clang specific options if test "$want_devel_checks" = "yes"; then # FIXME: enable once md[45], sha[12] can be compiled without #CFLAGS="$CFLAGS -fsanitize=integer,undefined -ftrapv" : fi fi dnl ** dnl ** just some generic stuff... dnl ** AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(inet_addr, nsl) AC_SEARCH_LIBS(fdatasync, rt, [ AC_DEFINE(HAVE_FDATASYNC,, [Define if you have fdatasync()]) ]) if test $want_libcap != no; then AC_CHECK_LIB(cap, cap_init, [ AC_DEFINE(HAVE_LIBCAP,, [libcap is installed for cap_init()]) LIBCAP="-lcap" AC_SUBST(LIBCAP) ], [ if test "$want_libcap" = "yes"; then AC_ERROR([Can't build with libcap support: libcap not found]) fi ]) fi have_libwrap=no if test $want_libwrap != no; then AC_CHECK_HEADER(tcpd.h, [ old_LIBS=$LIBS AC_CACHE_CHECK([whether we have libwrap],i_cv_have_libwrap,[ AC_TRY_COMPILE([ #include <tcpd.h> int allow_severity = 0; int deny_severity = 0; ], [ request_init((void *)0); ], [ i_cv_have_libwrap=yes ], [ i_cv_have_libwrap=no ]) ]) if test $i_cv_have_libwrap = yes; then AC_DEFINE(HAVE_LIBWRAP,, [Define if you have libwrap]) LIBWRAP_LIBS=-lwrap AC_SUBST(LIBWRAP_LIBS) have_libwrap=yes else if test "$want_libwrap" = "yes"; then AC_ERROR([Can't build with libwrap support: libwrap not found]) fi fi LIBS=$old_LIBS ], [ if test "$want_libwrap" = "yes"; then AC_ERROR([Can't build with libwrap support: tcpd.h not found]) fi ]) fi AM_CONDITIONAL(TCPWRAPPERS, test "$have_libwrap" = "yes") AC_DEFINE(PACKAGE_WEBPAGE, "http://www.dovecot.org/", [Support URL]) dnl * after -lsocket and -lnsl tests, inet_aton() may be in them AC_CHECK_FUNCS(fcntl flock lockf inet_aton sigaction getpagesize madvise \ strcasecmp stricmp vsyslog writev pread uname unsetenv \ setrlimit setproctitle seteuid setreuid setegid setresgid \ getmntinfo setpriority quotactl getmntent kqueue kevent \ backtrace_symbols walkcontext dirfd clearenv \ malloc_usable_size glob fallocate posix_fadvise \ getpeereid getpeerucred inotify_init timegm) AC_CHECK_TYPES([struct sockpeercred],,,[ #include <sys/types.h> #include <sys/socket.h> ]) AC_SEARCH_LIBS(clock_gettime, rt, [ AC_DEFINE(HAVE_CLOCK_GETTIME,, [Define if you have the clock_gettime function]) ]) AC_CACHE_CHECK([for typeof],i_cv_have_typeof,[ AC_TRY_COMPILE([ ], [ int foo; typeof(foo) bar; ], [ i_cv_have_typeof=yes ], [ i_cv_have_typeof=no ]) ]) if test $i_cv_have_typeof = yes; then AC_DEFINE(HAVE_TYPEOF,, [Define if you have typeof()]) fi dnl * I/O loop function have_ioloop=no if test "$ioloop" = "best" || test "$ioloop" = "epoll"; then AC_CACHE_CHECK([whether we can use epoll],i_cv_epoll_works,[ AC_TRY_RUN([ #include <sys/epoll.h> int main() { return epoll_create(5) < 1; } ], [ i_cv_epoll_works=yes ], [ i_cv_epoll_works=no ]) ]) if test $i_cv_epoll_works = yes; then AC_DEFINE(IOLOOP_EPOLL,, [Implement I/O loop with Linux 2.6 epoll()]) have_ioloop=yes ioloop=epoll else if test "$ioloop" = "epoll" ; then AC_MSG_ERROR([epoll ioloop requested but epoll_create() is not available]) fi fi fi if test "$ioloop" = "best" || test "$ioloop" = "kqueue"; then if test "$ac_cv_func_kqueue" = yes && test "$ac_cv_func_kevent" = yes; then AC_DEFINE(IOLOOP_KQUEUE,, [Implement I/O loop with BSD kqueue()]) ioloop=kqueue have_ioloop=yes elif test "$ioloop" = "kqueue"; then AC_MSG_ERROR([kqueue ioloop requested but kqueue() is not available]) fi fi if test "$ioloop" = "best" || test "$ioloop" = "poll"; then AC_CHECK_FUNC(poll, [ AC_DEFINE(IOLOOP_POLL,, [Implement I/O loop with poll()]) ioloop=poll have_ioloop=yes ]) fi if test "$have_ioloop" = "no"; then AC_DEFINE(IOLOOP_SELECT,, [Implement I/O loop with select()]) ioloop="select" fi have_notify=none if test "$notify" = "" || test "$notify" = "inotify" ; then dnl * inotify? AC_MSG_CHECKING([whether we can use inotify]) if test "$ac_cv_func_inotify_init" = yes; then have_notify=inotify notify=inotify AC_MSG_RESULT("yes") AC_DEFINE(IOLOOP_NOTIFY_INOTIFY,, [Use Linux inotify]) else AC_MSG_RESULT("no") if test "$notify" = "inotify"; then AC_MSG_ERROR([inotify requested but not available]) notify="" fi fi fi if (test "$notify" = "" && test "$ioloop" = kqueue) || test "$notify" = "kqueue"; then dnl * BSD kqueue() notify AC_MSG_CHECKING([whether we can use BSD kqueue() notify]) if test "$ac_cv_func_kqueue" = yes && test "$ac_cv_func_kevent" = yes ; then have_notify=kqueue notify=kqueue AC_MSG_RESULT("yes") AC_DEFINE(IOLOOP_NOTIFY_KQUEUE,, [Use BSD kqueue directory changes notificaton]) else AC_MSG_RESULT("no") if test "$notify" = "kqueue" ; then AC_MSG_ERROR([kqueue notify requested but kqueue() is not available]) notify="" fi fi fi if test "$have_notify" = "none"; then AC_DEFINE(IOLOOP_NOTIFY_NONE,, [No special notify support]) fi AC_CACHE_CHECK([whether we have glibc],i_cv_have_glibc,[ AC_TRY_COMPILE([ #include <stdlib.h> #ifdef __GLIBC__ we have glibc #endif ],, [ i_cv_have_glibc=no ], [ i_cv_have_glibc=yes ]) ]) if test "$i_cv_have_glibc" = "yes"; then AC_DEFINE(PREAD_WRAPPERS,, [Define if pread/pwrite needs _XOPEN_SOURCE 500]) fi dnl * Old glibcs have broken posix_fallocate(). Make sure not to use it. dnl * It may also be broken in AIX. AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[ AC_TRY_RUN([ #define _XOPEN_SOURCE 600 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7) possibly broken posix_fallocate #endif int main() { int fd = creat("conftest.temp", 0600); int ret; if (fd == -1) { perror("creat()"); return 2; } ret = posix_fallocate(fd, 1024, 1024) < 0 ? 1 : 0; unlink("conftest.temp"); return ret; } ], [ i_cv_posix_fallocate_works=yes ], [ i_cv_posix_fallocate_works=no ]) ]) if test $i_cv_posix_fallocate_works = yes; then AC_DEFINE(HAVE_POSIX_FALLOCATE,, [Define if you have a working posix_fallocate()]) fi dnl * OS specific options DC_PLUGIN_DEPS case "$host_os" in hpux*) CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED" # for getting fd_send/fd_recv working: LDFLAGS="$LDFLAGS -Wl,+b,:" LIBS="-lxnet $LIBS" AC_DEFINE(PREAD_BROKEN,, [Define if pread/pwrite implementation is broken]) ;; linux*|darwin*) AC_DEFINE(PROCTITLE_HACK,, [Define if process title can be changed by modifying argv]) ;; *) ;; esac AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long long) AC_DEFUN([AC_TYPEOF], [ dnl * first check if we can get the size with redefining typedefs order="$2" if test "$2" = ""; then order="int long long-long" fi result="" visible="unknown" AC_MSG_CHECKING([type of $1]) AC_CACHE_VAL(i_cv_typeof_$1,[ if test "x$ac_cv_c_compiler_gnu" = "xyes"; then dnl * try with printf() + -Werror old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" for type in $order; do case "$type" in int) fmt="%d" ;; unsigned-int) fmt="%u" ;; long) fmt="%ld" ;; unsigned-long) fmt="%lu" ;; long-long) fmt="%lld" ;; unsigned-long-long) fmt="%llu" ;; *) fmt="" ;; esac if test "$fmt" != ""; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <stdio.h> ]], [[ printf("$fmt", ($1)0); ]])],[ if test "$result" != ""; then dnl * warning check isn't working result="" visible="unknown" break fi result="`echo $type|sed 's/-/ /g'`" visible="$result" ],[]) fi done CFLAGS="$old_CFLAGS" fi if test "$result" = ""; then for type in $order; do type="`echo $type|sed 's/-/ /g'`" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> typedef $type $1; ]], [[]])],[ if test "$result" != ""; then dnl * compiler allows redefining to anything result="" visible="unknown" break fi result="$type" visible="$type" ],[]) done fi if test "$result" = ""; then dnl * check with sizes dnl * older autoconfs don't include sys/types.h, so do it manually AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <sys/types.h> int main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof($1)); exit(0); } ]])],[ size=`cat conftestval` rm -f conftestval for type in $order; do actype="ac_cv_sizeof_`echo $type|sed 's/-/_/g'`" if test "$size" = "`eval echo \\$$actype`"; then result="`echo $type|sed 's/-/ /g'`" visible="`expr $size \* 8`bit (using $result)" break fi done if test "$result" = ""; then result=unknown visible="`expr $size \* 8`bit (unknown type)" fi ],[],[]) fi i_cv_typeof_$1=$result/$visible ]) typeof_$1=`echo $i_cv_typeof_$1 | sed s,/.*$,,` visible=`echo $i_cv_typeof_$1 | sed s,^.*/,,` AC_MSG_RESULT($visible) ]) AC_SYS_LARGEFILE AC_CHECK_TYPES(_Bool) AC_CHECK_TYPE(uoff_t, [ have_uoff_t=yes AC_DEFINE(HAVE_UOFF_T,, [Define if you have a native uoff_t type]) ], [ have_uoff_t=no ]) AC_TYPEOF(off_t, long int long-long) case "$typeof_off_t" in int) offt_max=INT_MAX uofft_fmt="u" if test "$have_uoff_t" != "yes"; then AC_DEFINE(UOFF_T_INT,, [Define if off_t is int]) fi offt_bits=`expr 8 \* $ac_cv_sizeof_int` ;; long) offt_max=LONG_MAX uofft_fmt="lu" if test "$have_uoff_t" != "yes"; then AC_DEFINE(UOFF_T_LONG,, [Define if off_t is long]) fi offt_bits=`expr 8 \* $ac_cv_sizeof_long` ;; "long long") offt_max=LLONG_MAX uofft_fmt="llu" if test "$have_uoff_t" != "yes"; then AC_DEFINE(UOFF_T_LONG_LONG,, [Define if off_t is long long]) fi offt_bits=`expr 8 \* $ac_cv_sizeof_long_long` ;; *) AC_MSG_ERROR([Unsupported off_t type]) ;; esac dnl * Do we have struct dirent->d_type AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <dirent.h> ]], [[ struct dirent d; d.d_type = DT_DIR; ]])],[ AC_DEFINE(HAVE_DIRENT_D_TYPE,, [Define if you have struct dirent->d_type]) ],[]) dnl * Do we have OFF_T_MAX? AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <limits.h> #include <sys/types.h> ]], [[ off_t i = OFF_T_MAX; ]])],[ : ],[ AC_DEFINE_UNQUOTED(OFF_T_MAX, $offt_max, [Maximum value of off_t]) ]) AC_DEFINE_UNQUOTED(PRIuUOFF_T, "$uofft_fmt", [printf() format for uoff_t]) dnl * make sure size_t isn't signed. we'd probably work fine with it, but dnl * it's more likely vulnerable to buffer overflows. Anyway, C99 specifies dnl * that it's unsigned and only some old systems define it as signed. AC_CACHE_CHECK([whether size_t is signed],i_cv_signed_size_t,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <stdlib.h> int main() { /* return 0 if we're signed */ exit((size_t)(int)-1 <= 0 ? 0 : 1); } ]])],[ i_cv_signed_size_t=yes echo echo "Your system's size_t is a signed integer, Dovecot isn't designed to" echo "support it. It probably works just fine, but it's less resistant to" echo "buffer overflows. If you're not worried about this and still want to" echo "compile Dovecot, set ignore_signed_size=1 environment." if test "$ignore_signed_size" = ""; then AC_MSG_ERROR([aborting]) fi echo "..ignoring as requested.." ],[ i_cv_signed_size_t=no ],[]) ]) dnl Note: we check size_t rather than ssize_t here, because on OSX 10.2 dnl ssize_t = int and size_t = unsigned long. We're mostly concerned about dnl printf format here, so check the size_t one. AC_TYPEOF(size_t, unsigned-int unsigned-long unsigned-long-long) case "$typeof_size_t" in "unsigned long") ssizet_max=LONG_MAX sizet_fmt="lu" ;; "unsigned long long") ssizet_max=LLONG_MAX sizet_fmt="llu" ;; *) dnl older systems didn't have ssize_t, default to int ssizet_max=INT_MAX sizet_fmt="u" if test "$typeof_size_t" = ""; then AC_DEFINE(size_t, unsigned int, [Define to 'unsigned int' if you don't have it]) AC_DEFINE(ssize_t, int, [Define to 'int' if you don't have it]) fi ;; esac AC_DEFINE_UNQUOTED(SSIZE_T_MAX, $ssizet_max, [Maximum value of ssize_t]) AC_DEFINE_UNQUOTED(PRIuSIZE_T, "$sizet_fmt", [printf() format for size_t]) AC_DEFUN([AC_CHECKTYPE2], [ AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(i_cv_type_$1, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> $2]], [[$1 t;]])],[i_cv_type_$1=yes],[i_cv_type_$1=no])]) AC_MSG_RESULT($i_cv_type_$1) ]) dnl some systems don't have stdint.h, but still have some of the types dnl defined elsewhere AC_CHECK_HEADER(stdint.h, [ stdint_include="#include <stdint.h>" ]) AC_CHECKTYPE2(uintmax_t, [$stdint_include]) if test $i_cv_type_uintmax_t = yes; then AC_DEFINE(HAVE_UINTMAX_T,, [Define if you have uintmax_t (C99 type)]) fi dnl use separate check, eg. Solaris 8 has uintmax_t but not uint_fast32_t AC_CHECKTYPE2(uint_fast32_t, [$stdint_include]) if test $i_cv_type_uint_fast32_t = yes; then AC_DEFINE(HAVE_UINT_FAST32_T,, [Define if you have uint_fast32_t (C99 type)]) fi AC_CHECKTYPE2(socklen_t, [#include <sys/socket.h>]) if test $i_cv_type_socklen_t = yes; then AC_DEFINE(HAVE_SOCKLEN_T,, [Define to 'int' if you don't have socklen_t]) fi AC_DEFINE_UNQUOTED(MEM_ALIGN_SIZE, $mem_align, [Required memory alignment]) dnl * find random source AC_MSG_CHECKING([for /dev/urandom]) if test -c /dev/urandom || test -s /dev/urandom; then AC_MSG_RESULT(yes) AC_DEFINE(DEV_URANDOM_PATH, "/dev/urandom", [Path to /dev/urandom]) have_random_source=yes else AC_MSG_RESULT(no) fi if test "$have_random_source" != "yes"; then AC_CHECK_HEADER(openssl/rand.h, [ AC_DEFINE(HAVE_OPENSSL_RAND_H,, [Define if you have openssl/rand.h]) LIBS="$LIBS -lcrypto" ]) fi dnl * do we have tm_gmtoff AC_MSG_CHECKING([for tm_gmtoff]) AC_CACHE_VAL(i_cv_field_tm_gmtoff, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <time.h>]], [[struct tm *tm; return tm->tm_gmtoff;]])], [i_cv_field_tm_gmtoff=yes], [i_cv_field_tm_gmtoff=no])]) if test $i_cv_field_tm_gmtoff = yes; then AC_DEFINE(HAVE_TM_GMTOFF,, [Define if you have struct tm->tm_gmtoff]) fi AC_MSG_RESULT($i_cv_field_tm_gmtoff) dnl * how large time_t values does gmtime() accept? AC_CACHE_CHECK([how large time_t values gmtime() accepts],i_cv_gmtime_max_time_t,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <time.h> int main() { FILE *f; int bits; for (bits = 1; bits < sizeof(time_t)*8; bits++) { time_t t = ((time_t)1 << bits) - 1; if (gmtime(&t) == NULL) { bits--; break; } } if (bits > 40) { /* Solaris 9 breaks after 55 bits. Perhaps other systems break earlier. Let's just do the same as Cyrus folks and limit it to 40 bits. */ bits = 40; } f = fopen("conftest.temp", "w"); if (f == NULL) { perror("fopen()"); return 1; } fprintf(f, "%d", bits); fclose(f); return 0; } ]])],[ i_cv_gmtime_max_time_t=`cat conftest.temp` rm -f conftest.temp ], [ printf "check failed, assuming " i_cv_gmtime_max_time_t=31 ],[]) ]) AC_DEFINE_UNQUOTED(TIME_T_MAX_BITS, $i_cv_gmtime_max_time_t, [max. time_t bits gmtime() can handle]) AC_CACHE_CHECK([whether time_t is signed],i_cv_signed_time_t,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <stdlib.h> int main() { /* return 0 if we're signed */ exit((time_t)(int)-1 <= 0 ? 0 : 1); } ]])],[ i_cv_signed_time_t=yes ], [ i_cv_signed_time_t=no ]) ]) if test $i_cv_signed_time_t = yes; then AC_DEFINE(TIME_T_SIGNED,, [Define if your time_t is signed]) fi AC_CACHE_CHECK([if we can use C99 static in array sizes],i_cv_c99_static_arrays,[ AC_TRY_COMPILE([ void foo(unsigned char [static 20]); ], [ ], [ i_cv_c99_static_arrays=yes ], [ i_cv_c99_static_arrays=no ]) ]) if test $i_cv_c99_static_arrays = yes; then static_value=static else static_value= fi AC_DEFINE_UNQUOTED(STATIC_ARRAY, $static_value, [C99 static array]) dnl Our implementation of AC_C_FLEXIBLE_ARRAY_MEMBER. dnl Use it until autoconf 2.61+ becomes more widely used AC_CACHE_CHECK([if we can use C99-like flexible array members],i_cv_c99_flex_arrays,[ AC_TRY_COMPILE([ struct foo { int x; char y[]; }; ], [ struct foo foo; ], [ i_cv_c99_flex_arrays=yes ], [ i_cv_c99_flex_arrays=no ]) ]) if test $i_cv_c99_flex_arrays = yes; then flexible_value= else flexible_value=1 fi AC_DEFINE_UNQUOTED(FLEXIBLE_ARRAY_MEMBER, $flexible_value, [How to define flexible array members in structs]) dnl * do we have struct iovec AC_MSG_CHECKING([for struct iovec]) AC_CACHE_VAL(i_cv_struct_iovec, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/uio.h> #include <unistd.h>]], [[struct iovec *iovec;]])], [i_cv_struct_iovec=yes], [i_cv_struct_iovec=no])]) if test $i_cv_struct_iovec = yes; then AC_DEFINE(HAVE_STRUCT_IOVEC,, [Define if you have struct iovec]) fi AC_MSG_RESULT($i_cv_struct_iovec) dnl * is dev_t an integer or something else? AC_CACHE_CHECK([whether dev_t is struct],i_cv_dev_t_struct,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> struct test { dev_t a; }; static struct test t = { 0 }; ]], [[ ]])], [ i_cv_dev_t_struct=no ],[ i_cv_dev_t_struct=yes ]) ]) if test $i_cv_dev_t_struct = yes; then AC_DEFINE(DEV_T_STRUCT,, [Define if your dev_t is a structure instead of integer type]) fi dnl * Do we have RLIMIT_AS? AC_CACHE_CHECK([whether RLIMIT_AS exists],i_cv_have_rlimit_as,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> ]], [[ struct rlimit r; getrlimit(RLIMIT_AS, &r); ]])],[ i_cv_have_rlimit_as=yes ], [ i_cv_have_rlimit_as=no ]) ]) if test $i_cv_have_rlimit_as = yes; then AC_DEFINE(HAVE_RLIMIT_AS,, [Define if you have RLIMIT_AS for setrlimit()]) fi dnl * Do we have RLIMIT_NPROC? AC_CACHE_CHECK([whether RLIMIT_NPROC exists],i_cv_have_rlimit_nproc,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> ]], [[ struct rlimit r; getrlimit(RLIMIT_NPROC, &r); ]])],[ i_cv_have_rlimit_nproc=yes ],[ i_cv_have_rlimit_nproc=no ]) ]) if test $i_cv_have_rlimit_nproc = yes; then AC_DEFINE(HAVE_RLIMIT_NPROC,, [Define if you have RLIMIT_NPROC for setrlimit()]) fi dnl * Do we have RLIMIT_CORE? AC_CACHE_CHECK([whether RLIMIT_CORE exists],i_cv_have_rlimit_core,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> ]], [[ struct rlimit r; getrlimit(RLIMIT_CORE, &r); ]])],[ i_cv_have_rlimit_core=yes ],[ i_cv_have_rlimit_core=no ]) ]) if test $i_cv_have_rlimit_core = yes; then AC_DEFINE(HAVE_RLIMIT_CORE,, [Define if you have RLIMIT_CORE for getrlimit()]) fi AC_CACHE_CHECK([whether PR_SET_DUMPABLE exists],i_cv_have_pr_set_dumpable,[ AC_TRY_LINK([ #include <sys/prctl.h> ], [ prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); ], [ i_cv_have_pr_set_dumpable=yes ], [ i_cv_have_pr_set_dumpable=no ]) ]) if test $i_cv_have_pr_set_dumpable = yes; then AC_DEFINE(HAVE_PR_SET_DUMPABLE,, [Define if you have prctl(PR_SET_DUMPABLE)]) fi dnl * Linux compatible mremap() AC_CACHE_CHECK([Linux compatible mremap()],i_cv_have_linux_mremap,[ AC_TRY_LINK([ #include <unistd.h> #define __USE_GNU #include <sys/mman.h> ], [ mremap(0, 0, 0, MREMAP_MAYMOVE); ], [ i_cv_have_linux_mremap=yes ], [ i_cv_have_linux_mremap=no ]) ]) if test $i_cv_have_linux_mremap = yes; then AC_DEFINE(HAVE_LINUX_MREMAP,, [Define if you have Linux-compatible mremap()]) fi dnl * If mmap() plays nicely with write() AC_CACHE_CHECK([whether shared mmaps get updated by write()s],i_cv_mmap_plays_with_write,[ AC_TRY_RUN([ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> int main() { /* return 0 if we're signed */ int f = open("conftest.mmap", O_RDWR|O_CREAT|O_TRUNC, 0600); void *mem; if (f == -1) { perror("open()"); return 1; } unlink("conftest.mmap"); write(f, "1", 2); mem = mmap(NULL, 2, PROT_READ|PROT_WRITE, MAP_SHARED, f, 0); if (mem == MAP_FAILED) { perror("mmap()"); return 1; } strcpy(mem, "2"); msync(mem, 2, MS_SYNC); lseek(f, 0, SEEK_SET); write(f, "3", 2); return strcmp(mem, "3") == 0 ? 0 : 1; } ], [ i_cv_mmap_plays_with_write=yes ], [ i_cv_mmap_plays_with_write=no ]) ]) if test $i_cv_mmap_plays_with_write = no; then AC_DEFINE(MMAP_CONFLICTS_WRITE,, [Define if shared mmaps don't get updated by write()s]) fi dnl * see if fd passing works AC_CACHE_CHECK([whether fd passing works],i_cv_fd_passing,[ for i in 1 2; do old_cflags="$CFLAGS" CFLAGS="$CFLAGS -I$srcdir/src/lib $srcdir/src/lib/fdpass.c" if test $i = 2; then CFLAGS="$CFLAGS -DBUGGY_CMSG_MACROS" fi AC_TRY_RUN([ #include <sys/types.h> #include <sys/socket.h> #include <sys/wait.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include "fdpass.h" int nopen(void) { int i, n; struct stat sb; for (i = n = 0; i < 256; i++) if (fstat(i, &sb) == 0) n++; return n; } int main(void) { int fd[2], send_fd, recv_fd, status, n1, n2; struct stat st, st2; char data; send_fd = creat("conftest.fdpass", 0600); if (send_fd == -1) return 2; unlink("conftest.fdpass"); if (fstat(send_fd, &st) < 0) return 2; if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) < 0) return 2; n1 = nopen(); switch (fork()) { case -1: return 2; case 0: alarm(1); if (fd_send(fd[0], send_fd, &data, 1) != 1) return 2; return 0; default: alarm(2); if (wait(&status) == -1) return 2; if (status != 0) return status; if (fd_read(fd[1], &data, 1, &recv_fd) != 1) return 1; if (fstat(recv_fd, &st2) < 0) return 2; /* nopen check is for making sure that only a single fd was received */ n2 = nopen(); return st.st_ino == st2.st_ino && n2 == n1 + 1 ? 0 : 1; } } ], [ CFLAGS=$old_cflags if test $i = 2; then i_cv_fd_passing=buggy_cmsg_macros else i_cv_fd_passing=yes fi break ], [ dnl no, try with BUGGY_CMSG_MACROS CFLAGS=$old_cflags i_cv_fd_passing=no ]) done ]); case "$host_os" in darwin[[1-9]].*) if test "$i_cv_fd_passing" = "yes"; then i_cv_fd_passing=buggy_cmsg_macros fi ;; esac if test $i_cv_fd_passing = buggy_cmsg_macros; then AC_DEFINE(BUGGY_CMSG_MACROS,, [Define if you have buggy CMSG macros]) fi if test $i_cv_fd_passing = no; then AC_ERROR([fd passing is required for Dovecot to work]) fi dnl * Solaris compatible sendfile() AC_CHECK_LIB(sendfile, sendfile, [ LIBS="$LIBS -lsendfile" AC_DEFINE(HAVE_SOLARIS_SENDFILE,, [Define if you have Solaris-compatible sendfile()]) ], [ dnl * Linux compatible sendfile() - don't check if Solaris one was found. dnl * This seems to pass with Solaris for some reason.. AC_CACHE_CHECK([Linux compatible sendfile()],i_cv_have_linux_sendfile,[ AC_TRY_LINK([ #undef _FILE_OFFSET_BITS #include <sys/types.h> #include <sys/socket.h> #include <sys/sendfile.h> ], [ sendfile(0, 0, (void *) 0, 0); ], [ i_cv_have_linux_sendfile=yes ], [ i_cv_have_linux_sendfile=no ]) ]) if test $i_cv_have_linux_sendfile = yes; then AC_DEFINE(HAVE_LINUX_SENDFILE,, [Define if you have Linux-compatible sendfile()]) fi dnl * FreeBSD compatible sendfile() AC_CACHE_CHECK([FreeBSD compatible sendfile()],i_cv_have_freebsd_sendfile,[ AC_TRY_LINK([ #include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h> ], [ struct sf_hdtr hdtr; sendfile(0, 0, 0, 0, &hdtr, (void *) 0, 0); ], [ i_cv_have_freebsd_sendfile=yes ], [ i_cv_have_freebsd_sendfile=no ]) ]) if test $i_cv_have_freebsd_sendfile = yes; then AC_DEFINE(HAVE_FREEBSD_SENDFILE,, [Define if you have FreeBSD-compatible sendfile()]) fi ]) AC_CACHE_CHECK([if unsetenv returns int],i_cv_unsetenv_ret_int,[ AC_TRY_COMPILE([ #include <stdlib.h> ], [ if (unsetenv("env") < 0) ; ], [ i_cv_unsetenv_ret_int=yes ], [ i_cv_unsetenv_ret_int=no ]) ]) if test $i_cv_unsetenv_ret_int = yes; then AC_DEFINE(UNSETENV_RET_INT,, [Define if unsetenv() returns int]) fi dnl * Check for crypt() if unistd.h compiles with _XOPEN_SOURCE + _XPG6 dnl * Add other macros there too "just in case". AC_CACHE_CHECK([if we should use _XPG6 macro for crypt()],i_cv_use_xpg6_crypt,[ AC_TRY_COMPILE([ #define _XOPEN_SOURCE 4 #define _XOPEN_SOURCE_EXTENDED 1 #define _XOPEN_VERSION 4 #define _XPG4_2 #define _XPG6 #include <unistd.h> ], [ crypt("a", "b"); ], [ i_cv_use_xpg6_crypt=yes ], [ i_cv_use_xpg6_crypt=no ]) ]) if test $i_cv_use_xpg6_crypt = yes; then AC_DEFINE(CRYPT_USE_XPG6,, [Define if _XPG6 macro is needed for crypt()]) fi AC_CACHE_CHECK([if struct stat has st_?tim timespec fields],i_cv_have_st_tim_timespec,[ AC_TRY_COMPILE([ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ], [ struct stat st; unsigned long x = st.st_mtim.tv_nsec; return 0; ], [ i_cv_have_st_tim_timespec=yes ], [ i_cv_have_st_tim_timespec=no ]) ]) if test $i_cv_have_st_tim_timespec = yes; then AC_DEFINE(HAVE_STAT_XTIM,, [Define if you have st_?tim timespec fields in struct stat]) fi AC_CACHE_CHECK([if struct stat has st_?timespec fields],i_cv_have_st_timespec,[ AC_TRY_COMPILE([ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ], [ struct stat st; unsigned long x = st.st_mtimespec.tv_nsec; return 0; ], [ i_cv_have_st_timespec=yes ], [ i_cv_have_st_timespec=no ]) ]) if test $i_cv_have_st_timespec = yes; then AC_DEFINE(HAVE_STAT_XTIMESPEC,, [Define if you have st_?timespec fields in struct stat]) fi dnl * Check if statvfs() can be used to find out block device for files AC_CACHE_CHECK([if statvfs.f_mntfromname exists],i_cv_have_statvfs_f_mntfromname,[ AC_TRY_COMPILE([ #include <sys/types.h> #include <sys/statvfs.h> ], [ struct statvfs buf; char *p = buf.f_mntfromname; statvfs(".", &buf); ], [ i_cv_have_statvfs_f_mntfromname=yes ], [ i_cv_have_statvfs_f_mntfromname=no ]) ]) if test $i_cv_have_statvfs_f_mntfromname = yes; then AC_DEFINE(HAVE_STATVFS_MNTFROMNAME,, [Define if you have statvfs.f_mntfromname]) fi dnl * Check if statfs() can be used to find out block device for files AC_CACHE_CHECK([if statfs.f_mntfromname exists],i_cv_have_statfs_f_mntfromname,[ AC_TRY_COMPILE([ #include <sys/param.h> #include <sys/mount.h> ], [ struct statfs buf; char *p = buf.f_mntfromname; statfs(".", &buf); ], [ i_cv_have_statfs_f_mntfromname=yes ], [ i_cv_have_statfs_f_mntfromname=no ]) ]) if test $i_cv_have_statfs_f_mntfromname = yes; then AC_DEFINE(HAVE_STATFS_MNTFROMNAME,, [Define if you have statfs.f_mntfromname]) fi dnl * Check if we have struct dqblk.dqb_curblocks AC_CACHE_CHECK([if struct dqblk.dqb_curblocks exists],i_cv_have_dqblk_dqb_curblocks,[ AC_TRY_COMPILE([ #include <sys/types.h> #include "$srcdir/src/plugins/quota/quota-fs.h" ], [ struct dqblk dqblk; unsigned int x = dqblk.dqb_curblocks; ], [ i_cv_have_dqblk_dqb_curblocks=yes ], [ i_cv_have_dqblk_dqb_curblocks=no ]) ]) if test $i_cv_have_dqblk_dqb_curblocks = yes; then AC_DEFINE(HAVE_STRUCT_DQBLK_CURBLOCKS,, [Define if struct sqblk.dqb_curblocks exists]) fi dnl * Check if we have struct dqblk.dqb_curspace AC_CACHE_CHECK([if struct dqblk.dqb_curspace exists],i_cv_have_dqblk_dqb_curspace,[ AC_TRY_COMPILE([ #include <sys/types.h> #include "$srcdir/src/plugins/quota/quota-fs.h" ], [ struct dqblk dqblk; unsigned int x = dqblk.dqb_curspace; ], [ i_cv_have_dqblk_dqb_curspace=yes ], [ i_cv_have_dqblk_dqb_curspace=no ]) ]) if test $i_cv_have_dqblk_dqb_curspace = yes; then AC_DEFINE(HAVE_STRUCT_DQBLK_CURSPACE,, [Define if struct sqblk.dqb_curspace exists]) fi dnl * Check if we have Q_QUOTACTL ioctl (Solaris) AC_CACHE_CHECK([if Q_QUOTACTL ioctl exists],i_cv_have_ioctl_q_quotactl,[ AC_TRY_COMPILE([ #include <sys/types.h> #include <sys/fs/ufs_quota.h> ], [ struct quotctl ctl; ioctl(0, Q_QUOTACTL, &ctl); ], [ i_cv_have_ioctl_q_quotactl=yes ], [ i_cv_have_ioctl_q_quotactl=no ]) ]) if test $i_cv_have_ioctl_q_quotactl = yes; then AC_DEFINE(HAVE_Q_QUOTACTL,, [Define if Q_QUOTACTL exists]) fi dnl *** dnl *** C99 vsnprintf()? dnl *** AC_CACHE_CHECK([for C99 vsnprintf()],i_cv_c99_vsnprintf,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <stdarg.h> static int f(const char *fmt, ...) { va_list args; char buf[13]; int ret; va_start(args, fmt); ret = vsnprintf(buf, 11, fmt, args) != 12 || buf[11-1] != '\0'; va_end(args); return ret; } int main() { return f("hello %s%d", "world", 1); }]])], [i_cv_c99_vsnprintf=yes], [i_cv_c99_vsnprintf=no]) ]) if test $i_cv_c99_vsnprintf = no; then AC_DEFINE(HAVE_OLD_VSNPRINTF,, [Define if you don't have C99 compatible vsnprintf() call]) fi dnl *** dnl *** va_copy checks (from GLIB) dnl *** AC_CACHE_CHECK([for an implementation of va_copy()],lib_cv_va_copy,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdlib.h> void f (int i, ...) { va_list args1, args2; va_start (args1, i); va_copy (args2, args1); if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) exit (1); va_end (args1); va_end (args2); } int main() { f (0, 42); return 0; }]])], [lib_cv_va_copy=yes], [lib_cv_va_copy=no],[]) ]) AC_CACHE_CHECK([for an implementation of __va_copy()],lib_cv___va_copy,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdlib.h> void f (int i, ...) { va_list args1, args2; va_start (args1, i); __va_copy (args2, args1); if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) exit (1); va_end (args1); va_end (args2); } int main() { f (0, 42); return 0; }]])], [lib_cv___va_copy=yes], [lib_cv___va_copy=no],[]) ]) if test "x$lib_cv_va_copy" = "xyes"; then va_copy_func=va_copy else if test "x$lib_cv___va_copy" = "xyes"; then va_copy_func=__va_copy fi fi if test -n "$va_copy_func"; then AC_DEFINE_UNQUOTED(VA_COPY,$va_copy_func,[A 'va_copy' style function]) fi AC_CACHE_CHECK([whether va_lists can be copied by value],lib_cv_va_val_copy,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdlib.h> void f (int i, ...) { va_list args1, args2; va_start (args1, i); args2 = args1; if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) exit (1); va_end (args1); va_end (args2); } int main() { f (0, 42); return 0; }]])], [lib_cv_va_val_copy=yes], [lib_cv_va_val_copy=no],[]) ]) if test "x$lib_cv_va_val_copy" = "xno"; then AC_DEFINE(VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copied as values]) fi dnl * dynamic modules? have_modules=no AC_CHECK_FUNC(dlopen, [ have_modules=yes MODULE_LIBS="-export-dynamic" ], [ AC_CHECK_LIB(dl, dlopen, [ have_modules=yes MODULE_LIBS="-export-dynamic -ldl" DLLIB=-ldl ]) ]) dnl ** dnl ** AIX mntctl dnl ** if test $ac_cv_header_sys_vmount_h = yes; then AC_MSG_CHECKING([for reasonable mntctl buffer size]) AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <sys/vmount.h> int main() { int size,count; char *m; FILE *f=fopen("conftestval", "w"); if (!f) exit(1); if ((count=mntctl(MCTL_QUERY,sizeof(size),&size))!=0 || !(m=malloc(size)) || (count=mntctl(MCTL_QUERY,size,m))<=0) exit(1); fprintf(f, "%d\n",(size * (count + 5))/count & ~1); /* 5 mounts more */ exit(0); } ]])],[ size=`cat conftestval` rm -f conftestval AC_DEFINE_UNQUOTED(STATIC_MTAB_SIZE,$size, [reasonable mntctl buffer size]) AC_MSG_RESULT($size) ],[ AC_MSG_RESULT(default) ]) fi dnl ** dnl ** SSL dnl ** have_ssl=no build_dcrypt_openssl=no if test $want_openssl != no && test $have_ssl = no; then if test "$PKG_CONFIG" != "" && $PKG_CONFIG --exists openssl 2>/dev/null; then PKG_CHECK_MODULES(SSL, openssl) CFLAGS="$CFLAGS $SSL_CFLAGS" have_openssl=yes else # openssl 0.9.8 wants -ldl and it's required if there's only .a lib AC_CHECK_LIB(ssl, SSL_read, [ AC_CHECK_HEADERS(openssl/ssl.h openssl/err.h, [ SSL_LIBS="-lssl -lcrypto $DLLIB" AC_SUBST(SSL_LIBS) have_openssl=yes ], [ if test $want_openssl = yes; then AC_ERROR([Can't build with OpenSSL: openssl/ssl.h or openssl/err.h not found]) fi ]) ], [ if test $want_openssl = yes; then AC_ERROR([Can't build with OpenSSL: libssl not found]) fi ], -lcrypto $DLLIB) fi if test "$have_openssl" = "yes"; then AC_DEFINE(HAVE_OPENSSL,, [Build with OpenSSL support]) have_ssl="yes (OpenSSL)" build_dcrypt_openssl="no" AC_MSG_CHECKING([if OpenSSL version is 1.0.2 or better]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <openssl/opensslv.h> #if OPENSSL_VERSION_NUMBER < 0x10002000L #error "fail-compile" #endif]], [[ return 0; ]])], [ssl_version_ge_102=true], [ssl_version_ge_102=false]) AC_MSG_RESULT([$ssl_version_ge_102]) # SSL_clear_options introduced in openssl 0.9.8m but may be backported to # older versions in "enterprise" OS releases; originally implemented as a # macro but as a function in more recent openssl versions AC_CACHE_CHECK([whether SSL_clear_options exists],i_cv_have_ssl_clear_options,[ old_LIBS=$LIBS LIBS="$LIBS -lssl" AC_TRY_LINK([ #include <openssl/ssl.h> ], [ SSL *ssl; long options; SSL_clear_options(ssl, options); ], [ i_cv_have_ssl_clear_options=yes ], [ i_cv_have_ssl_clear_options=no ]) LIBS=$old_LIBS ]) if test $i_cv_have_ssl_clear_options = yes; then AC_DEFINE(HAVE_SSL_CLEAR_OPTIONS,, [Define if you have SSL_clear_options]) fi # New style mem functions? Should be in v1.1+ AC_CACHE_CHECK([whether CRYPTO_set_mem_functions has new style parameters],i_cv_have_ssl_new_mem_funcs,[ old_LIBS=$LIBS LIBS="$LIBS -lssl" AC_TRY_LINK([ #include <openssl/ssl.h> int CRYPTO_set_mem_functions( void *(*m) (size_t, const char *, int), void *(*r) (void *, size_t, const char *, int), void (*f) (void *, const char *, int)); ], [ ], [ i_cv_have_ssl_new_mem_funcs=yes ], [ i_cv_have_ssl_new_mem_funcs=no ]) LIBS=$old_LIBS ]) if test $i_cv_have_ssl_new_mem_funcs = yes; then AC_DEFINE(HAVE_SSL_NEW_MEM_FUNCS,, [Define if CRYPTO_set_mem_functions has new style parameters]) fi AC_CHECK_LIB(ssl, ERR_remove_thread_state, [ AC_DEFINE(HAVE_OPENSSL_ERR_REMOVE_THREAD_STATE,, [Define if you have ERR_remove_thread_state]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, OPENSSL_thread_stop, [ AC_DEFINE(HAVE_OPENSSL_AUTO_THREAD_DEINIT,, [Define if OpenSSL performs thread cleanup automatically]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, OPENSSL_cleanup, [ AC_DEFINE(HAVE_OPENSSL_CLEANUP,, [OpenSSL supports OPENSSL_cleanup()]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, SSL_get_current_compression, [ AC_DEFINE(HAVE_SSL_COMPRESSION,, [Build with OpenSSL compression]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, SSL_get_servername, [ AC_DEFINE(HAVE_SSL_GET_SERVERNAME,, [Build with TLS hostname support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, SSL_COMP_free_compression_methods, [ AC_DEFINE(HAVE_SSL_COMP_FREE_COMPRESSION_METHODS,, [Build with SSL_COMP_free_compression_methods() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, RSA_generate_key_ex, [ AC_DEFINE(HAVE_RSA_GENERATE_KEY_EX,, [Build with RSA_generate_key_ex() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, ASN1_STRING_get0_data, [ AC_DEFINE(HAVE_ASN1_STRING_GET0_DATA,, [Build with ASN1_STRING_get0_data() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, HMAC_CTX_new, [ AC_DEFINE(HAVE_HMAC_CTX_NEW,, [Build with HMAC_CTX_new() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, EVP_MD_CTX_new, [ AC_DEFINE(HAVE_EVP_MD_CTX_NEW,, [Build with EVP_MD_CTX_new() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, OBJ_length, [ AC_DEFINE(HAVE_OBJ_LENGTH,, [Build with OBJ_length() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, EVP_PKEY_get0_RSA, [ AC_DEFINE(HAVE_EVP_PKEY_get0,, [Build with EVP_PKEY_get0_*() support]) ],, $SSL_LIBS) AC_CHECK_LIB(ssl, [EVP_PKEY_CTX_new_id], [have_evp_pkey_ctx_new_id="yes"],, $SSL_LIBS) AC_CHECK_LIB(ssl, [EC_KEY_new], [have_ec_key_new="yes"],, $SSL_LIBS) if test "$have_evp_pkey_ctx_new_id" = "yes" && test "$have_ec_key_new" = "yes"; then build_dcrypt_openssl="yes" else AC_MSG_WARN([No ECC support in OpenSSL - not enabling dcrypt]) fi fi fi AM_CONDITIONAL([SSL_VERSION_GE_102], [test x$ssl_version_ge_102 = xtrue]) AM_CONDITIONAL(BUILD_OPENSSL, test "$have_openssl" = "yes") AM_CONDITIONAL(BUILD_DCRYPT_OPENSSL, test "$build_dcrypt_openssl" = "yes") if test $want_gnutls != no && test $have_ssl = no; then AC_CHECK_LIB(gnutls, gnutls_global_init, [ AC_CHECK_HEADER(gnutls/gnutls.h, [ AC_DEFINE(HAVE_GNUTLS,, [Build with GNUTLS support]) SSL_LIBS="-lgnutls -lgcrypt" AC_SUBST(SSL_LIBS) have_ssl="yes (GNUTLS)" have_gnutls=yes ], [ if test $want_gnutls = yes; then AC_ERROR([Can't build with GNUTLS: gnutls/gnutls.h not found]) fi ]) ], [ if test $want_gnutls = yes; then AC_ERROR([Can't build with GNUTLS: libgnutls not found]) fi ], -lgcrypt) fi if test "$have_ssl" != "no"; then AC_DEFINE(HAVE_SSL,, [Build with SSL/TLS support]) fi dnl ** dnl ** Garbage Collector dnl ** if test $want_gc != no; then AC_CHECK_LIB(gc, GC_malloc, [ AC_CHECK_HEADERS(gc/gc.h gc.h) AC_DEFINE(USE_GC,, [Define if you want to use Boehm GC]) LIBS="$LIBS -lgc" ], [ if test $want_gc = yes; then AC_ERROR([Can't build with GC: libgc not found]) fi ]) fi dnl ** dnl ** userdb and passdb checks dnl ** userdb="" passdb="" not_userdb="" not_passdb="" passdb="$passdb static" userdb="$userdb static" if test $want_prefetch_userdb != no; then AC_DEFINE(USERDB_PREFETCH,, [Build with prefetch userdb support]) userdb="$userdb prefetch" else not_userdb="$not_userdb prefetch" fi if test $want_passwd != no; then AC_DEFINE(USERDB_PASSWD,, [Build with passwd support]) AC_DEFINE(PASSDB_PASSWD,, [Build with passwd support]) userdb="$userdb passwd" passdb="$passdb passwd" else not_passdb="$not_passdb passwd" not_userdb="$not_userdb passwd" fi if test $want_passwd_file != no; then AC_DEFINE(USERDB_PASSWD_FILE,, [Build with passwd-file support]) AC_DEFINE(PASSDB_PASSWD_FILE,, [Build with passwd-file support]) userdb="$userdb passwd-file" passdb="$passdb passwd-file" else not_passdb="$not_passdb passwd-file" not_userdb="$not_userdb passwd-file" fi have_shadow=no if test $want_shadow != no; then AC_CHECK_FUNC(getspnam, [ AC_CHECK_HEADER(shadow.h, [ AC_DEFINE(PASSDB_SHADOW,, [Build with shadow support]) have_shadow=yes ], [ if test $want_shadow = yes; then AC_ERROR([Can't build with shadow support: shadow.h not found]) fi ]) ], [ if test $want_shadow = yes; then AC_ERROR([Can't build with shadow support: getspnam() not found]) fi ]) fi if test $have_shadow = no; then not_passdb="$not_passdb shadow" else passdb="$passdb shadow" fi if test $want_pam != no; then AC_CHECK_LIB(pam, pam_start, [ have_pam=no AC_CHECK_HEADER(security/pam_appl.h, [ AC_DEFINE(HAVE_SECURITY_PAM_APPL_H,, [Define if you have security/pam_appl.h]) have_pam=yes ]) AC_CHECK_HEADER(pam/pam_appl.h, [ AC_DEFINE(HAVE_PAM_PAM_APPL_H,, [Define if you have pam/pam_appl.h]) have_pam=yes ]) ], [ if test $want_pam = yes; then AC_ERROR([Can't build with PAM support: libpam not found]) fi ]) fi if test "$have_pam" = "yes"; then AUTH_LIBS="$AUTH_LIBS -lpam" AC_DEFINE(PASSDB_PAM,, [Build with PAM support]) passdb="$passdb pam" AC_CHECK_LIB(pam, pam_setcred, [ AC_DEFINE(HAVE_PAM_SETCRED,, [Define if you have pam_setcred()]) ]) elif test $want_pam = yes; then AC_ERROR([Can't build with PAM support: pam_appl.h not found]) else not_passdb="$not_passdb pam" fi if test $want_checkpassword != no; then AC_DEFINE(PASSDB_CHECKPASSWORD,, [Build with checkpassword passdb support]) AC_DEFINE(USERDB_CHECKPASSWORD,, [Build with checkpassword userdb support]) passdb="$passdb checkpassword" userdb="$userdb checkpassword" else not_passdb="$not_passdb checkpassword" not_userdb="$not_userdb checkpassword" fi have_bsdauth=no if test $want_bsdauth != no; then AC_CHECK_FUNC(auth_userokay, [ AC_DEFINE(PASSDB_BSDAUTH,, [Build with BSD authentication support]) have_bsdauth=yes ], [ if test $want_bsdauth = yes; then AC_ERROR([Can't build with BSD authentication support: auth_userokay() not found]) fi ]) fi if test $have_bsdauth = no; then not_passdb="$not_passdb bsdauth" else passdb="$passdb bsdauth" fi have_gssapi=no if test $want_gssapi != no; then AC_CHECK_PROG(KRB5CONFIG, krb5-config, krb5-config, NO) if test $KRB5CONFIG != NO; then if ! $KRB5CONFIG --version gssapi 2>/dev/null > /dev/null; then # krb5-config doesn't support gssapi. KRB5_LIBS="`$KRB5CONFIG --libs`" KRB5_CFLAGS=`$KRB5CONFIG --cflags` AC_CHECK_LIB(gss, gss_acquire_cred, [ # Solaris KRB5_LIBS="$KRB5_LIBS -lgss" ], [ # failed KRB5_LIBS= ], $KRB5_LIBS) else KRB5_LIBS=`$KRB5CONFIG --libs gssapi` KRB5_CFLAGS=`$KRB5CONFIG --cflags gssapi` fi if test "$KRB5_LIBS" != ""; then AC_SUBST(KRB5_LIBS) AC_SUBST(KRB5_CFLAGS) # Although krb5-config exists, all systems still don't # have gssapi.h old_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $KRB5_CFLAGS" AC_CHECK_HEADER([gssapi/gssapi.h], [ AC_DEFINE(HAVE_GSSAPI_GSSAPI_H,, [GSSAPI headers in gssapi/gssapi.h]) have_gssapi=yes ]) AC_CHECK_HEADER([gssapi.h], [ AC_DEFINE(HAVE_GSSAPI_H,, [GSSAPI headers in gssapi.h]) have_gssapi=yes ]) if test $have_gssapi != no; then if test $want_gssapi = plugin; then have_gssapi=plugin fi AC_DEFINE(HAVE_GSSAPI,, [Build with GSSAPI support]) AC_CHECK_HEADERS(gssapi/gssapi_ext.h gssapi_krb5.h gssapi/gssapi_krb5.h) AC_CHECK_LIB(gss, __gss_userok, [ AC_DEFINE(HAVE___GSS_USEROK,, [Define if you have __gss_userok()]) KRB5_LIBS="$KRB5_LIBS -lgss" ],, $KRB5_LIBS) # MIT has a #define for Heimdal acceptor_identity, but it's way too # difficult to test for it.. old_LIBS=$LIBS LIBS="$LIBS $KRB5_LIBS" AC_CHECK_FUNCS(gsskrb5_register_acceptor_identity krb5_gss_register_acceptor_identity) # does the kerberos library support SPNEGO? AC_CACHE_CHECK([whether GSSAPI supports SPNEGO],i_cv_gssapi_spnego,[ AC_TRY_RUN([ #ifdef HAVE_GSSAPI_H # include <gssapi.h> #else # include <gssapi/gssapi.h> #endif #include <krb5.h> #include <string.h> int main(void) { OM_uint32 minor_status; gss_OID_set mech_set; unsigned char spnego_oid[] = { 0x2b, 0x06, 0x01, 0x05, 0x05, 0x02 }; unsigned int i; gss_indicate_mechs(&minor_status, &mech_set); for (i = 0; i < mech_set->count; i++) { if (mech_set->elements[i].length == 6 && memcmp(mech_set->elements[i].elements, spnego_oid, 6) == 0) return 0; } return 1; } ], [ i_cv_gssapi_spnego=yes ], [ i_cv_gssapi_spnego=no ]) ]) if test "$i_cv_gssapi_spnego" = "yes"; then AC_DEFINE(HAVE_GSSAPI_SPNEGO,, [GSSAPI supports SPNEGO]) fi LIBS=$old_LIBS if test $want_gssapi != plugin; then AUTH_LIBS="$AUTH_LIBS $KRB5_LIBS" AUTH_CFLAGS="$AUTH_CFLAGS $KRB5_CFLAGS" AC_DEFINE(BUILTIN_GSSAPI,, [GSSAPI support is built in]) else have_gssapi_plugin=yes fi else if test $want_gssapi != auto; then AC_ERROR([Can't build with GSSAPI support: gssapi.h not found]) fi fi CFLAGS=$old_CFLAGS fi else if test $want_gssapi != auto; then AC_ERROR([Can't build with GSSAPI support: krb5-config not found]) fi fi fi AM_CONDITIONAL(GSSAPI_PLUGIN, test "$have_gssapi_plugin" = "yes") have_sia=no if test $want_sia != no; then AC_CHECK_FUNC(sia_validate_user, [ AC_DEFINE(PASSDB_SIA,, [Build with Tru64 SIA support]) AUTH_LIBS="$AUTH_LIBS -depth_ring_search" have_sia=yes ], [ if test $want_sia = yes; then AC_ERROR([Can't build with SIA support: sia_validate_user() not found]) fi ]) fi if test $have_sia = no; then not_passdb="$not_passdb sia" else passdb="$passdb sia" fi have_ldap=no if test $want_ldap != no; then AC_CHECK_LIB(ldap, ldap_init, [ AC_CHECK_HEADER(ldap.h, [ AC_CHECK_LIB(ldap, ldap_initialize, [ AC_DEFINE(LDAP_HAVE_INITIALIZE,, [Define if you have ldap_initialize]) ]) AC_CHECK_LIB(ldap, ldap_start_tls_s, [ AC_DEFINE(LDAP_HAVE_START_TLS_S,, [Define if you have ldap_start_tls_s]) ]) LDAP_LIBS="-lldap" AC_CHECK_LIB(ldap, ber_free, [ # do nothing, default is to add -lldap to LIBS : ], [ AC_CHECK_LIB(lber, ber_free, [ LDAP_LIBS="$LDAP_LIBS -llber" ]) ]) AC_SUBST(LDAP_LIBS) if test $want_ldap != plugin; then AUTH_LIBS="$AUTH_LIBS $LDAP_LIBS" AC_DEFINE(BUILTIN_LDAP,, [LDAP support is built in]) fi AC_DEFINE(USERDB_LDAP,, [Build with LDAP support]) AC_DEFINE(PASSDB_LDAP,, [Build with LDAP support]) AC_CHECK_HEADERS(sasl.h sasl/sasl.h) have_ldap=yes ], [ if test $want_ldap != auto; then AC_ERROR([Can't build with LDAP support: ldap.h not found]) fi ]) ], [ if test $want_ldap != auto; then AC_ERROR([Can't build with LDAP support: libldap not found]) fi ]) fi if test $have_ldap = no; then not_passdb="$not_passdb ldap" not_userdb="$not_userdb ldap" else userdb="$userdb ldap" passdb="$passdb ldap" if test $want_ldap = plugin; then have_ldap_plugin=yes userdb="$userdb (plugin)" passdb="$passdb (plugin)" fi fi AM_CONDITIONAL(LDAP_PLUGIN, test "$have_ldap_plugin" = "yes") AM_CONDITIONAL(HAVE_LDAP, test "$want_ldap" != "no") dict_drivers= if test $want_db != no; then AC_CACHE_CHECK([db_env_create in -ldb],i_cv_have_db_env_create,[ old_LIBS=$LIBS LIBS="$LIBS -ldb" AC_TRY_LINK([ #include <db.h> ], [ db_env_create(0, 0); ], [ i_cv_have_db_env_create=yes ], [ i_cv_have_db_env_create=no ]) LIBS=$old_LIBS ]) if test $i_cv_have_db_env_create = yes; then AC_CHECK_HEADER(db.h, [ DICT_LIBS="$DICT_LIBS -ldb" dict_drivers="$dict_drivers db" AC_DEFINE(BUILD_DB,, [Build with Berkeley DB support]) ], [ if test $want_db = yes; then AC_ERROR([Can't build with db support: db.h not found]) fi ]) else if test $want_db = yes; then AC_ERROR([Can't build with db support: libdb not found]) fi fi fi if test $want_cdb != no; then AC_CHECK_LIB(cdb, cdb_init, [ AC_CHECK_HEADER(cdb.h, [ DICT_LIBS="$DICT_LIBS -lcdb" dict_drivers="$dict_drivers cdb" AC_DEFINE(BUILD_CDB,, [Build with CDB support]) ], [ if test $want_cdb = yes; then AC_ERROR([Can't build with CDB support: cdb.h not found]) fi ]) ], [ if test $want_cdb = yes; then AC_ERROR([Can't build with CDB support: libcdb not found]) fi ]) fi if test $want_pgsql != no; then AC_CHECK_PROG(PG_CONFIG, pg_config, pg_config, NO) if test $PG_CONFIG = NO; then # based on code from PHP for i in /usr /usr/local /usr/local/pgsql; do for j in include include/pgsql include/postgres include/postgresql ""; do if test -r "$i/$j/libpq-fe.h"; then PGSQL_INCLUDE=$i/$j fi done for lib in lib lib64; do for j in $lib $lib/pgsql $lib/postgres $lib/postgresql ""; do if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then PGSQL_LIBDIR=$i/$j fi done done done else PGSQL_INCLUDE="`$PG_CONFIG --includedir`" PGSQL_LIBDIR="`$PG_CONFIG --libdir`" fi old_LIBS=$LIBS if test "$PGSQL_LIBDIR" != ""; then LIBS="$LIBS -L$PGSQL_LIBDIR" fi AC_CHECK_LIB(pq, PQconnectdb, [ AC_CHECK_LIB(pq, PQescapeStringConn, [ AC_DEFINE(HAVE_PQESCAPE_STRING_CONN,, [Define if libpq has PQescapeStringConn function]) ]) old_CPPFLAGS=$CPPFLAGS if test "$PGSQL_INCLUDE" != ""; then CPPFLAGS="$CPPFLAGS -I$PGSQL_INCLUDE" fi AC_CHECK_HEADER(libpq-fe.h, [ if test "$PGSQL_INCLUDE" != ""; then PGSQL_CFLAGS="$PGSQL_CFLAGS -I$PGSQL_INCLUDE" fi if test "$PGSQL_LIBDIR" != ""; then PGSQL_LIBS="$PGSQL_LIBS -L$PGSQL_LIBDIR" fi PGSQL_LIBS="$PGSQL_LIBS -lpq" AC_DEFINE(HAVE_PGSQL,, [Build with PostgreSQL support]) found_sql_drivers="$found_sql_drivers pgsql" ], [ if test $want_pgsql = yes; then AC_ERROR([Can't build with PostgreSQL support: libpq-fe.h not found]) fi ]) CPPFLAGS=$old_CPPFLAGS ], [ if test $want_pgsql = yes; then AC_ERROR([Can't build with PostgreSQL support: libpq not found]) fi ]) LIBS=$old_LIBS fi have_mysql=no if test $want_mysql != no; then AC_CHECK_PROG(MYSQL_CONFIG, mysql_config, mysql_config, NO) if test $MYSQL_CONFIG = NO; then # based on code from PHP MYSQL_LIBS="-lmysqlclient -lz -lm" for i in /usr /usr/local /usr/local/mysql; do for j in include include/mysql ""; do if test -r "$i/$j/mysql.h"; then MYSQL_INCLUDE="-I$i/$j" fi done for j in lib lib/mysql lib64 lib64/mysql ""; do if test -f "$i/$j/libmysqlclient.so" || test -f "$i/$j/libmysqlclient.a"; then MYSQL_LIBS="-L$i/$j -lmysqlclient -lz -lm" fi done done else MYSQL_INCLUDE="`$MYSQL_CONFIG --include`" MYSQL_LIBS="`$MYSQL_CONFIG --libs`" fi old_LIBS=$LIBS if test "$MYSQL_LIBS" != ""; then LIBS="$LIBS $MYSQL_LIBS" fi mysql_lib="" LIBS="$LIBS -lz -lm" AC_CHECK_LIB(mysqlclient, mysql_init, [ old_CPPFLAGS=$CPPFLAGS if test "$MYSQL_INCLUDE" != ""; then CPPFLAGS="$CPPFLAGS $MYSQL_INCLUDE" fi AC_CHECK_HEADER(mysql.h, [ if test "$MYSQL_INCLUDE" != ""; then MYSQL_CFLAGS="$MYSQL_CFLAGS $MYSQL_INCLUDE" fi AC_CHECK_LIB(mysqlclient, mysql_ssl_set, [ AC_DEFINE(HAVE_MYSQL_SSL,, [Define if your MySQL library has SSL functions]) if test "x$have_openssl" = "yes"; then ssl_define="#define HAVE_OPENSSL" else ssl_define="" fi AC_TRY_COMPILE([ $ssl_define #include <mysql.h> ], [ mysql_ssl_set(0, 0, 0, 0, 0, 0); ], [ AC_DEFINE(HAVE_MYSQL_SSL_CIPHER,, [Define if your MySQL library supports setting cipher]) AC_TRY_COMPILE([ $ssl_define #include <mysql.h> ], [ int i = MYSQL_OPT_SSL_VERIFY_SERVER_CERT; ], [ AC_DEFINE(HAVE_MYSQL_SSL_VERIFY_SERVER_CERT,, [Define if your MySQL library supports verifying the name in the SSL certificate]) ]) ]) ]) have_mysql=yes AC_DEFINE(HAVE_MYSQL,, [Build with MySQL support]) found_sql_drivers="$found_sql_drivers mysql" ], [ if test $want_mysql = yes; then AC_ERROR([Can't build with MySQL support: mysql.h not found]) fi ]) CPPFLAGS=$old_CPPFLAGS ], [ if test $want_mysql = yes; then AC_ERROR([Can't build with MySQL support: libmysqlclient not found]) fi ]) if test $have_mysql != yes; then MYSQL_LIBS= MYSQL_CFLAGS= fi LIBS=$old_LIBS fi if test $want_sqlite != no; then AC_CHECK_LIB(sqlite3, sqlite3_open, [ AC_CHECK_HEADER(sqlite3.h, [ SQLITE_LIBS="$SQLITE_LIBS -lsqlite3" AC_DEFINE(HAVE_SQLITE,, [Build with SQLite3 support]) found_sql_drivers="$found_sql_drivers sqlite" ], [ if test $want_sqlite = yes; then AC_ERROR([Can't build with SQLite support: sqlite3.h not found]) fi ]) ], [ if test $want_sqlite = yes; then AC_ERROR([Can't build with SQLite support: libsqlite3 not found]) fi ]) fi if test $want_cassandra != no; then AC_CHECK_LIB(cassandra, cass_session_new, [ AC_CHECK_HEADER(cassandra.h, [ CASSANDRA_LIBS="$CASSANDRA_LIBS -lcassandra" AC_DEFINE(HAVE_CASSANDRA,, [Build with Cassandra support]) found_sql_drivers="$found_sql_drivers cassandra" AC_CHECK_LIB(cassandra, cass_cluster_set_constant_speculative_execution_policy, [ AC_DEFINE(HAVE_CASSANDRA_SPECULATIVE_POLICY, 1, [Cassandra supports speculative execution policy]) ]) ], [ if test $want_cassandra = yes; then AC_ERROR([Can't build with Cassandra support: cassandra.h not found]) fi ]) ], [ if test $want_cassandra = yes; then AC_ERROR([Can't build with Cassandra support: libcassandra not found]) fi ]) fi SQL_CFLAGS="$MYSQL_CFLAGS $PGSQL_CFLAGS $SQLITE_CFLAGS $CASSANDRA_CFLAGS" if test "$want_sql" != "plugin"; then SQL_LIBS="$MYSQL_LIBS $PGSQL_LIBS $SQLITE_LIBS $CASSANDRA_LIBS" else AC_DEFINE(SQL_DRIVER_PLUGINS,, [Build SQL drivers as plugins]) fi sql_drivers= not_sql_drivers= if test "$found_sql_drivers" != "" || test "$want_sql" != "no"; then sql_drivers="$found_sql_drivers" AC_DEFINE(PASSDB_SQL,, [Build with SQL support]) AC_DEFINE(USERDB_SQL,, [Build with SQL support]) AUTH_LIBS="$AUTH_LIBS $SQL_LIBS" passdb="$passdb sql" userdb="$userdb sql" else not_passdb="$not_passdb sql" not_userdb="$not_userdb sql" fi have_vpopmail=no if test $want_vpopmail != no; then vpop_etc="$vpopmail_home/etc" AC_MSG_CHECKING([for vpopmail configuration at $vpop_etc/lib_deps]) if ! test -f $vpop_etc/lib_deps; then AC_MSG_RESULT(not found) vpop_etc="$vpopmail_home" AC_MSG_CHECKING([for vpopmail configuration at $vpop_etc/lib_deps]) fi if test -f $vpop_etc/lib_deps; then AUTH_CFLAGS="$AUTH_CFLAGS `cat $vpop_etc/inc_deps` $CFLAGS" AUTH_LIBS="$AUTH_LIBS `cat $vpop_etc/lib_deps`" AC_DEFINE(USERDB_VPOPMAIL,, [Build with vpopmail support]) AC_DEFINE(PASSDB_VPOPMAIL,, [Build with vpopmail support]) AC_MSG_RESULT(found) have_vpopmail=yes else AC_MSG_RESULT(not found) if test $want_vpopmail = yes; then AC_ERROR([Can't build with vpopmail support: $vpop_etc/lib_deps not found]) fi fi fi if test $have_vpopmail = no; then not_passdb="$not_passdb vpopmail" not_userdb="$not_userdb vpopmail" else userdb="$userdb vpopmail" passdb="$passdb vpopmail" fi AC_CHECK_FUNC(crypt,, [ AC_CHECK_LIB(crypt, crypt, [ AUTH_LIBS="-lcrypt $AUTH_LIBS" CRYPT_LIBS="-lcrypt" ], [ AC_MSG_ERROR([crypt() wasn't found]) ]) ]) AC_SUBST(CRYPT_LIBS) if test $have_modules = yes; then AC_DEFINE(HAVE_MODULES,, [Define if you have dynamic module support]) AC_SUBST(MODULE_LIBS) # shrext_cmds comes from libtool.m4 module=yes eval MODULE_SUFFIX=$shrext_cmds if test "$MODULE_SUFFIX" = ""; then # too old libtool? MODULE_SUFFIX=.so fi AC_DEFINE_UNQUOTED(MODULE_SUFFIX,"$MODULE_SUFFIX", [Dynamic module suffix]) AC_SUBST(MODULE_SUFFIX) fi have_nss=no if test $want_nss != no; then if test $have_modules != yes; then if test $want_nss = yes; then AC_ERROR([Can't build with NSS support: Dynamic modules not supported]) fi else AC_CACHE_CHECK([for NSS support],i_cv_have_nss,[ AC_TRY_COMPILE([ #include <nss.h> ], [ enum nss_status status = NSS_STATUS_TRYAGAIN; ], [ i_cv_have_nss=yes ], [ i_cv_have_nss=no ]) ]) if test $i_cv_have_nss = yes; then AC_DEFINE(USERDB_NSS,, [Build with NSS module support]) have_nss=yes else if test $want_nss = yes; then AC_ERROR([Can't build with NSS support: nss.h not found or not usable]) fi fi fi fi if test $have_nss = no; then not_userdb="$not_userdb nss" else userdb="$userdb nss" fi AC_SUBST(AUTH_CFLAGS) AC_SUBST(AUTH_LIBS) AC_SUBST(SQL_CFLAGS) AC_SUBST(SQL_LIBS) AC_SUBST(MYSQL_CFLAGS) AC_SUBST(MYSQL_LIBS) AC_SUBST(PGSQL_CFLAGS) AC_SUBST(PGSQL_LIBS) AC_SUBST(SQLITE_CFLAGS) AC_SUBST(SQLITE_LIBS) AC_SUBST(CASSANDRA_CFLAGS) AC_SUBST(CASSANDRA_LIBS) AC_SUBST(DICT_LIBS) AC_SUBST(CDB_LIBS) AC_SUBST(dict_drivers) dnl ** dnl ** Endianess dnl ** dnl At least Apple's gcc supports __BIG_ENDIAN__ and __LITTLE_ENDIAN__ dnl defines. Use them if possible to allow cross-compiling. AC_CACHE_CHECK([if __BIG_ENDIAN__ or __LITTLE_ENDIAN__ is defined],i_cv_have___big_endian__,[ AC_TRY_COMPILE([ #if !(__BIG_ENDIAN__ || __LITTLE_ENDIAN__) #error nope #endif ], [ ], [ i_cv_have___big_endian__=yes ], [ i_cv_have___big_endian__=no ]) ]) if test $i_cv_have___big_endian__ = yes; then AC_DEFINE(WORDS_BIGENDIAN, __BIG_ENDIAN__, [Define if your CPU is big endian]) else AC_C_BIGENDIAN fi dnl ** dnl ** IPv6 support dnl ** have_ipv6=no AC_MSG_CHECKING([for IPv6]) AC_CACHE_VAL(i_cv_type_in6_addr, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h>]], [[struct in6_addr i;]])], [i_cv_type_in6_addr=yes], [i_cv_type_in6_addr=no])]) if test $i_cv_type_in6_addr = yes; then AC_DEFINE(HAVE_IPV6,, [Build with IPv6 support]) have_ipv6=yes fi AC_MSG_RESULT($i_cv_type_in6_addr) dnl ** dnl ** storage classes dnl ** maildir_libs='$(top_builddir)/src/lib-storage/index/maildir/libstorage_maildir.la' mbox_libs='$(top_builddir)/src/lib-storage/index/mbox/libstorage_mbox.la' dbox_common_libs='$(top_builddir)/src/lib-storage/index/dbox-common/libstorage_dbox_common.la' sdbox_libs='$(top_builddir)/src/lib-storage/index/dbox-single/libstorage_dbox_single.la' mdbox_libs='$(top_builddir)/src/lib-storage/index/dbox-multi/libstorage_dbox_multi.la' cydir_libs='$(top_builddir)/src/lib-storage/index/cydir/libstorage_cydir.la' imapc_libs='$(top_builddir)/src/lib-storage/index/imapc/libstorage_imapc.la $(top_builddir)/src/lib-imap-client/libimap_client.la' pop3c_libs='$(top_builddir)/src/lib-storage/index/pop3c/libstorage_pop3c.la' raw_libs='$(top_builddir)/src/lib-storage/index/raw/libstorage_raw.la' shared_libs='$(top_builddir)/src/lib-storage/index/shared/libstorage_shared.la' CORE_LIBS='$(top_builddir)/src/lib-dovecot/libdovecot.la' STORAGE_LIB='$(top_builddir)/src/lib-storage/libdovecot-storage.la' LINKED_STORAGE_LIBS= mailbox_list_drivers="maildir imapdir fs index none shared" have_sdbox=no have_mdbox=no for storage in $mail_storages; do LINKED_STORAGE_LIBS="$LINKED_STORAGE_LIBS `eval echo \\$${storage}_libs`" if test $storage = sdbox; then have_sdbox=yes fi if test $storage = mdbox; then have_mdbox=yes fi if test $storage = sdbox || test $storage = mdbox; then LINKED_STORAGE_LIBS="$LINKED_STORAGE_LIBS $dbox_common_libs" dbox_common_libs="" fi if test $storage = imapc; then mailbox_list_drivers="$mailbox_list_drivers imapc" fi done LINKED_STORAGE_LDADD= AC_SUBST(LINKED_STORAGE_LIBS) AC_SUBST(LINKED_STORAGE_LDADD) AC_SUBST(mailbox_list_drivers) AC_DEFINE_UNQUOTED(MAIL_STORAGES, "$mail_storages", [List of compiled in mail storages]) if test $have_sdbox = yes; then # create alias for sdbox mail_storages="$mail_storages dbox" fi if test $have_mdbox = yes; then mail_storages="$mail_storages mdbox_deleted" fi dnl ** dnl ** Shared libraries usage dnl ** LIBDOVECOT_LA_LIBS='$(top_builddir)/src/lib-dict-extra/libdict_extra.la $(top_builddir)/src/lib-oauth2/liboauth2.la $(top_builddir)/src/lib-program-client/libprogram_client.la $(top_builddir)/src/lib-master/libmaster.la $(top_builddir)/src/lib-settings/libsettings.la $(top_builddir)/src/lib-stats/libstats.la $(top_builddir)/src/lib-http/libhttp.la $(top_builddir)/src/lib-fs/libfs.la $(top_builddir)/src/lib-dict/libdict.la $(top_builddir)/src/lib-smtp/libsmtp.la $(top_builddir)/src/lib-dns/libdns.la $(top_builddir)/src/lib-imap/libimap.la $(top_builddir)/src/lib-mail/libmail.la $(top_builddir)/src/lib-sasl/libsasl.la $(top_builddir)/src/lib-auth/libauth.la $(top_builddir)/src/lib-charset/libcharset.la $(top_builddir)/src/lib-ssl-iostream/libssl_iostream.la $(top_builddir)/src/lib-dcrypt/libdcrypt.la $(top_builddir)/src/lib-test/libtest.la $(top_builddir)/src/lib/liblib.la' if test "$want_shared_libs" = "yes"; then LIBDOVECOT_DEPS='$(top_builddir)/src/lib-dovecot/libdovecot.la' LIBDOVECOT="$LIBDOVECOT_DEPS \$(MODULE_LIBS)" LIBDOVECOT_STORAGE_DEPS='$(top_builddir)/src/lib-storage/libdovecot-storage.la $(top_builddir)/src/lib-imap-storage/libimap-storage.la' LIBDOVECOT_LOGIN='$(top_builddir)/src/login-common/libdovecot-login.la' LIBDOVECOT_LDA='$(top_builddir)/src/lib-lda/libdovecot-lda.la' else LIBDOVECOT_DEPS="$LIBDOVECOT_LA_LIBS" LIBDOVECOT="$LIBDOVECOT_DEPS \$(LIBICONV) \$(MODULE_LIBS)" LIBDOVECOT_STORAGE_DEPS='$(top_builddir)/src/lib-storage/libstorage.la' LIBDOVECOT_LOGIN='$(top_builddir)/src/login-common/liblogin.la' LIBDOVECOT_LDA='$(top_builddir)/src/lib-lda/liblda.la' fi if test $want_ldap != no; then LIBDOVECOT_LDAP='$(top_builddir)/src/lib-ldap/libdovecot-ldap.la' else LIBDOVECOT_LDAP='' fi LIBDOVECOT_STORAGE="$LIBDOVECOT_STORAGE_DEPS" LIBDOVECOT_DSYNC='$(top_builddir)/src/doveadm/dsync/libdovecot-dsync.la' LIBDOVECOT_SQL='$(top_builddir)/src/lib-sql/libsql.la' LIBDOVECOT_COMPRESS='$(top_builddir)/src/lib-compression/libcompression.la' LIBDOVECOT_LIBFTS='$(top_builddir)/src/lib-fts/libfts.la' AC_SUBST(LIBDOVECOT) AC_SUBST(LIBDOVECOT_LA_LIBS) AC_SUBST(LIBDOVECOT_DEPS) AC_SUBST(LIBDOVECOT_STORAGE) AC_SUBST(LIBDOVECOT_STORAGE_DEPS) AC_SUBST(LIBDOVECOT_LOGIN) AC_SUBST(LIBDOVECOT_SQL) AC_SUBST(LIBDOVECOT_COMPRESS) AC_SUBST(LIBDOVECOT_DSYNC) AC_SUBST(LIBDOVECOT_LDA) AC_SUBST(LIBDOVECOT_LDAP) AC_SUBST(LIBDOVECOT_LIBFTS) AC_SUBST(LIBDOVECOT_LIBFTS_DEPS) dnl ** dnl ** SQL drivers dnl ** build_pgsql=no build_mysql=no build_sqlite=no build_cassandra=no for driver in $sql_drivers; do if test "$driver" = "pgsql"; then AC_DEFINE(BUILD_PGSQL,, [Built-in PostgreSQL support]) build_pgsql=yes elif test "$driver" = "mysql"; then AC_DEFINE(BUILD_MYSQL,, [Built-in MySQL support]) build_mysql=yes elif test "$driver" = "sqlite"; then AC_DEFINE(BUILD_SQLITE,, [Built-in SQLite support]) build_sqlite=yes elif test "$driver" = "cassandra"; then AC_DEFINE(BUILD_CASSANDRA,, [Built-in Cassandra support]) build_cassandra=yes fi done if test $build_pgsql = no; then not_sql_drivers="$not_sql_drivers pgsql" fi if test $build_mysql = no; then not_sql_drivers="$not_sql_drivers mysql" fi if test $build_sqlite = no; then not_sql_drivers="$not_sql_drivers sqlite" fi if test $build_cassandra = no; then not_sql_drivers="$not_sql_drivers cassandra" fi AC_SUBST(sql_drivers) AM_CONDITIONAL(BUILD_PGSQL, test "$build_pgsql" = "yes") AM_CONDITIONAL(BUILD_MYSQL, test "$build_mysql" = "yes") AM_CONDITIONAL(BUILD_SQLITE, test "$build_sqlite" = "yes") AM_CONDITIONAL(BUILD_CASSANDRA, test "$build_cassandra" = "yes") AM_CONDITIONAL(SQL_PLUGINS, test "$want_sql" = "plugin") dnl ** dnl ** Plugins dnl ** COMPRESS_LIBS= if test "$want_zlib" != "no"; then AC_CHECK_HEADER(zlib.h, [ have_zlib=yes have_compress_lib=yes AC_DEFINE(HAVE_ZLIB,, [Define if you have zlib library]) COMPRESS_LIBS="$COMPRESS_LIBS -lz" ], [ if test "$want_zlib" = "yes"; then AC_ERROR([Can't build with zlib support: zlib.h not found]) fi ]) fi if test "$want_bzlib" != "no"; then AC_CHECK_HEADER(bzlib.h, [ AC_CHECK_LIB(bz2, BZ2_bzdopen, [ have_bzlib=yes have_compress_lib=yes AC_DEFINE(HAVE_BZLIB,, [Define if you have bzlib library]) COMPRESS_LIBS="$COMPRESS_LIBS -lbz2" ], [ if test "$want_bzlib" = "yes"; then AC_ERROR([Can't build with bzlib support: libbz2 not found]) fi ]) ], [ if test "$want_bzlib" = "yes"; then AC_ERROR([Can't build with bzlib support: bzlib.h not found]) fi ]) fi if test "$want_lzma" != "no"; then AC_CHECK_HEADER(lzma.h, [ AC_CHECK_LIB(lzma, lzma_stream_decoder, [ have_lzma=yes have_compress_lib=yes AC_DEFINE(HAVE_LZMA,, [Define if you have lzma library]) COMPRESS_LIBS="$COMPRESS_LIBS -llzma" ], [ if test "$want_lzma" = "yes"; then AC_ERROR([Can't build with lzma support: liblzma not found]) fi ]) ], [ if test "$want_lzma" = "yes"; then AC_ERROR([Can't build with lzma support: lzma.h not found]) fi ]) fi AC_SUBST(COMPRESS_LIBS) if test "$want_lz4" != "no"; then AC_CHECK_HEADER(lz4.h, [ AC_CHECK_LIB(lz4, LZ4_compress, [ have_lz4=yes have_compress_lib=yes AC_DEFINE(HAVE_LZ4,, [Define if you have lz4 library]) COMPRESS_LIBS="$COMPRESS_LIBS -llz4" ], [ if test "$want_lz4" = "yes"; then AC_ERROR([Can't build with lz4 support: liblz4 not found]) fi ]) AC_CHECK_LIB(lz4, LZ4_compress_default, [ AC_DEFINE(HAVE_LZ4_COMPRESS_DEFAULT,, [Define if you have LZ4_compress_default]) ], [ ]) ], [ if test "$want_lz4" = "yes"; then AC_ERROR([Can't build with lz4 support: lz4.h not found]) fi ]) fi AC_SUBST(COMPRESS_LIBS) AM_CONDITIONAL(BUILD_ZLIB_PLUGIN, test "$have_compress_lib" = "yes") RPCGEN=${RPCGEN-rpcgen} if ! $RPCGEN -c /dev/null > /dev/null; then RPCGEN= fi AC_SUBST(RPCGEN) have_rquota=no if test -f /usr/include/rpcsvc/rquota.x && test -n "$RPCGEN"; then AC_DEFINE(HAVE_RQUOTA,, [Define if you wish to retrieve quota of NFS mounted mailboxes]) have_rquota=yes fi AM_CONDITIONAL(HAVE_RQUOTA, test "$have_rquota" = "yes") QUOTA_LIBS="" AC_SEARCH_LIBS(quota_open, quota, [ AC_DEFINE(HAVE_QUOTA_OPEN,, [Define if you have quota_open()]) QUOTA_LIBS="-lquota" ]) AC_SUBST(QUOTA_LIBS) dnl dnl ** Full text search dnl fts=" squat" not_fts="" have_solr=no if test "$want_solr" != "no"; then dnl need libexpat AC_CHECK_LIB(expat, XML_Parse, [ AC_CHECK_HEADER(expat.h, [ have_solr=yes fts="$fts solr" ], [ if test $want_solr = yes; then AC_ERROR([Can't build with Solr support: expat.h not found]) fi ]) ], [ if test $want_solr = yes; then AC_ERROR([Can't build with Solr support: libexpat not found]) fi ]) fi AM_CONDITIONAL(BUILD_SOLR, test "$have_solr" = "yes") have_lucene=no if test "$want_lucene" = "yes"; then PKG_CHECK_MODULES(CLUCENE, libclucene-core,, [ # no pkg-config file for clucene. fallback to defaults. # FIXME: we should verify here that this actually works.. CLUCENE_LIBS="-lclucene-shared -lclucene-core" ]) have_lucene=yes fts="$fts lucene" fi if test $want_stemmer != no; then AC_CHECK_LIB(stemmer, sb_stemmer_new, [ have_fts_stemmer=yes AC_DEFINE(HAVE_FTS_STEMMER,, [Define if you want stemming support for FTS]) ], [ if test $want_stemmer = yes; then AC_ERROR([Can't build with stemmer support: libstemmer not found]) fi ]) fi AM_CONDITIONAL(BUILD_FTS_STEMMER, test "$have_fts_stemmer" = "yes") if test $want_textcat != no; then if test "$PKG_CONFIG" != "" && $PKG_CONFIG --exists libexttextcat 2>/dev/null; then PKG_CHECK_MODULES(LIBEXTTEXTCAT, libexttextcat) TEXTCAT_DATADIR=`$PKG_CONFIG --variable=pkgdatadir libexttextcat` AC_DEFINE(HAVE_FTS_EXTTEXTCAT,, [Define if you want exttextcat support for FTS]) have_fts_exttextcat=yes # Debian Wheezy workaround - LIBEXTTEXTCAT_CFLAGS include path is wrong: AC_CHECK_HEADERS(libexttextcat/textcat.h) else AC_CHECK_LIB(exttextcat, special_textcat_Init, [ have_fts_exttextcat=yes AC_CHECK_HEADERS(libexttextcat/textcat.h) LIBEXTTEXTCAT_LIBS=-lexttextcat AC_DEFINE(HAVE_FTS_EXTTEXTCAT,, [Define if you want exttextcat support for FTS]) TEXTCAT_DATADIR="/usr/share/libexttextcat" AC_SUBST(LIBEXTTEXTCAT_LIBS) ], [ AC_CHECK_LIB(textcat, special_textcat_Init, [ have_fts_textcat=yes TEXTCAT_DATADIR="/usr/share/libtextcat" AC_CHECK_HEADERS(libtextcat/textcat.h) ]) ]) if test $want_textcat = yes && test "$have_fts_exttextcat" != yes && test "$have_fts_textcat" != yes; then AC_ERROR([Can't build with textcat support: libtextcat or libexttextcat not found]) fi fi if test "$have_fts_exttextcat" = yes || test "$have_fts_textcat" = yes; then AC_DEFINE(HAVE_FTS_TEXTCAT,, [Define if you want textcat support for FTS]) AC_DEFINE_UNQUOTED(TEXTCAT_DATADIR, "$TEXTCAT_DATADIR", [Points to textcat pkgdatadir containing the language files]) fi fi AM_CONDITIONAL(BUILD_FTS_TEXTCAT, test "$have_fts_textcat" = "yes") AM_CONDITIONAL(BUILD_FTS_EXTTEXTCAT, test "$have_fts_exttextcat" = "yes") if test "$want_icu" != "no"; then if test "$PKG_CONFIG" != "" && $PKG_CONFIG --exists icu-i18n 2>/dev/null; then PKG_CHECK_MODULES(LIBICU, icu-i18n) have_icu=yes AC_DEFINE(HAVE_LIBICU,, [Define if you want ICU normalization support for FTS]) elif test "$want_icu" = "yes"; then AC_ERROR([Can't build with libicu support: libicu-i18n not found]) fi fi AM_CONDITIONAL(BUILD_LIBICU, test "$have_icu" = "yes") DOVECOT_WANT_APPARMOR DOVECOT_WANT_APPARMOR if test $have_lucene = no; then not_fts="$not_fts lucene" fi if test $have_solr = no; then not_fts="$not_fts solr" fi dnl ** dnl ** Settings dnl ** dnl get a list of setting .[ch] files, but list .h files first FILES1=`find $srcdir/src -name '*settings.[[ch]]'|grep "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -v 'lib-master.*c$' | sort -r | sed s/^..//` FILES2=`find $srcdir/src -name '*settings.[[ch]]'|grep -v "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -v all-settings | sort -r | sed s/^..//` SETTING_FILES=`echo $FILES1 $FILES2 | sed -e s,$srcdir/src,./src,g -e 's,./src,$(top_srcdir)/src,g'` AC_SUBST(SETTING_FILES) dnl ** dnl ** capabilities dnl ** dnl IDLE doesn't really belong to banner. It's there just to make Blackberries dnl happy, because otherwise BIS server disables push email. capability_banner="IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE" capability="$capability_banner SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE" AC_DEFINE_UNQUOTED(CAPABILITY_STRING, "$capability", [IMAP capabilities]) AC_DEFINE_UNQUOTED(CAPABILITY_BANNER_STRING, "$capability_banner", [IMAP capabilities advertised in banner]) CFLAGS="$CFLAGS $EXTRA_CFLAGS" NOPLUGIN_LDFLAGS="-no-undefined" if test "$with_gnu_ld" = yes; then NOPLUGIN_LDFLAGS="$NOPLUGIN_LDFLAGS -Wl,--as-needed" fi LDFLAGS="\$(NOPLUGIN_LDFLAGS) $LDFLAGS" AC_SUBST(NOPLUGIN_LDFLAGS) DC_CC_WRAPPER if test "$docdir" = ""; then dnl docdir supported only by autoconf v2.59c and later docdir='${datadir}/doc/${PACKAGE_TARNAME}' fi AC_SUBST(docdir) DC_DOVECOT_TEST_WRAPPER AC_SUBST(abs_top_builddir) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ Makefile doc/Makefile doc/man/Makefile doc/wiki/Makefile doc/example-config/Makefile doc/example-config/conf.d/Makefile src/Makefile src/lib/Makefile src/lib-sql/Makefile src/lib-auth/Makefile src/lib-charset/Makefile src/lib-compression/Makefile src/lib-dcrypt/Makefile src/lib-dict/Makefile src/lib-dict-extra/Makefile src/lib-dns/Makefile src/lib-fs/Makefile src/lib-fts/Makefile src/lib-http/Makefile src/lib-oauth2/Makefile src/lib-imap/Makefile src/lib-imap-storage/Makefile src/lib-imap-client/Makefile src/lib-imap-urlauth/Makefile src/lib-index/Makefile src/lib-lda/Makefile src/lib-ldap/Makefile src/lib-mail/Makefile src/lib-master/Makefile src/lib-ntlm/Makefile src/lib-program-client/Makefile src/lib-otp/Makefile src/lib-dovecot/Makefile src/lib-sasl/Makefile src/lib-settings/Makefile src/lib-smtp/Makefile src/lib-ssl-iostream/Makefile src/lib-stats/Makefile src/lib-test/Makefile src/lib-storage/Makefile src/lib-storage/list/Makefile src/lib-storage/index/Makefile src/lib-storage/index/imapc/Makefile src/lib-storage/index/pop3c/Makefile src/lib-storage/index/maildir/Makefile src/lib-storage/index/mbox/Makefile src/lib-storage/index/dbox-common/Makefile src/lib-storage/index/dbox-multi/Makefile src/lib-storage/index/dbox-single/Makefile src/lib-storage/index/cydir/Makefile src/lib-storage/index/raw/Makefile src/lib-storage/index/shared/Makefile src/lib-storage/register/Makefile src/anvil/Makefile src/auth/Makefile src/config/Makefile src/doveadm/Makefile src/doveadm/dsync/Makefile src/lda/Makefile src/log/Makefile src/lmtp/Makefile src/dict/Makefile src/director/Makefile src/dns/Makefile src/indexer/Makefile src/ipc/Makefile src/imap/Makefile src/imap-hibernate/Makefile src/imap-login/Makefile src/imap-urlauth/Makefile src/login-common/Makefile src/master/Makefile src/pop3/Makefile src/pop3-login/Makefile src/replication/Makefile src/replication/aggregator/Makefile src/replication/replicator/Makefile src/ssl-params/Makefile src/stats/Makefile src/util/Makefile src/plugins/Makefile src/plugins/acl/Makefile src/plugins/imap-acl/Makefile src/plugins/autocreate/Makefile src/plugins/dict-ldap/Makefile src/plugins/expire/Makefile src/plugins/fs-compress/Makefile src/plugins/fts/Makefile src/plugins/fts-lucene/Makefile src/plugins/fts-solr/Makefile src/plugins/fts-squat/Makefile src/plugins/last-login/Makefile src/plugins/lazy-expunge/Makefile src/plugins/listescape/Makefile src/plugins/mail-filter/Makefile src/plugins/mail-log/Makefile src/plugins/mailbox-alias/Makefile src/plugins/notify/Makefile src/plugins/notify-status/Makefile src/plugins/push-notification/Makefile src/plugins/pop3-migration/Makefile src/plugins/quota/Makefile src/plugins/quota-clone/Makefile src/plugins/imap-quota/Makefile src/plugins/replication/Makefile src/plugins/snarf/Makefile src/plugins/stats/Makefile src/plugins/imap-stats/Makefile src/plugins/trash/Makefile src/plugins/virtual/Makefile src/plugins/welcome/Makefile src/plugins/zlib/Makefile src/plugins/imap-zlib/Makefile src/plugins/mail-crypt/Makefile src/plugins/var-expand-crypt/Makefile src/plugins/apparmor/Makefile stamp.h dovecot-config.in]) AC_OUTPUT if test "$want_sql" = "plugin"; then sql_drivers="$sql_drivers (plugins)" fi not_passdb=`echo "$not_passdb"|sed 's/ / -/g'` not_userdb=`echo "$not_userdb"|sed 's/ / -/g'` not_sql_drivers=`echo "$not_sql_drivers"|sed 's/ / -/g'` not_fts=`echo "$not_fts"|sed 's/ / -/g'` echo echo "Install prefix . : $prefix" echo "File offsets ... : ${offt_bits}bit" echo "I/O polling .... : $ioloop" echo "I/O notifys .... : $have_notify" echo "SSL ............ : $have_ssl" echo "GSSAPI ......... : $have_gssapi" echo "passdbs ........ :$passdb" echo "dcrypt ..........: $build_dcrypt_openssl" if test "$not_passdb" != ""; then echo " :$not_passdb" fi echo "userdbs ........ :$userdb" if test "$not_userdb" != ""; then echo " :$not_userdb" fi echo "SQL drivers .... :$sql_drivers" if test "$not_sql_drivers" != ""; then echo " :$not_sql_drivers" fi echo "Full text search :$fts" if test "$not_fts" != ""; then echo " :$not_fts" fi