Blame configure.ac

Packit e8bc57
dnl vim: set noai tw=0:
Packit e8bc57
dnl
Packit e8bc57
dnl configure.ac for bogofilter
Packit e8bc57
dnl (C) Copyright 2003 Clint Adams, Gyepi Sam, David Relson, Matthias Andree
Packit e8bc57
dnl (C) Copyright 2008 Clint Adams, David Relson, Matthias Andree
Packit e8bc57
dnl (C) Copyright 2004-2007, 2009 David Relson, Matthias Andree
Packit e8bc57
dnl
Packit e8bc57
dnl ********************************************************
Packit e8bc57
dnl "Magic" environment variables for this script are:
Packit e8bc57
dnl
Packit e8bc57
dnl BF_ZAP_LIBDB -  LIBDB turns out empty, so that
Packit e8bc57
dnl set to "zap"    the database library can be taken from
Packit e8bc57
dnl                 libs (for static linking).
Packit e8bc57
dnl
Packit e8bc57
dnl BF_FORCE_TRIO - Unconditionally compile and link against
Packit e8bc57
dnl set to "yes"    the "Trio" [v]snprintf library (which is
Packit e8bc57
dnl                 part of the bogofilter source).
Packit e8bc57
dnl ********************************************************
Packit e8bc57
dnl
Packit e8bc57
AC_INIT([bogofilter],[1.2.5])
Packit e8bc57
dnl
Packit e8bc57
AC_PREREQ([2.68])
Packit e8bc57
AC_USE_SYSTEM_EXTENSIONS
Packit e8bc57
AC_CONFIG_SRCDIR([src/bogofilter.c])
Packit e8bc57
AC_CANONICAL_HOST
Packit e8bc57
AM_INIT_AUTOMAKE([1.11 foreign tar-ustar parallel-tests no-dist-gzip dist-xz no-installinfo -Wall subdir-objects])
Packit e8bc57
AC_CONFIG_HEADERS([src/config.h:config.in])
Packit e8bc57
Packit e8bc57
AC_PROG_AWK
Packit e8bc57
AC_PROG_CC(gcc xlc cc)
Packit e8bc57
AM_PROG_AR
Packit e8bc57
AM_PROG_CC_C_O
Packit e8bc57
AC_USE_SYSTEM_EXTENSIONS
Packit e8bc57
AC_CHECK_TOOL(AR, ar, no)
Packit e8bc57
if test "$AR" = no ; then
Packit e8bc57
  AC_MSG_ERROR([Please make sure that "ar" is in your PATH.])
Packit e8bc57
fi
Packit e8bc57
AC_PROG_RANLIB
Packit e8bc57
AC_PATH_PROGS(PERL, perl perl5,,$PATH:/usr/local/bin:/usr/bin)
Packit e8bc57
AC_PATH_PROGS(NSGMLS,onsgmls nsgmls,nsgmls)
Packit e8bc57
AC_PATH_PROGS(RPMBUILD,rpmbuild rpm,rpmbuild)
Packit e8bc57
AC_PATH_PROGS(XMLLINT,xmllint,xmllint)
Packit e8bc57
AC_PATH_PROGS(FLEX,flex,false)
Packit e8bc57
AM_PROG_LEX
Packit e8bc57
if test "x$LEX" = xflex && test "$FLEX" != false ; then
Packit e8bc57
  LEX="$FLEX"
Packit e8bc57
  AC_DEFINE(LEX,,path to LEX)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl Check compiler capabilities
Packit e8bc57
AC_C_CONST
Packit e8bc57
AC_C_INLINE
Packit e8bc57
AC_C_VOLATILE
Packit e8bc57
AC_C_RESTRICT
Packit e8bc57
Packit e8bc57
dnl define our test programs are C
Packit e8bc57
AC_LANG([C])
Packit e8bc57
Packit e8bc57
if test "$ac_cv_c_inline" != no ; then
Packit e8bc57
    AC_DEFINE(HAVE_INLINE,1, [define to 1 if 'inline' is supported])
Packit e8bc57
    AC_SUBST(HAVE_INLINE)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl Check for "extern inline", using a modified version
Packit e8bc57
dnl of the test for AC_C_INLINE from acspecific.mt.
Packit e8bc57
dnl Run this before AC_C_INLINE to avoid skewing the results?
Packit e8bc57
dnl Imported from the GSL 1.4 documentation (section "Autoconf Macros")
Packit e8bc57
dnl and modified to define HAVE_EXTERN_INLINE.
Packit e8bc57
AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline,
Packit e8bc57
[ac_cv_c_extern_inline=no
Packit e8bc57
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern $ac_cv_c_inline double foo(double x);
Packit e8bc57
extern $ac_cv_c_inline double foo(double x) { return x+1.0; };
Packit e8bc57
double foo (double x) { return x + 1.0; };]], [[  foo(1.0)  ]])],[ac_cv_c_extern_inline="yes"],[])
Packit e8bc57
])
Packit e8bc57
Packit e8bc57
if test "$ac_cv_c_extern_inline" != no ; then
Packit e8bc57
    AC_DEFINE(HAVE_EXTERN_INLINE,1,Define to 1 if your compiler supports extern inline storage class.)
Packit e8bc57
    AC_SUBST(HAVE_EXTERN_INLINE)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl Check for extension
Packit e8bc57
AC_EXEEXT
Packit e8bc57
Packit e8bc57
dnl check for b0rked Solaris (and other shells) and find one that works
Packit e8bc57
AC_MSG_CHECKING(for a working shell...)
Packit e8bc57
for i in /usr/xpg6/bin/sh /usr/xpg4/bin/sh /usr/ccs/bin/sh /bin/sh /usr/bin/sh /bin/ksh /bin/bash /usr/local/bin/bash ; do
Packit e8bc57
    $i -c 'if ! false ; then echo $(echo ok) ; fi' >config.$$ 2>/dev/null
Packit e8bc57
    j=`cat config.$$`
Packit e8bc57
    rm -f config.$$
Packit e8bc57
    if test "x$j" = "xok" ; then
Packit e8bc57
	SHELL=$i
Packit e8bc57
	AC_SUBST(SHELL)
Packit e8bc57
	break
Packit e8bc57
    fi
Packit e8bc57
done
Packit e8bc57
AC_MSG_RESULT($SHELL)
Packit e8bc57
if test "x$SHELL" = "x" ; then
Packit e8bc57
    AC_MSG_ERROR(no SUS compliant shell found - on Solaris, install SUNWxcu4)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl crutch for b0rked S/390 gcc:
Packit e8bc57
if test "x$host_cpu" = "xs390" && test "x$GCC" = "xyes" ; then
Packit e8bc57
    case ${CFLAGS} in
Packit e8bc57
    *-O*)
Packit e8bc57
	OCFLAGS="$CFLAGS"
Packit e8bc57
	dnl override -Os and -O2 and higher to -O1.
Packit e8bc57
	dnl this is imperfect, as you can fool it by saying -O04
Packit e8bc57
	dnl however, you can as well say -O4 -O4 and it will
Packit e8bc57
	dnl be -O1 and -O4 -- the last one takes precedence in gcc.
