# This file is part of Mailfromd. -*- autoconf -*-
# Copyright (C) 2005-2012, 2015-2017 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.63)
m4_define([MF_VERSION_MAJOR], 8)
m4_define([MF_VERSION_MINOR], 3)
AC_INIT([mailfromd],
MF_VERSION_MAJOR.MF_VERSION_MINOR[]m4_ifdef([MF_VERSION_PATCH],.MF_VERSION_PATCH),
[bug-mailfromd@gnu.org.ua],
[mailfromd],
[http://www.gnu.org.ua/software/mailfromd])
AC_CONFIG_SRCDIR([src/mailfromd.h])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.11 gnits tar-ustar dist-bzip2 dist-xz std-options silent-rules])
# Enable silent rules by default:
AM_SILENT_RULES([yes])
#
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
AC_PROG_RANLIB
AC_PROG_YACC
AC_PROG_LEX
AC_PROG_LN_S
PKG_PROG_PKG_CONFIG
# Debugging mode
MU_DEBUG_MODE
MF_GCC_QUIRKS
# Checks for libraries.
AC_CHECK_LIB(socket, socket)
AC_CHECK_LIB(nsl, gethostbyaddr)
AC_CHECK_LIB(rt, nanosleep)
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h unistd.h sysexits.h paths.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
IU_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], , ,
[#include
#include ])
# Checks for library functions.
AC_CHECK_FUNCS([setegid setregid setresgid seteuid setreuid \
sysconf getdtablesize])
AC_REPLACE_FUNCS(daemon)
# Check for GNU Mailutils
AM_GNU_MAILUTILS([3.3], [all auth dbm sieve], [:])
AC_CHECK_LIB([adns], [adns_init],,
[AC_MSG_ERROR([required library libadns not found])])
### 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.19])
# 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
AC_ARG_VAR([DEFAULT_DB_TYPE],[Set default database type])
AC_ARG_WITH([gdbm],
AC_HELP_STRING([--with-gdbm],
[use GNU DBM by default]),
[
case "${withval}" in
yes) DEFAULT_DB_TYPE=gdbm;;
no) ;;
*) AC_MSG_ERROR(bad value ${withval} for --with-gdbm) ;;
esac])
AC_ARG_WITH([berkeley-db],
AC_HELP_STRING([--with-berkeley-db],
[use Berkeley DB by default]),
[
case "${withval}" in
no) ;;
*) DEFAULT_DB_TYPE=bdb;;
esac])
AH_TEMPLATE([DEFAULT_DB_TYPE], [Define default database type])
if test -n "$DEFAULT_DB_TYPE"; then
if ! mailutils info $DEFAULT_DB_TYPE >/dev/null; then
AC_MSG_ERROR([requested DBM type $DEFAULT_DB_TYPE not supported by Mailutils])
fi
else
# Traditionally Mailfromd preferred Berkeley DB over GDBM
DEFAULT_DB_TYPE=`mailutils info bdb gdbm | head -n 1 | sed 's/WITH_//' | tr A-Z a-z`
fi
if test -n "$DEFAULT_DB_TYPE"; then
AC_DEFINE_UNQUOTED([DEFAULT_DB_TYPE], "$DEFAULT_DB_TYPE")
status_dbm=$DEFAULT_DB_TYPE
else
AC_DEFINE_UNQUOTED([DEFAULT_DB_TYPE], NULL)
fi
## Preprocessor
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)
# IPv6 support
MF_ENABLE_IPV6
AC_SUBST([MF_IPV6_SUPPORT], $status_ipv6)
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 mfd state directory)
AC_ARG_VAR([DEFAULT_STATE_DIR],
[Set default mfd 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 mfd 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])
# Test for setproctitle
MF_PROCTITLE
# Test for libpmilter
AC_SUBST(META1_LIBS)
AC_SUBST(META1_INCLUDES)
AC_ARG_ENABLE([pmilter],
AC_HELP_STRING([--enable-pmilter[[=PATH]]],
[enable pmilter support]),
[case "${enableval}" in
yes) enable_pmilter=yes;;
no) enable_pmilter=no;;
/*) dir=$enableval/lib/meta1
if test -d $dir; then
META1_LIBS="-L$dir"
else
AC_MSG_ERROR([$dir: No such directory])
fi
dir=$enableval/include
if test -d $dir/sm; then
META1_INCLUDES="-I$dir"
else
AC_MSG_ERROR([$dir: No such directory])
fi
enable_pmilter=yes
;;
*) AC_MSG_ERROR([Bad argument to --enable-pmilter])
esac],[enable_pmilter=no])
if test "$enable_pmilter" = yes; then
saved_LIBS=$LIBS
AC_SUBST(PTHREAD_LIBRARIES)
AC_CHECK_LIB(pthread, pthread_self,
[ have_pthread=yes
PTHREAD_LIBRARIES="-lpthread -lc" ],
[ PTHREAD_LIBRARIES="-lpthread"
AC_CHECK_FUNC(pthread_self,
[HAVE_PTHREAD=yes]) ])
if test $have_pthread != yes; then
AC_MSG_ERROR([POSIX threads library not found. Please install it and then reconfigure])
fi
save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $META1_INCLUDES"
AC_CHECK_HEADERS([sm/error.h sm/hdrmoddef.h sm/pmfapi.h sm/pmilter.h sm/smreplycodes.h sm/generic.h sm/mfapi.h sm/pmfdef.h sm/smmts.h],
[],
[AC_MSG_ERROR([Required header file $ac_header not found])],
[
#ifdef HAVE_SM_ERROR_H
# include
#endif])
CFFPLAGS=$save_CPPFLAGS
libs="pmilter pmutil evthr thr rcbcommr rcbr mtar cstrr replr"
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS $META1_LIBS"
for file in $libs
do
AC_CHECK_LIB($file, main,
[META1_LIBS="$META1_LIBS -l$file"],
[AC_MSG_ERROR([Required library lib$file not found])])
done
LDFLAGS=$save_LDFLAGS
IU_CHECK_MEMBERS([struct pmilter_S.pmfi_thrmax_s,
struct pmilter_S.pmfi_thrmax_h,
struct pmilter_S.pmfi_fdmax], , ,
[#include "sm/error.h"
#include "sm/smreplycodes.h"
#include "sm/pmilter.h"
#include "sm/pmfdef.h"
#include "sm/pmfapi.h"])
LIBS="$LIBS $META1_LIBS"
AC_CHECK_FUNCS([sm_pmfi_setmacs])
LIBS=$saved_LIBS
fi
AM_CONDITIONAL([PMULT_COND], [test "$enable_pmilter" = yes])
# GeoIP
AC_ARG_WITH([geoip],
AC_HELP_STRING([--with-geoip],
[use GeoIP library]),
[
case "${withval}" in
yes) status_geoip=yes ;;
no) status_geoip=no ;;
*) AC_MSG_ERROR(bad value ${withval} for --with-geoip) ;;
esac],[status_geoip=maybe])
AC_SUBST(GEOIP_LIBS)
if test "$status_geoip" != "no"; then
saved_LIBS=$LIBS
AC_CHECK_LIB(GeoIP, GeoIP_new,
[status_geoip="yes"
GEOIP_LIBS="-lGeoIP"],
[if test $status_geoip = "yes"; then
AC_MSG_WARN(GeoIP requested but does not seem to be installed)
fi
status_geoip="no"])
LIBS=$saved_LIBS
if test "$status_geoip" = "yes"; then
AC_DEFINE([WITH_GEOIP], [1], [Enable use of GeoIP library])
fi
fi
## Dspam
status_dspam=maybe
AC_SUBST(DSPAM_CFLAGS)
AC_SUBST(DSPAM_LIBS)
AC_ARG_WITH([dspam],
[AC_HELP_STRING([--with-dspam],[build with DSPAM library])],
[status_dspam=$withval],
[status_dspam=maybe])
if test $status_dspam != no; then
PKG_CHECK_MODULES([DSPAM], [dspam], [status_dspam=yes], [status_dspam=no])
fi
if test "$status_dspam" = "yes"; then
AC_DEFINE([WITH_DSPAM], [1], [Enable use of DSPAM library])
fi
AM_CONDITIONAL([DSPAM_COND], [test "$status_dspam" = yes])
IMPRIMATUR_INIT
if test $RENDITION = "PROOF"; then
if test -r $srcdir/git-describe; then
GIT_DESCRIBE=`sed '2,$d' $srcdir/git-describe`
AC_DEFINE_UNQUOTED([GIT_DESCRIBE], "$GIT_DESCRIBE",
[The most recent git tag])
fi
fi
# 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 <