# This file is part of Mailfromd. -*- autoconf -*- # Copyright (C) 2005-2018 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], 6) m4_define([MF_VERSION_PATCH], 90) 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.4], [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 # ###################### # Default database type # ###################### # A map of supported database types. The format is DBTYPE:FEATURE, # where FEATURE is the corresponding mailutils feature as listed by # 'mailutils info', without the WITH_ prefix and converted to lowercase. # The entries are sorted in ascending preference order. # Traditionally Mailfromd preferred Berkeley DB over GDBM. db_map=" bdb:bdb gbdm:gdbm kc:kyotocabinet tc:tokyocabinet ndbm:ndbm " # Convert database type to mailutils feature db_type_to_feature() { sed -n /^$(echo "$1" | tr A-Z a-z)':/s/.*://p' </dev/null; then AC_MSG_ERROR([requested DBM type $DEFAULT_DB_TYPE not supported by Mailutils]) fi else fl=$(db_feature_list) feature=$(mailutils info $fl | head -n 1 | sed 's/WITH_//') if test -n "$feature"; then DEFAULT_DB_TYPE=$(db_feature_to_type $feature) fi 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 <