Packit e8bc57
	CFLAGS="`echo \"$CFLAGS\" | sed 's/-O[[s1-9][0-9]]*/-O1/'`"
Packit e8bc57
	export CFLAGS
Packit e8bc57
	AC_MSG_NOTICE([GCC for s390: Overriding CFLAGS "$OCFLAGS" to "$CFLAGS".])
Packit e8bc57
    esac
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl crutch for b0rked dgux gcc 2.7 (-g gives unresolved symbols in GSL),
Packit e8bc57
dnl gcc 2.8.1 is fine according to Message-ID: <199805061718.NAA01272@monty>
Packit e8bc57
dnl see http://list-archive.xemacs.org/xemacs-beta/199805/msg00291.html
Packit e8bc57
case "$host_os" in
Packit e8bc57
dgux*)
Packit e8bc57
    if test "$GCC" = yes ; then
Packit e8bc57
        case "`$CC --version`" in
Packit e8bc57
        2.7*)
Packit e8bc57
	    case ${CFLAGS} in
Packit e8bc57
	    *-g*)
Packit e8bc57
		OCFLAGS="$CFLAGS"
Packit e8bc57
		CFLAGS=""
Packit e8bc57
		for i in $OCFLAGS ; do
Packit e8bc57
		    case x$i in
Packit e8bc57
			x-g*) ;;
Packit e8bc57
			*) CFLAGS="$CFLAGS$i " ;;
Packit e8bc57
		    esac
Packit e8bc57
		done
Packit e8bc57
		AC_MSG_NOTICE([dgux: Removing -g options from CFLAGS, new: "$CFLAGS".])
Packit e8bc57
		;;
Packit e8bc57
	    esac
Packit e8bc57
	    ;;
Packit e8bc57
	esac
Packit e8bc57
    fi
Packit e8bc57
    ;;
Packit e8bc57
esac
Packit e8bc57
Packit e8bc57
dnl If we're using gcc, enable some warnings
Packit e8bc57
dnl missing: -Wunreachable-code
Packit e8bc57
if test "$GCC" = yes ; then
Packit e8bc57
    AC_MSG_CHECKING([if gcc is really Intel C++])
Packit e8bc57
    case "`$CC -V 2>&1`" in
Packit e8bc57
	[[iI][nN][tT][eE][lL]]*)	ICC=yes ;;
Packit e8bc57
	*)			ICC=no ;;
Packit e8bc57
    esac
Packit e8bc57
    AC_MSG_RESULT($ICC)
Packit e8bc57
fi
Packit e8bc57
AC_CACHE_CHECK(for additional compiler options, ac_cv_prog_gcc_flags, [
Packit e8bc57
ac_cv_prog_gcc_flags=""
Packit e8bc57
if test "$GCC" = yes && test "$ICC" = no
Packit e8bc57
then
Packit e8bc57
  echo "void dummy(void);" >configure-dummy.c
Packit e8bc57
  echo "void dummy(void) {}" >>configure-dummy.c
Packit e8bc57
  addopts=
Packit e8bc57
  # note: GCC 2.X print just the version number, like "2.95.3"
Packit e8bc57
  #       GCC 3.X print something like "gcc (GCC) 3.3.1 (SuSE Linux)"
Packit e8bc57
  case `$CC --version` in
Packit e8bc57
      2.*) ;;
Packit e8bc57
      *) addopts="$addopts -Wpointer-arith -ggdb" ;;
Packit e8bc57
  esac
Packit e8bc57
  for i in $addopts \
Packit e8bc57
dnl the -ieee option is for Alpha, Clint Adams' recommendation
Packit e8bc57
dnl See http://thread.gmane.org/gmane.mail.bogofilter.general/6352
Packit e8bc57
      -mieee \
Packit e8bc57
      -Wall -W -Wstrict-prototypes -Wmissing-prototypes -Wshadow \
Packit e8bc57
      -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
Packit e8bc57
      -Waggregate-return -Wmissing-declarations \
Packit e8bc57
      -Wmissing-format-attribute -Wnested-externs \
Packit e8bc57
      -fno-common -Wchar-subscripts -Wcomment \
Packit e8bc57
      -Wimplicit -Wsequence-point -Wreturn-type \
Packit e8bc57
      -Wno-system-headers -Wformat
Packit e8bc57
      # -Wfloat-equal -Wformat=2
Packit e8bc57
      # -Wmissing-noreturn -Wconversion -pedantic -Wredundant-decls
Packit e8bc57
  do
Packit e8bc57
       if $CC $i $ac_cv_prog_gcc_flags -c configure-dummy.c >/dev/null 2>&1 
Packit e8bc57
       then ac_cv_prog_gcc_flags="$ac_cv_prog_gcc_flags $i"
Packit e8bc57
       else echo "ignoring $i"
Packit e8bc57
       fi
Packit e8bc57
  done
Packit e8bc57
fi])
Packit e8bc57
rm -f configure-dummy.c configure-dummy.o
Packit e8bc57
CFLAGS="$CFLAGS $ac_cv_prog_gcc_flags"
Packit e8bc57
AC_SUBST(CFLAGS)
Packit e8bc57
Packit e8bc57
dnl Check if we're running GCC 4.0.0 or higher, if so, switch
Packit e8bc57
dnl to the new -iquote scheme rather than using -I- -I.
Packit e8bc57
gcc4=no
Packit e8bc57
if test "$GCC" = yes && test "$ICC" = no ; then
Packit e8bc57
    case `$CC -dumpversion 2>/dev/null` in
Packit e8bc57
	""|2.*|3.*) ;;
Packit e8bc57
	4.*) gcc4=yes ;;
Packit e8bc57
    esac
Packit e8bc57
    case "$CC" in
Packit e8bc57
	*clang) gcc4=yes ;;
Packit e8bc57
    esac
Packit e8bc57
fi
Packit e8bc57
AM_CONDITIONAL(USE_GCC4, test $gcc4 = yes)
Packit e8bc57
Packit e8bc57
AC_MSG_CHECKING(whether flex needs patching)
Packit e8bc57
dnl Check whether flex needs patching
Packit e8bc57
flex=no
Packit e8bc57
if test -n "$LEX"; then
Packit e8bc57
    case `$LEX --version` in
Packit e8bc57
	*2.5.4) flex=254 ;;
Packit e8bc57
	*2.5.31) flex=253x ;;
Packit e8bc57
	*2.5.33) flex=253x ;;
Packit e8bc57
	*2.5.35) flex=O.K. ;;
Packit e8bc57
	*2.5.36*) flex=253n ;;
Packit e8bc57
	*2.5.37*) flex=253n ;;
Packit e8bc57
	*2.5.38*) flex=253n ;;
Packit e8bc57
	*2.5.39*) flex=253n ;;
Packit e8bc57
	*2.6.0*)  flex=253n ;;
Packit e8bc57
	*2.6.*) flex=O.K. ;;
Packit e8bc57
	*)	flex=unknown ;;
Packit e8bc57
    esac
