# This file is part of mailfromd. # Copyright (C) 2005, 2006, 2007, 2008 Sergey Poznyakoff # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AC_PREREQ(2.59) m4_define([MF_VERSION_MAJOR], 4) m4_define([MF_VERSION_MINOR], 3) dnl m4_define([MF_VERSION_PATCH], 0) AC_INIT([mailfromd], MF_VERSION_MAJOR.MF_VERSION_MINOR[]m4_ifdef([MF_VERSION_PATCH],.MF_VERSION_PATCH), [bug-mailfromd@gnu.org.ua]) AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE # AC_DEFINE_UNQUOTED([MAILFROMD_VERSION_MAJOR], MF_VERSION_MAJOR, [Major version number]) AC_DEFINE_UNQUOTED([MAILFROMD_VERSION_MINOR], MF_VERSION_MINOR, [Minor version number]) AC_DEFINE_UNQUOTED([MAILFROMD_VERSION_PATCH], m4_ifdef([MF_VERSION_PATCH],MF_VERSION_PATCH,0), [Patchlevel number]) # Checks for programs. AC_PROG_CC gl_EARLY AC_PROG_RANLIB AC_PROG_YACC AC_PROG_LEX # Checks for libraries. AC_CHECK_LIB(resolv, res_query) # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h unistd.h sysexits.h paths.h locale.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_CHECK_SIZEOF(uint32_t) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(unsigned int) AH_TEMPLATE(GACOPYZ_UINT32_T, [32-bit unsigned data type]) if test "$ac_cv_sizeof_uint32_t" = 4 ; then AC_DEFINE_UNQUOTED(GACOPYZ_UINT32_T, uint32_t) elif test "$ac_cv_sizeof_unsigned_int" = 4 ; then AC_DEFINE_UNQUOTED(GACOPYZ_UINT32_T, unsigned int) elif test "$ac_cv_sizeof_unsigned_long" = 4 ; then AC_DEFINE_UNQUOTED(GACOPYZ_UINT32_T, unsigned long) else AC_MSG_ERROR([cannot determine 32-bit unsigned data type]) fi # Checks for library functions. AC_CHECK_FUNCS([vsyslog setegid setregid setresgid seteuid setreuid \ res_ninit res_nclose res_nquery res_nquerydomain \ sysconf getdtablesize]) AC_REPLACE_FUNCS(daemon) gl_INIT AH_BOTTOM([ #if !HAVE_DECL_STRTOK_R extern char *strtok_r (char *s, const char *delim, char **save_ptr); #endif /* program_name is used by lib/error.c */ #define program_name program_invocation_name ]) # Check for GNU Mailutils AM_GNU_MAILUTILS(1.0, [all sieve cfg argp], [:]) AC_CHECK_HEADERS([mailutils/syslog.h]) AC_TRY_COMPILE([#ifdef HAVE_MAILUTILS_SYSLOG_H # include #endif], [ mu_log_facility = 1; ], [ AC_DEFINE(HAVE_MU_LOG_FACILITY,1, [Define if program_invocation_name is defined]) AC_MSG_RESULT(yes)], [ AC_MSG_RESULT(no)] ) AH_BOTTOM([ #ifndef HAVE_MU_LOG_FACILITY # define mu_log_facility log_facility #endif ]) save_LIBS=$LIBS LIBS="$LIBS $MAILUTILS_LIBS" AC_CHECK_FUNCS([mu_get_auth]) LIBS=$save_LIBS ### Check for Emacs site-lisp directory AM_PATH_LISPDIR if test "$EMACS" != "no"; then lisp_LISP='$(LISPSRC)' fi AC_SUBST(lisp_LISP) # Gettext. AM_GNU_GETTEXT([external], [need-formatstring-macros]) AM_GNU_GETTEXT_VERSION([0.16]) # Syslog AC_ARG_ENABLE([syslog-async], AC_HELP_STRING([--enable-syslog-async], [compile non-blocking version of syslog]), [case "${enableval}" in yes) syslog_async=yes ;; no) syslog_async=no ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-syslog-async]) ;; esac],[syslog_async=no]) if test $syslog_async = "yes"; then AC_ARG_VAR([DEFAULT_SYSLOG_ASYNC], [Define to 1 if syslog-async is being used by default]) if test -z "$DEFAULT_SYSLOG_ASYNC"; then DEFAULT_SYSLOG_ASYNC=0 fi AC_DEFINE_UNQUOTED([DEFAULT_SYSLOG_ASYNC],$DEFAULT_SYSLOG_ASYNC, [Define to 1 to use syslog_async by default]) AC_SUBST([BUILD_SYSLOG_ASYNC], '$(SYSLOG_ASYNC_O)') AC_DEFINE([USE_SYSLOG_ASYNC], [1], [Define if syslog-async is being used]) fi # Check for DBM flavor AH_TEMPLATE(BDB2_CURSOR_LASTARG, [Last argument to the cursor member of Berkeley 2 DB structure]) dnl The cursor member of DB structure used to take three arguments in older dnl implementations of Berkeley DB. Newer versions (>= 4.0) declare dnl it as taking four arguments. dnl This macro checks which of the variants we have. AC_DEFUN([MU_DB2_CURSOR], [AC_CACHE_CHECK([whether db->cursor takes 4 arguments], [mu_cv_bdb2_cursor_four_args], [AC_TRY_COMPILE([#include ], [ DB *db; db->cursor(NULL, NULL, NULL, 0) ], [mu_cv_bdb2_cursor_four_args=yes], [mu_cv_bdb2_cursor_four_args=no])]) if test $mu_cv_bdb2_cursor_four_args = yes; then AC_DEFINE(BDB2_CURSOR_LASTARG,[,0]) else AC_DEFINE(BDB2_CURSOR_LASTARG,[]) fi]) AH_TEMPLATE([WITH_BDB], [Define to the major version of Berkeley DB library to use]) use_dbm=no status_dbm=no AC_ARG_WITH([gdbm], AC_HELP_STRING([--with-gdbm], [use GNU DBM]), [ case "${withval}" in yes) use_dbm=GDBM ;; no) use_dbm=no ;; *) AC_MSG_ERROR(bad value ${withval} for --with-gdbm) ;; esac]) ## Support --with-db2 for backward compatibility if test "${with_db2+set}" = set; then case "${with_db2}" in yes) use_dbm=BDB2 ;; no) use_dbm=no ;; *) AC_MSG_ERROR(bad value ${with_db2} for --with-db2) ;; esac fi AC_ARG_WITH([berkeley-db], AC_HELP_STRING([--with-berkeley-db@<:@=version@:>@], [use Berkeley DB]), [ case "${withval}" in yes) use_dbm=BDB ;; no) use_dbm=no ;; *) use_dbm=BDB="${withval}";; esac]) ## Set the variable status_dbm to $1 if: ## ## 1. Function $3 is defined in the library $2 ## 2. Header file db.h is available ## ## Then check if the major version, minor version and patchlevel of the ## library matches those from the header. If so, define WITH_BDB ## to the version (i.e. $1 with all dots removed). Otherwise, report ## an error and stop. ## check_bdb() { ver=`echo $1 | tr -d '.'` major=`expr $ver : '\(.\).*'` AC_CHECK_LIB($2, $3, [AC_CHECK_HEADERS(db.h) if test $ac_cv_header_db_h = yes; then LIBS="$LIBS -l$2" MU_DB2_CURSOR status_dbm=$1 fi]) if test $status_dbm = no; then : else AC_RUN_IFELSE( [AC_LANG_PROGRAM([#include "db.h"], [int v_major, v_minor, v_patch; db_version(&v_major, &v_minor, &v_patch); return !(DB_VERSION_MAJOR == $major && v_major == DB_VERSION_MAJOR && v_minor == DB_VERSION_MINOR && v_patch == DB_VERSION_PATCH); ])], [AC_DEFINE_UNQUOTED(WITH_BDB,$ver)], [status_dbm=no]) fi } AC_SUBST(MU_COMMON_INCLUDES) ## Check for the Berkeley DB library version $1, assuming Slackware-like ## installation layout (header files in /usr/incude/db$vn and library named ## libdb-$version.so, where $version is the library version and $vn is ## $version with all dots removed. ## check_slackware_bdb() { dir=db`echo $1|tr -d '.'` save_CPPFLAGS=$CPPFLAGS while test -n "$dir" do if test -d /usr/include/$dir; then CPPFLAGS="$CPPFLAGS -I/usr/include/$dir" break elif test -d /usr/local/include/$dir; then CPPFLAGS="$CPPFLAGS -I/usr/local/include/$dir" break fi dir=`expr "$dir" : '\(.*\)[[0-9]]$'` done check_bdb $1 db-$1 db_create CPPFLAGS=$save_CPPFLAGS if test $status_dbm = "$1"; then MU_COMMON_INCLUDES="$MU_COMMON_INCLUDES -I/usr/include/$dir" fi } try_dbm() { case "$1" in GDBM) AC_CHECK_LIB(gdbm, gdbm_open, [AC_CHECK_HEADERS(gdbm.h, AC_DEFINE(WITH_GDBM,1, [Enable use of GNU DBM library])) LIBS="$LIBS -lgdbm" POPAUTH='popauth$(EXEEXT)' status_dbm=GDBM]);; BDB2) check_bdb 2 db db_open test "$status_dbm" != "no" && status_dbm="Berkeley DB v. $status_dbm";; BDB) for version in 4 3 2 do case $version in 4|3) func=db_create;; 2) func=db_open;; esac check_bdb $version db $func if test "$status_dbm" != no; then status_dbm="Berkeley DB v. $status_dbm" break; fi done;; BDB=*) name=`expr $1 : 'BDB=\(.*\)'` case $name in [[0-9]]*) check_slackware_bdb $name;; *) for version in 4 3 2 do case $version in 4|3) func=db_create;; 2) func=db_open;; esac check_bdb $version $name $func if test "$status_dbm" != no; then break; fi done ;; esac test "$status_dbm" != "no" && status_dbm="Berkeley DB v. $status_dbm" ;; esac } if test $use_dbm = no; then # Try all possible DBM values for use_dbm in BDB GDBM do try_dbm $use_dbm if test "$status_dbm" != no; then break fi done else try_dbm $use_dbm fi if test "$status_dbm" = "no"; then AC_MSG_ERROR([Cannot find DBM library to link with.]) fi AC_ARG_WITH([preprocessor], AC_HELP_STRING([--without-preprocessor], [do not use external preprocessor]), [ case "${withval}" in yes) use_ext_pp=yes ;; no) use_ext_pp=no ;; *) AC_MSG_ERROR(bad value ${withval} for --with-preprocessor) ;; esac],[use_ext_pp=yes]) AC_ARG_VAR([DEFAULT_PREPROCESSOR], [Set default preprocessor name]) if test -z "$DEFAULT_PREPROCESSOR" ; then DEFAULT_PREPROCESSOR="m4 -s" fi if test $use_ext_pp != no; then save_PATH=$PATH PREPROC_OPTIONS=`echo $DEFAULT_PREPROCESSOR | sed -n 's/[[^ ]][[^ ]]* //p'` case "$DEFAULT_PREPROCESSOR" in /*) PATH=`expr $DEFAULT_PREPROCESSOR : '\(.*\)/.*'`:$PATH DEFAULT_PREPROCESSOR=`expr $DEFAULT_PREPROCESSOR : '.*/\(.*\)'`;; esac AC_PATH_PROG(PPBIN, $DEFAULT_PREPROCESSOR) DEFAULT_PREPROCESSOR=$PPBIN if test -n "$DEFAULT_PREPROCESSOR"; then DEFAULT_PREPROCESSOR="$DEFAULT_PREPROCESSOR $PREPROC_OPTIONS" case $PPBIN in *m4) AC_SUBST(PP_SETUP_FILE,'pp-setup');; # Install default pp-setup esac fi PATH=$save_PATH fi AC_ARG_WITH([readline], AC_HELP_STRING([--without-readline], [do not use readline]), [ case "${withval}" in yes) usereadline=yes ;; no) usereadline=no ;; *) AC_MSG_ERROR(bad value ${withval} for --without-readline) ;; esac],[usereadline=maybe]) # Test for GNU Readline AC_SUBST(READLINE_LIBS) if test "$usereadline" != "no"; then dnl FIXME This should only link in the curses libraries if it's dnl really needed! dnl Check for Curses libs. CURSES_LIBS= for lib in ncurses curses termcap do AC_CHECK_LIB($lib, tputs, [CURSES_LIBS="-l$lib"; break]) done saved_LIBS=$LIBS LIBS="$LIBS $CURSES_LIBS" AC_CHECK_LIB(readline, readline, mf_have_readline=yes) LIBS=$saved_LIBS if test "$mf_have_readline" = "yes"; then AC_CHECK_HEADERS(readline/readline.h, AC_DEFINE(WITH_READLINE,1,[Enable use of readline])) READLINE_LIBS="-lreadline $CURSES_LIBS" saved_LIBS=$LIBS LIBS="$LIBS $READLINE_LIBS" AC_CHECK_FUNCS(rl_completion_matches) LIBS=$saved_LIBS usereadline="yes" else if test "$usereadline" = "yes"; then AC_MSG_WARN(readline requested but does not seem to be installed) fi usereadline = "no" fi fi AH_BOTTOM([ /* Some older versions of readline have completion_matches */ #ifndef HAVE_RL_COMPLETION_MATCHES # define rl_completion_matches completion_matches #endif]) AC_SUBST(MILTER, '../gacopyz/libgacopyz.a') AC_SUBST(MILTER_INCLUDES, '-I$(top_srcdir)/gacopyz') # Set default state directory AC_SUBST(DEFAULT_STATE_DIR) AC_MSG_CHECKING(for default mailfromd state directory) AC_ARG_VAR([DEFAULT_STATE_DIR], [Set default mailfromd state directory]) if test -z "$DEFAULT_STATE_DIR"; then DEFAULT_STATE_DIR='$(localstatedir)/$(PACKAGE)' fi AC_MSG_RESULT($DEFAULT_STATE_DIR) # Prepare default socket spec AC_SUBST(DEFAULT_SOCKET) AC_MSG_CHECKING(for default communication socket) AC_ARG_VAR([DEFAULT_SOCKET], [Set default communication socket.]) if test -z "$DEFAULT_SOCKET"; then DEFAULT_SOCKET='mailfrom' fi AC_MSG_RESULT($DEFAULT_SOCKET) # Test for default user name AC_SUBST(DEFAULT_USER) AC_MSG_CHECKING(for default user name) AC_ARG_VAR([DEFAULT_USER], [Set default user name]) if test -z "$DEFAULT_USER"; then DEFAULT_USER=mail fi AC_MSG_RESULT($DEFAULT_USER) AC_DEFINE_UNQUOTED(DEFAULT_USER, "$DEFAULT_USER", [Default mailfromd user]) # Test for default expiration interval AC_SUBST(DEFAULT_EXPIRE_INTERVAL) AC_MSG_CHECKING(for default expiration interval) AC_ARG_VAR([DEFAULT_EXPIRE_INTERVAL], [Set default expiration interval]) if test -z "$DEFAULT_EXPIRE_INTERVAL"; then DEFAULT_EXPIRE_INTERVAL=86400 fi AC_MSG_RESULT($DEFAULT_EXPIRE_INTERVAL) AC_DEFINE_UNQUOTED(DEFAULT_EXPIRE_INTERVAL, $DEFAULT_EXPIRE_INTERVAL, [Default expiration interval]) # Test for default dns negative expiration interval AC_SUBST(DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL) AC_MSG_CHECKING(for default dns negative expiration interval) AC_ARG_VAR([DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL], [Set default expiration interval]) if test -z "$DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL"; then DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL=3600 fi AC_MSG_RESULT($DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL) AC_DEFINE_UNQUOTED(DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL, $DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL, [Default expiration interval for negative DNS answers]) # Test for default rates expiration interval AC_SUBST(DEFAULT_EXPIRE_RATES_INTERVAL) AC_MSG_CHECKING(for default rates expiration interval) AC_ARG_VAR([DEFAULT_EXPIRE_RATES_INTERVAL], [Set default expiration interval]) if test -z "$DEFAULT_EXPIRE_RATES_INTERVAL"; then DEFAULT_EXPIRE_RATES_INTERVAL=300 fi AC_MSG_RESULT($DEFAULT_EXPIRE_RATES_INTERVAL) AC_DEFINE_UNQUOTED(DEFAULT_EXPIRE_RATES_INTERVAL, $DEFAULT_EXPIRE_RATES_INTERVAL, [Default expiration interval for the rates database]) # Test for default log facility AC_SUBST(DEFAULT_LOG_FACILITY) AC_MSG_CHECKING(for default log facility) AC_ARG_VAR([DEFAULT_LOG_FACILITY], [Set default log facility]) if test -z "$DEFAULT_LOG_FACILITY"; then DEFAULT_LOG_FACILITY=mail fi DEFAULT_LOG_FACILITY=`echo $DEFAULT_LOG_FACILITY | tr a-z A-Z` case $DEFAULT_LOG_FACILITY in LOG_*) ;; *) DEFAULT_LOG_FACILITY=LOG_$DEFAULT_LOG_FACILITY;; esac AC_TRY_COMPILE([#include ], [int lf = $DEFAULT_LOG_FACILITY], :, [AC_MSG_ERROR($DEFAULT_LOG_FACILITY: Unknown syslog facility)]) AC_MSG_RESULT($DEFAULT_LOG_FACILITY) AC_DEFINE_UNQUOTED(DEFAULT_LOG_FACILITY, $DEFAULT_LOG_FACILITY, [Default log facility]) # Doc hints. # Select a rendition level: # DISTRIB for stable releases (at most one dot in the version number) # and maintenance releases (two dots, patchlevel < 50) # PROOF for alpha releases. # PUBLISH can only be required manually when running make in doc/ AC_SUBST(RENDITION) case `echo $VERSION|sed 's/[[^.]]//g'` in ""|".") RENDITION=DISTRIB;; "..") if test `echo $VERSION | sed 's/.*\.//'` -lt 50; then RENDITION=DISTRIB else RENDITION=PROOF fi;; *) RENDITION=PROOF;; esac # Debugging mode MU_DEBUG_MODE # Initialize the test suite. AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/etc/Makefile tests/atlocal]) AM_MISSING_PROG([AUTOM4TE], [autom4te]) AC_CONFIG_COMMANDS([status],[ cat <