Packit e8bc57
fi
Packit e8bc57
AC_MSG_RESULT($flex)
Packit e8bc57
AM_CONDITIONAL(PATCH_FLEX_254, test $flex = 254)
Packit e8bc57
AM_CONDITIONAL(PATCH_FLEX_253X, test $flex = 253x)
Packit e8bc57
AM_CONDITIONAL(PATCH_FLEX_253N, test $flex = 253n)
Packit e8bc57
Packit e8bc57
dnl large file support (LFS)
Packit e8bc57
AC_SYS_LARGEFILE
Packit e8bc57
dnl AC_FUNC_FSEEKO
Packit e8bc57
Packit e8bc57
dnl Checks for libraries.
Packit e8bc57
AC_CHECK_LIB([m],  [cos])
Packit e8bc57
Packit e8bc57
dnl fdatasync can be faster than fsync but may be in librt on some systems
Packit e8bc57
dnl such as Solaris. The code is currently stubbed out in db_lock.c
Packit e8bc57
dnl AC_SEARCH_LIBS([fdatasync],[rt],AC_DEFINE(HAVE_FDATASYNC,1,[Define to 1 if you have the 'fdatasync' function.]))
Packit e8bc57
Packit e8bc57
AC_CHECK_DECLS([getopt,optreset],,,[[
Packit e8bc57
#include <unistd.h>
Packit e8bc57
/* Solaris */
Packit e8bc57
#include <stdlib.h>
Packit e8bc57
]])
Packit e8bc57
Packit e8bc57
dnl check for SYNC stuff
Packit e8bc57
AC_CHECK_DECLS([O_DSYNC, O_SYNC, O_FSYNC],,,[#include <fcntl.h>])
Packit e8bc57
Packit e8bc57
dnl Coerce GLIBC 2.3 to GLIBC 2.2 compatibility.
Packit e8bc57
dnl May not be complete with future extensions, but appears to work
Packit e8bc57
dnl today, 2003-10-02. Matthias Andree
Packit e8bc57
AC_DEFINE(__NO_CTYPE,1,[Define __NO_CTYPE to 1 to avoid GLIBC_2.3-specific ctype.h functions.])
Packit e8bc57
Packit e8bc57
dnl Allow the user to specify a header name to use to indicate whether a given
Packit e8bc57
dnl message is SPAM or not.
Packit e8bc57
AC_ARG_ENABLE(spam-header-name, 
Packit e8bc57
	AS_HELP_STRING([--enable-spam-header-name=name],
Packit e8bc57
	[use specified header name instead of "X-Bogosity"]),
Packit e8bc57
	AC_DEFINE_UNQUOTED(SPAM_HEADER_NAME,
Packit e8bc57
	["$enableval"], 
Packit e8bc57
	[Use specified header name instead of "X-Bogosity"]),
Packit e8bc57
	AC_DEFINE_UNQUOTED(SPAM_HEADER_NAME,
Packit e8bc57
	["X-Bogosity"])
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
dnl Allow the user to enable/disable use of Unicode
Packit e8bc57
Packit e8bc57
AC_ARG_ENABLE(unicode,
Packit e8bc57
	AS_HELP_STRING([--disable-unicode],
Packit e8bc57
	[disables Unicode/UTF-8 conversion of character sets]),
Packit e8bc57
	if test "$enableval" = no; then
Packit e8bc57
		[USE_UNICODE=NO]
Packit e8bc57
	fi
Packit e8bc57
	if test "$enableval" = yes; then
Packit e8bc57
		[USE_UNICODE=YES]
Packit e8bc57
	fi
Packit e8bc57
	if test x$USE_UNICODE != x ; then
Packit e8bc57
		AC_DEFINE_UNQUOTED(USE_UNICODE, "$USE_UNICODE", [Unicode enabled/disabled flag])
Packit e8bc57
	    	AC_SUBST(USE_UNICODE)
Packit e8bc57
	fi
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(DISABLE_UNICODE, test x$USE_UNICODE = xNO)
Packit e8bc57
AM_CONDITIONAL(ENABLE_UNICODE, test x$USE_UNICODE != xNO)
Packit e8bc57
Packit e8bc57
if test x$USE_UNICODE = xNO ; then
Packit e8bc57
	AC_DEFINE(DISABLE_UNICODE,1,
Packit e8bc57
	[Disable converting character sets to Unicode])
Packit e8bc57
	[ENCODING="raw"]
Packit e8bc57
else
Packit e8bc57
	AM_ICONV
Packit e8bc57
	AC_DEFINE(ENABLE_UNICODE,1,
Packit e8bc57
	[Enable converting character sets to Unicode])
Packit e8bc57
	[ENCODING="utf-8"]
Packit e8bc57
fi
Packit e8bc57
[DEFAULT_CHARSET="iso-8859-1"]
Packit e8bc57
Packit e8bc57
dnl Allow the user to enable Russian character set support
Packit e8bc57
Packit e8bc57
if test x$USE_UNICODE != xYES ; then
Packit e8bc57
AC_ARG_ENABLE(russian,
Packit e8bc57
	AS_HELP_STRING([--enable-russian],
Packit e8bc57
	[switch default character set to CP866 [[iso-8859-1]]]),
Packit e8bc57
	if test "$enableval" = no; then
Packit e8bc57
		[USE_CP866=NO]
Packit e8bc57
	else
Packit e8bc57
		[USE_CP866=YES]
Packit e8bc57
	fi
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
dnl Enable building with Russian character set support.
Packit e8bc57
if test x$USE_CP866 = xYES ; then
Packit e8bc57
	AC_DEFINE(CP866,1,
Packit e8bc57
	[Default charset is CP866 rather than iso-8859-1])
Packit e8bc57
	[DEFAULT_CHARSET="CP866"]
Packit e8bc57
fi
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl Allow the user to specify a default charset
Packit e8bc57
AC_ARG_WITH(charset, 
Packit e8bc57
	    AS_HELP_STRING([--with-charset=name], 
Packit e8bc57
	    [use specified charset (overrides --enable-russian) [[iso-8859-1]]]), 
Packit e8bc57
	    AC_DEFINE_UNQUOTED(DEFAULT_CHARSET, 
Packit e8bc57
	    ["$withval"], 
Packit e8bc57
	    [Use specified default charset instead of iso-8859-1])
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
AC_SUBST(ENCODING)
Packit e8bc57
AC_SUBST(DEFAULT_CHARSET)
Packit e8bc57
AC_DEFINE_UNQUOTED(DEFAULT_CHARSET,
Packit e8bc57
	["$DEFAULT_CHARSET"],
Packit e8bc57
	[Use specified charset])
Packit e8bc57
Packit e8bc57
dnl Allow the user to enable memory usage debugging methods
Packit e8bc57
Packit e8bc57
AC_ARG_ENABLE(memdebug,
Packit e8bc57
	AS_HELP_STRING([--enable-memdebug],
Packit e8bc57
	[enable memory usage debugging]),
Packit e8bc57
	if test "$enableval" = no; then
Packit e8bc57
		[USE_MEMDEBUG=NO]
Packit e8bc57
	else
Packit e8bc57
		[USE_MEMDEBUG=YES]
Packit e8bc57
	fi
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
dnl Enable building with memory usage debugging files.
Packit e8bc57
if test x$USE_MEMDEBUG = xYES ; then
Packit e8bc57
	AC_DEFINE(ENABLE_MEMDEBUG,1,
Packit e8bc57
	[Enable memory usage debugging])
Packit e8bc57
fi
Packit e8bc57
AM_CONDITIONAL(ENABLE_MEMDEBUG, test x$USE_MEMDEBUG = xYES)
Packit e8bc57
Packit e8bc57
dnl Checks for header files.
Packit e8bc57
AC_HEADER_STDC
Packit e8bc57
AC_HEADER_STDBOOL
Packit e8bc57
AC_HEADER_DIRENT
Packit e8bc57
AC_HEADER_TIME
Packit e8bc57
AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h syslog.h sys/param.h fcntl.h string.h strings.h memory.h unistd.h sys/time.h sys/select.h inttypes.h stdarg.h stdint.h])
Packit e8bc57
AC_CHECK_HEADERS([limits.h float.h],,[AC_CHECK_HEADERS(values.h)])
Packit e8bc57
Packit e8bc57
dnl Checks for typedefs, structures, and compiler characteristics.
Packit e8bc57
AC_TYPE_PID_T
Packit e8bc57
AC_TYPE_SIZE_T
Packit e8bc57
AC_TYPE_UID_T
Packit e8bc57
AC_FUNC_SELECT_ARGTYPES
Packit e8bc57
AC_CHECK_TYPES([uint, ulong, uint32_t, u_int32_t, int32_t, int16_t, u_int16_t, uint16_t, u_int8_t, ssize_t])
Packit e8bc57
AC_CHECK_TYPE(u_long, unsigned long)
Packit e8bc57
dnl XXX FIXME - this is a crude hack and not necessarily working,
Packit e8bc57
dnl but it might be good enough if we don't see asynchronous signals
Packit e8bc57
AC_CHECK_TYPES([sig_atomic_t],,,[
Packit e8bc57
#include <signal.h>
Packit e8bc57
])
Packit e8bc57
dnl FreeBSD needs sys/types.h and sys/time.h for sys/resource.h
Packit e8bc57
AC_CHECK_TYPES([rlim_t],,,[
Packit e8bc57
#ifdef HAVE_SYS_TYPES_H
Packit e8bc57
#include <sys/types.h>
Packit e8bc57
#endif
Packit e8bc57
#ifdef HAVE_SYS_TIME_H
Packit e8bc57
#include <sys/time.h>
Packit e8bc57
#endif
Packit e8bc57
#include <sys/resource.h>
Packit e8bc57
])
Packit e8bc57
AC_CACHE_SAVE
Packit e8bc57
AC_CHECK_SIZEOF(short)
Packit e8bc57
AC_CHECK_SIZEOF(int)
Packit e8bc57
AC_CHECK_SIZEOF(long)
Packit e8bc57
dnl The next one isn't really needed, but useful for post-mortem analysis of
Packit e8bc57
dnl automated package build logs such as bento.freebsd.org or buildd.debian.org:
Packit e8bc57
AC_CHECK_SIZEOF(size_t)
Packit e8bc57
Packit e8bc57
AC_FUNC_MEMCMP
Packit e8bc57
AC_FUNC_MMAP
Packit e8bc57
AC_FUNC_VPRINTF
Packit e8bc57
Packit e8bc57
AC_CHECK_FUNCS(strchr strrchr memcpy memmove snprintf vsnprintf getopt_long arc4random)
Packit e8bc57
AC_REPLACE_FUNCS(strlcpy strlcat strerror strtoul)
Packit e8bc57
Packit e8bc57
AC_LIB_RPATH
Packit e8bc57
Packit e8bc57
dnl Allow the user to enable/disable use of database transactions
Packit e8bc57
Packit e8bc57
AC_ARG_ENABLE(transactions,
Packit e8bc57
	AS_HELP_STRING([--enable-transactions],
Packit e8bc57
	[force transactional mode (disable traditional) in Berkeley DB @<:@compile both modes and select at run-time@:>@]),
Packit e8bc57
	if test "$enableval" = no; then
Packit e8bc57
		[USE_TRANSACTIONS=NO]
Packit e8bc57
	fi
Packit e8bc57
	if test "$enableval" = yes; then
Packit e8bc57
		[USE_TRANSACTIONS=YES]
Packit e8bc57
	fi
Packit e8bc57
	if test x$USE_TRANSACTIONS != x ; then
Packit e8bc57
		AC_DEFINE_UNQUOTED(USE_TRANSACTIONS, "$USE_TRANSACTIONS", [transactions enabled/disabled flag])
Packit e8bc57
		AC_SUBST(USE_TRANSACTIONS)
Packit e8bc57
	fi
Packit e8bc57
)
Packit e8bc57
dnl dummy ARG_ENABLE to produce the help string
Packit e8bc57
AC_ARG_ENABLE(dummy,
Packit e8bc57
	AS_HELP_STRING([--disable-transactions],
Packit e8bc57
	[disable transactional mode (force traditional) in Berkeley DB @<:@compile both modes and select at run-time@:>@]),,)
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(DISABLE_TRANSACTIONS, test x$USE_TRANSACTIONS = xNO)
Packit e8bc57
AM_CONDITIONAL(ENABLE_TRANSACTIONS, test x$USE_TRANSACTIONS = xYES)
Packit e8bc57
Packit e8bc57
if test x$USE_TRANSACTIONS = xNO ; then
Packit e8bc57
	AC_DEFINE(DISABLE_TRANSACTIONS,1,
Packit e8bc57
	[Disable transactional mode in Berkeley DB])
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
if test x$USE_TRANSACTIONS = xYES ; then
Packit e8bc57
	AC_DEFINE(ENABLE_TRANSACTIONS,1,
Packit e8bc57
	[Force transactional mode in Berkeley DB])
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
AC_ARG_ENABLE(dbshared-test,
Packit e8bc57
	      AS_HELP_STRING([--disable-dbshared-test], [defeat test for shared environment (unsafe)]))
Packit e8bc57
Packit e8bc57
AC_CACHE_SAVE
Packit e8bc57
Packit e8bc57
WITH_DB_ENGINE=db
Packit e8bc57
AC_ARG_WITH(database,
Packit e8bc57
	    AS_HELP_STRING([--with-database=ENGINE],
Packit e8bc57
	    [choose database engine {db|qdbm|sqlite3|tokyocabinet|kyotocabinet|lmdb} [[db]]]),
Packit e8bc57
	    [ WITH_DB_ENGINE=$withval ]
Packit e8bc57
)
Packit e8bc57
Packit e8bc57
case "x$WITH_DB_ENGINE" in
Packit e8bc57
    xsqlite|xsqlite3)
Packit e8bc57
	AC_DEFINE(ENABLE_SQLITE_DATASTORE,1, [Enable sqlite3 datastore])
Packit e8bc57
	DB_TYPE=sqlite
Packit e8bc57
	DB_EXT=.db
Packit e8bc57
	AC_CHECK_HEADERS([sqlite3.h],,AC_MSG_ERROR(Cannot find sqlite3.h header file))
Packit e8bc57
	AC_LIB_LINKFLAGS([sqlite3])
Packit e8bc57
	LIBDB="$LIBSQLITE3"
Packit e8bc57
	WITH_DB_ENGINE="sqlite3"
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBDB $LIBS"
Packit e8bc57
	AC_CHECK_FUNC([sqlite3_prepare_v2],,AC_DEFINE(sqlite3_prepare_v2,sqlite3_prepare,[Define to sqlite3_prepare if new interface missing (for sqlite < 3.3.9)]))
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
	;;
Packit e8bc57
    xtokyocabinet)
Packit e8bc57
	AC_DEFINE(ENABLE_TOKYOCABINET_DATASTORE,1, [Enable tokyocabinet datastore])
Packit e8bc57
	DB_TYPE=tokyocabinet
Packit e8bc57
	DB_EXT=.tc
Packit e8bc57
	AC_LIB_LINKFLAGS([tokyocabinet])
Packit e8bc57
	LIBDB="$LIBTOKYOCABINET"
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBS $LIBDB"
Packit e8bc57
	AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit e8bc57
#include <tcutil.h>
Packit e8bc57
#include <tcbdb.h>
Packit e8bc57
#include <stdlib.h>
Packit e8bc57
#include <stdbool.h>
Packit e8bc57
#include <stdint.h>
Packit e8bc57
	], [
Packit e8bc57
	    TCBDB *d = tcbdbnew();
Packit e8bc57
	])],,AC_MSG_ERROR(Cannot link to tokyocabinet library.))
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
        ;;
Packit e8bc57
    xkyotocabinet)
Packit e8bc57
	AC_DEFINE(ENABLE_KYOTOCABINET_DATASTORE,1, [Enable kyotocabinet datastore])
Packit e8bc57
	DB_TYPE=kyotocabinet
Packit e8bc57
	DB_EXT=.kct
Packit e8bc57
	AC_LIB_LINKFLAGS([kyotocabinet])
Packit e8bc57
	LIBDB="$LIBKYOTOCABINET"
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBS $LIBDB"
Packit e8bc57
	AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit e8bc57
#include <kclangc.h>
Packit e8bc57
	], [
Packit e8bc57
	    KCDB *db = kcdbnew();
Packit e8bc57
	])],,AC_MSG_ERROR(Cannot link to kyotocabinet library.))
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
        ;;
Packit e8bc57
    xlmdb)
Packit e8bc57
	AC_DEFINE(ENABLE_LMDB_DATASTORE,1, [Enable LMDB datastore])
Packit e8bc57
	DB_TYPE=lmdb
Packit e8bc57
	DB_EXT=.lmdb
Packit e8bc57
	AC_LIB_LINKFLAGS([lmdb])
Packit e8bc57
	LIBDB="$LIBLMDB"
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBS $LIBDB"
Packit e8bc57
	AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit e8bc57
#include <lmdb.h>
Packit e8bc57
	], [
Packit e8bc57
		MDB_env *env;
Packit e8bc57
		MDB_txn *txn;
Packit e8bc57
		MDB_dbi dbi;
Packit e8bc57
		mdb_env_create(&env;;
Packit e8bc57
		mdb_env_set_maxreaders(env, 1);
Packit e8bc57
		mdb_env_set_mapsize(env, 4096*42);
Packit e8bc57
		mdb_env_open(env, "/tmp", 0, 0660);
Packit e8bc57
		mdb_txn_begin(env, 0, 0, &txn);
Packit e8bc57
		mdb_dbi_open(txn, "", 0, &dbi;;
Packit e8bc57
	])],,AC_MSG_ERROR(Cannot link to lmdb library.))
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
        ;;
Packit e8bc57
    xqdbm)
Packit e8bc57
	AC_DEFINE(ENABLE_QDBM_DATASTORE,1, [Enable qdbm datastore])
Packit e8bc57
	DB_TYPE=qdbm
Packit e8bc57
	DB_EXT=.qdbm
Packit e8bc57
	PKG_CHECK_MODULES(QDBM, qdbm,
Packit e8bc57
		  [CFLAGS="$CFLAGS $QDBM_CFLAGS"],
Packit e8bc57
		  [AC_LIB_LINKFLAGS([qdbm])
Packit e8bc57
		   AC_CHECK_HEADERS(qdbm/depot.h,
Packit e8bc57
				    CFLAGS="$CFLAGS -I/usr/include/qdbm")])
Packit e8bc57
	LIBDB="$LIBQDBM $QDBM_LIBS"
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBS $LIBDB"
Packit e8bc57
	AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit e8bc57
#include <stdlib.h>
Packit e8bc57
#include <depot.h>
Packit e8bc57
	], [
Packit e8bc57
	    DEPOT *d = dpopen("", 0, 0);
Packit e8bc57
	])],,AC_MSG_ERROR(Cannot link to qdbm library.))
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
    ;;
Packit e8bc57
    xdb*)
Packit e8bc57
	dnl check if we need LIBDB at all (it is harmful on BSD since
Packit e8bc57
	dnl they rename the library including soname)
Packit e8bc57
	dnl and try to guess if we need -lpthread or -lthread
Packit e8bc57
	DB_TYPE=db
Packit e8bc57
	DB_EXT=.db
Packit e8bc57
	AC_LIB_LINKFLAGS([db])
Packit e8bc57
	AC_MSG_CHECKING(db and dependent libraries)
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	havelib=0
Packit e8bc57
	for dblibs in "" "$LIBDB" ; do
Packit e8bc57
	    for addlibs in "" -lpthread -lthread ; do
Packit e8bc57
		LIBDB="$dblibs $addlibs"
Packit e8bc57
		export LIBDB
Packit e8bc57
	        LIBS="$saveLIBS $LIBDB"
Packit e8bc57
		export LIBS
Packit e8bc57
		AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <db.h>], [int r, s, t; db_version(&r, &s, &t);])],havelib=1 ; break 2)
Packit e8bc57
	    done
Packit e8bc57
	done
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
	export LIBS
Packit e8bc57
	if test $havelib = 0 ; then
Packit e8bc57
	    AC_MSG_RESULT(error)
Packit e8bc57
	    AC_MSG_ERROR([[
Packit e8bc57
=====================================================================
Packit e8bc57
Cannot link against libdb? Try these steps to solve the problem:
Packit e8bc57
1. Be sure that the Berkeley DB developer package is installed.
Packit e8bc57
2. Type:  rm -f config.cache    then re-run configure.
Packit e8bc57
3. If the problem persists, report it to the bogofilter mailing list.
Packit e8bc57
   Remember to include your config.log.
Packit e8bc57
=====================================================================
Packit e8bc57
	    ]])
Packit e8bc57
	fi
Packit e8bc57
	AC_MSG_RESULT($LIBDB)
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
	export LIBS
Packit e8bc57
	AH_TEMPLATE([HAVE_DB_H], [Have suitable db.h header])
Packit e8bc57
	AC_SUBST(LIBDB)
Packit e8bc57
Packit e8bc57
	dnl check if run-time link works
Packit e8bc57
	saveLIBS="$LIBS"
Packit e8bc57
	LIBS="$LIBS $LIBDB"
Packit e8bc57
	AC_MSG_CHECKING(if a program can be linked against Berkeley DB and run)
Packit e8bc57
	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
Packit e8bc57
#ifdef HAVE_INTTYPES_H
Packit e8bc57
#include <inttypes.h>
Packit e8bc57
#endif
Packit e8bc57
#include <db.h>
Packit e8bc57
		   ]], [[
Packit e8bc57
return 0;
Packit e8bc57
		   ]])],,
Packit e8bc57
		   [AC_MSG_RESULT(no)
Packit e8bc57
	AC_MSG_ERROR([Cannot run a program linked against libdb.
Packit e8bc57
Did you adjust your library search path to include your libdb?])],true)
Packit e8bc57
	AC_MSG_RESULT(yes)
Packit e8bc57
Packit e8bc57
	dnl check if header and library of DB library match
Packit e8bc57
	dnl ignore if cross compiling
Packit e8bc57
	AC_MSG_CHECKING(if Berkeley DB header and library versions match)
Packit e8bc57
	rm -r -f bfadtestdir
Packit e8bc57
	mkdir bfadtestdir
Packit e8bc57
	AC_RUN_IFELSE([
Packit e8bc57
	AC_LANG_PROGRAM([[
Packit e8bc57
		   #include <stdlib.h>
Packit e8bc57
		   #include <stdio.h>
Packit e8bc57
#ifdef HAVE_INTTYPES_H
Packit e8bc57
#include <inttypes.h>
Packit e8bc57
#endif
Packit e8bc57
		   #include <db.h>
Packit e8bc57
		   ]], [[
Packit e8bc57
			int maj, min;
Packit e8bc57
			(void)db_version(&maj, &min, 0);
Packit e8bc57
			(void)fprintf(stderr, "headers: %d.%d, library: %d.%d\n",
Packit e8bc57
				DB_VERSION_MAJOR, DB_VERSION_MINOR, maj, min);
Packit e8bc57
			if (maj != DB_VERSION_MAJOR) exit(1);
Packit e8bc57
			if (min != DB_VERSION_MINOR) exit(1);
Packit e8bc57
			exit(0);
Packit e8bc57
		   ]])],,
Packit e8bc57
		   [AC_MSG_RESULT(no)
Packit e8bc57
		   AC_MSG_ERROR(db.h header file and db library version do not match.)],true)
Packit e8bc57
	AC_MSG_RESULT(yes)
Packit e8bc57
	AC_CHECK_DECLS(db_create,,
Packit e8bc57
	       AC_MSG_ERROR([[Can not locate a suitable Berkeley DB db.h header file.
Packit e8bc57
Use --with-libdb-prefix=PATH to specify the path to a v3+ install directory.
Packit e8bc57
You can download Berkeley DB 4.3.x from http://www.sleepycat.com/]]),
Packit e8bc57
	[[#ifdef HAVE_INTTYPES_H
Packit e8bc57
#include <inttypes.h>
Packit e8bc57
#endif
Packit e8bc57
#include <db.h>]]
Packit e8bc57
	)
Packit e8bc57
	AC_MSG_CHECKING(if Berkeley DB supports shared environments)
Packit e8bc57
	if test "x$enable_dbshared_test" != xno && test "x$USE_TRANSACTIONS" != xNO ; then
Packit e8bc57
	AC_RUN_IFELSE([
Packit e8bc57
	AC_LANG_PROGRAM([[
Packit e8bc57
#ifdef HAVE_INTTYPES_H
Packit e8bc57
#include <inttypes.h>
Packit e8bc57
#endif
Packit e8bc57
#include <db.h>
Packit e8bc57
#include <stdio.h>
Packit e8bc57
#include <stdlib.h>
Packit e8bc57
#define TESTDIR "bfadtestdir"
Packit e8bc57
#define barf(where, what) do { fprintf(stderr, "%s failed: %s\n", where, db_strerror(what)); exit(1); } while(0)
Packit e8bc57
		   ]], [[
Packit e8bc57
    DB_ENV *e;
Packit e8bc57
    int r;
Packit e8bc57
    if ((r = db_env_create(&e, 0))) barf("db_env_create", r);
Packit e8bc57
    if ((r = e->open(e, TESTDIR, DB_INIT_LOG|DB_INIT_TXN|DB_INIT_MPOOL|DB_CREATE, 0664)))
Packit e8bc57
	barf("DB_ENV->open", r);
Packit e8bc57
    if ((r = e->close(e, 0)))
Packit e8bc57
        barf("DB_ENV->close", r);
Packit e8bc57
    if ((r = db_env_create(&e, 0))) barf("db_env_create", r);
Packit e8bc57
    if ((r = e->remove(e, TESTDIR, 0))) barf("DB_ENV->remove", r);
Packit e8bc57
    return 0;
Packit e8bc57
		   ]])],,
Packit e8bc57
		   [AC_MSG_RESULT(no)
Packit e8bc57
	rm -r -f bfadtestdir
Packit e8bc57
	AC_MSG_ERROR([
Packit e8bc57
Cannot open a shared environment in Berkeley DB. This is a known problem
Packit e8bc57
on Fedora Core Linux. Build your own Berkeley DB installation and use
Packit e8bc57
--with-libdb-prefix to point bogofilter to it. Alternatively, you can
Packit e8bc57
use the unsafe non-transactional database by configuring with
Packit e8bc57
--disable-transactions.
Packit e8bc57
Packagers, if you are absolutely sure that the target system supports
Packit e8bc57
shared environments, you can use --disable-dbshared-test.])],true)
Packit e8bc57
	rm -r -f bfadtestdir
Packit e8bc57
	AC_MSG_RESULT(yes)
Packit e8bc57
    else
Packit e8bc57
	AC_MSG_RESULT(skipped)
Packit e8bc57
    fi
Packit e8bc57
Packit e8bc57
	AC_DEFINE(ENABLE_DB_DATASTORE,1, [Enable Berkeley DB datastore])
Packit e8bc57
	LIBS="$saveLIBS"
Packit e8bc57
    ;;
Packit e8bc57
    *)
Packit e8bc57
	AC_MSG_ERROR([Invalid --with-database argument. Supported engines are db, qdbm, sqlite3, tokyocabinet, kyotocabinet, lmdb.])
Packit e8bc57
    ;;
Packit e8bc57
esac
Packit e8bc57
Packit e8bc57
if test "a$STATIC_DB" = a ; then
Packit e8bc57
    if test "a$WITH_DB_ENGINE" = a ; then
Packit e8bc57
	STATIC_DB="-ldb"
Packit e8bc57
    else
Packit e8bc57
	STATIC_DB="-l$WITH_DB_ENGINE"
Packit e8bc57
    fi
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
if test "x$BF_ZAP_LIBDB" = "xzap" ; then
Packit e8bc57
    LIBDB=
Packit e8bc57
    export LIBDB
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
AC_DEFINE_UNQUOTED(DB_EXT, "$DB_EXT", [database file extension])
Packit e8bc57
AC_DEFINE_UNQUOTED(DB_TYPE, "$DB_TYPE", [database type])
Packit e8bc57
AC_SUBST(DB_EXT)
Packit e8bc57
AC_SUBST(DB_TYPE)
Packit e8bc57
AC_SUBST(STATIC_DB)
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(ENABLE_QDBM_DATASTORE, test "x$WITH_DB_ENGINE" = "xqdbm")
Packit e8bc57
AM_CONDITIONAL(ENABLE_SQLITE_DATASTORE, test "x$WITH_DB_ENGINE" = "xsqlite3")
Packit e8bc57
AM_CONDITIONAL(ENABLE_TOKYOCABINET_DATASTORE, test "x$WITH_DB_ENGINE" = "xtokyocabinet")
Packit e8bc57
AM_CONDITIONAL(ENABLE_KYOTOCABINET_DATASTORE, test "x$WITH_DB_ENGINE" = "xkyotocabinet")
Packit e8bc57
AM_CONDITIONAL(ENABLE_LMDB_DATASTORE, test "x$WITH_DB_ENGINE" = "xlmdb")
Packit e8bc57
Packit e8bc57
dnl Use TRIO to replace missing snprintf/vsnprintf.
Packit e8bc57
needtrio=0
Packit e8bc57
if test "$BF_FORCE_TRIO" = "yes" ; then needtrio=1 ; ac_cv_func_vsnprintf=no ; ac_cv_func_snprintf=no ; fi
Packit e8bc57
if test "x$ac_cv_func_snprintf" != "xyes" ; then
Packit e8bc57
    AC_DEFINE(snprintf, trio_snprintf, [Define to trio_snprintf if your system lacks snprintf])
Packit e8bc57
    needtrio=1
Packit e8bc57
fi
Packit e8bc57
if test "x$ac_cv_func_vsnprintf" != "xyes" ; then
Packit e8bc57
    AC_DEFINE(vsnprintf, trio_vsnprintf, [Define to trio_vsnprintf if your system lacks vsnprintf])
Packit e8bc57
    needtrio=1
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
if test $needtrio -gt 0
Packit e8bc57
then
Packit e8bc57
    dnl BEGIN TRIO
Packit e8bc57
    dnl Alpha floating-point compiler option.
Packit e8bc57
    dnl
Packit e8bc57
    AC_MSG_CHECKING(for IEEE compilation options)
Packit e8bc57
    AC_CACHE_VAL(ac_cv_ieee_option, [
Packit e8bc57
        ac_cv_ieee_option="none"
Packit e8bc57
Packit e8bc57
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
Packit e8bc57
        #if !(defined(__alpha) && (defined(__DECC) || defined(__DECCXX) || (defined(__osf__) && defined(__LANGUAGE_C__))) && (defined(VMS) || defined(__VMS)))
Packit e8bc57
        # error "Option needed"
Packit e8bc57
        #endif
Packit e8bc57
        ]])],[ac_cv_ieee_option="/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE"],[])
Packit e8bc57
Packit e8bc57
        if test $ac_cv_ieee_option = none ; then
Packit e8bc57
            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
Packit e8bc57
            #if !(defined(__alpha) && (defined(__DECC) || defined(__DECCXX) || (defined(__osf__) && defined(__LANGUAGE_C__))) && !(defined(VMS) || defined(__VMS)) && !defined(_CFE))
Packit e8bc57
            # error "Option needed"
Packit e8bc57
            #endif
Packit e8bc57
            ]])],[ac_cv_ieee_option="-ieee"],[])
Packit e8bc57
        fi
Packit e8bc57
Packit e8bc57
        if test $ac_cv_ieee_option = none ; then
Packit e8bc57
            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
Packit e8bc57
            #if !(defined(__alpha) && (defined(__GNUC__) && (defined(__osf__) || defined(__linux__))))
Packit e8bc57
            # error "Option needed"
Packit e8bc57
            #endif
Packit e8bc57
        ]])],[ac_cv_ieee_option="-mieee"],[])
Packit e8bc57
        fi
Packit e8bc57
    ]) dnl end AC_CACHE_VAL
Packit e8bc57
    AC_MSG_RESULT($ac_cv_ieee_option)
Packit e8bc57
    if test $ac_cv_ieee_option != none; then
Packit e8bc57
        CFLAGS="${CFLAGS} ${ac_cv_ieee_option}"
Packit e8bc57
    fi
Packit e8bc57
    dnl END TRIO
Packit e8bc57
Packit e8bc57
    AC_DEFINE(NEEDTRIO, 1, [Define to 1 if trio is to be included.])
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(NEEDTRIO, test "$needtrio" = "1")
Packit e8bc57
Packit e8bc57
dnl check if XMLTO is somewhere
Packit e8bc57
AC_CHECK_PROG(ac_cv_enable_xmlto, xmlto, yes, no)
Packit e8bc57
AC_MSG_CHECKING([whether xmlto is available])
Packit e8bc57
AC_MSG_RESULT($ac_cv_enable_xmlto)
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(ENABLE_XMLTO, test x$ac_cv_enable_xmlto = xyes)
Packit e8bc57
dnl end of tests
Packit e8bc57
Packit e8bc57
dnl BEGIN EMBEDDED GSL
Packit e8bc57
AC_CACHE_CHECK([for extended floating point registers],ac_cv_c_extended_fp,
Packit e8bc57
	       [case "$host" in
Packit e8bc57
		*sparc*-*-*) ac_cv_c_extended_fp=no ;;     
Packit e8bc57
		*powerpc*-*-*) ac_cv_c_extended_fp=no ;;      
Packit e8bc57
		*mips*-*-*) ac_cv_c_extended_fp=no ;;
Packit e8bc57
		*hppa*-*-*) ac_cv_c_extended_fp=no ;;      
Packit e8bc57
		*alpha*-*-*) ac_cv_c_extended_fp=no ;;      
Packit e8bc57
		*68k*-*-*) ac_cv_c_extended_fp=yes ;;      
Packit e8bc57
		*86*-*-*) ac_cv_c_extended_fp=yes ;;      
Packit e8bc57
		*) ac_cv_c_extended_fp=unknown ;;
Packit e8bc57
	    esac])
Packit e8bc57
Packit e8bc57
if test $ac_cv_c_extended_fp != "no" ; then
Packit e8bc57
  AC_DEFINE(HAVE_EXTENDED_PRECISION_REGISTERS,1)
Packit e8bc57
  AC_SUBST(HAVE_EXTENDED_PRECISION_REGISTERS)
Packit e8bc57
fi
Packit e8bc57
dnl END EMBEDDED GSL
Packit e8bc57
Packit e8bc57
AH_BOTTOM([
Packit e8bc57
#ifdef HAVE_EXTENDED_PRECISION_REGISTERS
Packit e8bc57
#define GSL_COERCE_DBL(x) (gsl_coerce_double(x))
Packit e8bc57
#else
Packit e8bc57
#define GSL_COERCE_DBL(x) (x)
Packit e8bc57
#endif
Packit e8bc57
])
Packit e8bc57
Packit e8bc57
Packit e8bc57
AC_CACHE_SAVE
Packit e8bc57
Packit e8bc57
if test "$sysconfdir" = "\${prefix}/etc" \
Packit e8bc57
    && { test "$prefix" = "NONE" || test "$prefix" = "/usr" \
Packit e8bc57
      || test "$prefix" = "/usr/" ; } ; then
Packit e8bc57
    if test "$( (uname -s) )" = "Linux" ; then
Packit e8bc57
      sysconfdir=/etc
Packit e8bc57
    fi
Packit e8bc57
    (
Packit e8bc57
    prefix=$ac_default_prefix
Packit e8bc57
    sysconfdir=`eval echo "$sysconfdir"`
Packit e8bc57
    AC_MSG_NOTICE([configuration directory is "$sysconfdir".])
Packit e8bc57
    AC_MSG_NOTICE([use --sysconfdir to override.])
Packit e8bc57
    )
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
dnl work around Linux ldconfig design bug
Packit e8bc57
dnl ldconfig will cache libraries in order found in library search
Packit e8bc57
dnl order rather than by minor version, so it will happily link against
Packit e8bc57
dnl /usr/lib/libgsl.so.0 (which is 0.4.0) when
Packit e8bc57
dnl /usr/local/lib/libgsl.so.0 (which is 0.5.0) is available
Packit e8bc57
dnl so try to find gsl-config in trusted system path first
Packit e8bc57
Packit e8bc57
AC_MSG_NOTICE([-------------------------------------------------------------])
Packit e8bc57
AC_MSG_NOTICE([If you have multiple versions of GSL installed, this])
Packit e8bc57
AC_MSG_NOTICE([configure script will prefer the one in /lib or /usr/lib])
Packit e8bc57
AC_MSG_NOTICE([to work around a bug in Linux ldconfig.])
Packit e8bc57
AC_MSG_NOTICE([Deinstall the older GSL version if this behaviour annoys you.])
Packit e8bc57
AC_MSG_NOTICE([-------------------------------------------------------------])
Packit e8bc57
Packit e8bc57
PATH_SAVED="$PATH"
Packit e8bc57
PATH=/bin:/usr/bin:$PATH
Packit e8bc57
export PATH
Packit e8bc57
Packit e8bc57
need_my_gsl=1
Packit e8bc57
AC_ARG_WITH(included-gsl, AS_HELP_STRING([--with-included-gsl],[force use of shipped GSL rather than system GSL]),
Packit e8bc57
    if test "x$withval" = "xyes" ; then need_my_gsl=2 ; fi)
Packit e8bc57
Packit e8bc57
if test "$need_my_gsl" = 1 ; then
Packit e8bc57
  AM_PATH_GSL(1.4,
Packit e8bc57
		AC_DEFINE(HAVE_GSL_14,,[Define if you have GNU Scientific Library 1.4 or newer])
Packit e8bc57
		need_my_gsl=0)
Packit e8bc57
  AM_PATH_GSL(1.0,
Packit e8bc57
		AC_DEFINE(HAVE_GSL_10,,[Define if you have GNU Scientific Library 1.0 or newer])
Packit e8bc57
		need_my_gsl=0)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
if test "$need_my_gsl" != 0 ; then
Packit e8bc57
  GSL_LIBS="libbf_gsl.a"
Packit e8bc57
  AC_DEFINE(HAVE_GSL_14)
Packit e8bc57
  AC_DEFINE(HAVE_GSL_10)
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
PATH="$PATH_SAVED"
Packit e8bc57
Packit e8bc57
AM_CONDITIONAL(NEED_GSL,test $need_my_gsl != 0)
Packit e8bc57
AM_CONDITIONAL(NEED_GETOPT,test $ac_cv_func_getopt_long != yes)
Packit e8bc57
Packit e8bc57
have_dosish_system=no
Packit e8bc57
case "${host}" in
Packit e8bc57
    *-*-mingw32*)
Packit e8bc57
        # special stuff for Windoze NT
Packit e8bc57
        have_dosish_system=yes
Packit e8bc57
        ;;
Packit e8bc57
    i?86-emx-os2 | i?86-*-os2*emx )
Packit e8bc57
        # OS/2 with the EMX environment
Packit e8bc57
        have_dosish_system=no
Packit e8bc57
        ;;
Packit e8bc57
    i?86-*-msdosdjgpp*)
Packit e8bc57
        # DOS with the DJGPP environment
Packit e8bc57
        have_dosish_system=yes
Packit e8bc57
        ;;
Packit e8bc57
    *)
Packit e8bc57
       ;;
Packit e8bc57
esac
Packit e8bc57
Packit e8bc57
bogofilter_transform=`echo "${program_transform_name}" | sed -e 's,\\\\\\\\,\\\\,g;s,\\\$\\\$,\$,g'`
Packit e8bc57
transformed_bogofilter=`echo bogofilter | sed -e "$bogofilter_transform"`
Packit e8bc57
transformed_bogoutil=`echo bogoutil | sed -e "$bogofilter_transform"`
Packit e8bc57
AC_SUBST(transformed_bogofilter)
Packit e8bc57
AC_SUBST(transformed_bogoutil)
Packit e8bc57
Packit e8bc57
# Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
Packit e8bc57
Packit e8bc57
AC_DEFINE(CURDIR_S, ".", [Define name of current directory (C string)])
Packit e8bc57
AC_DEFINE(EXTSEP_S, ".", [Define file extension separator (C string)])
Packit e8bc57
Packit e8bc57
if test "$have_dosish_system" = no; then
Packit e8bc57
AC_DEFINE(DIRSEP_C, '/', [Define directory separator (C character)])
Packit e8bc57
AC_DEFINE(DIRSEP_S, "/", [Define directory separator (C string)])
Packit e8bc57
else
Packit e8bc57
AC_DEFINE(DIRSEP_C, '\\\\')
Packit e8bc57
AC_DEFINE(DIRSEP_S, "\\\\")
Packit e8bc57
fi
Packit e8bc57
Packit e8bc57
AC_CONFIG_FILES([Makefile \
Packit e8bc57
		bogofilter.spec \
Packit e8bc57
		trio/Makefile \
Packit e8bc57
		doc/Makefile \
Packit e8bc57
		src/Makefile \
Packit e8bc57
		src/tests/Makefile \
Packit e8bc57
		src/bf_compact src/bf_copy src/bf_tar \
Packit e8bc57
		])
Packit e8bc57
AC_OUTPUT
Packit e8bc57
Packit e8bc57
AC_MSG_NOTICE([Using these settings:])
Packit e8bc57
AC_MSG_NOTICE([---------------------])
Packit e8bc57
AC_MSG_NOTICE([CPPFLAGS=$CPPFLAGS])
Packit e8bc57
AC_MSG_NOTICE([  CFLAGS=$CFLAGS])
Packit e8bc57
AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS])
Packit e8bc57
AC_MSG_NOTICE([    LIBS=$LIBS])
Packit e8bc57
AC_MSG_NOTICE([   LIBDB=$LIBDB])
Packit e8bc57
AC_MSG_NOTICE([GSL_LIBS=$GSL_LIBS])
Packit e8bc57
AC_MSG_NOTICE([LIBICONV=$LIBICONV])