# aclocal.m4 generated automatically by aclocal 1.5

# Copyright 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

# Do all the work for Automake.  This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.

# serial 5

# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery.  Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...


# We require 2.13 because we rely on SHELL being computed by configure.
AC_PREREQ([2.13])

# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
# -----------------------------------------------------------
# If MACRO-NAME is provided do IF-PROVIDED, else IF-NOT-PROVIDED.
# The purpose of this macro is to provide the user with a means to
# check macros which are provided without letting her know how the
# information is coded.
# If this macro is not defined by Autoconf, define it here.
ifdef([AC_PROVIDE_IFELSE],
      [],
      [define([AC_PROVIDE_IFELSE],
              [ifdef([AC_PROVIDE_$1],
                     [$2], [$3])])])


# AM_INIT_AUTOMAKE(PACKAGE,VERSION, [NO-DEFINE])
# ----------------------------------------------
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_REQUIRE([AC_PROG_INSTALL])dnl
# test to see if srcdir already configured
if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
   test -f $srcdir/config.status; then
  AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])
fi

# Define the identity of the package.
PACKAGE=$1
AC_SUBST(PACKAGE)dnl
VERSION=$2
AC_SUBST(VERSION)dnl
ifelse([$3],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])

# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
# the ones we care about.
ifdef([m4_pattern_allow],
      [m4_pattern_allow([^AM_[A-Z]+FLAGS])])dnl

# Autoconf 2.50 always computes EXEEXT.  However we need to be
# compatible with 2.13, for now.  So we always define EXEEXT, but we
# don't compute it.
AC_SUBST(EXEEXT)
# Similar for OBJEXT -- only we only use OBJEXT if the user actually
# requests that it be used.  This is a bit dumb.
: ${OBJEXT=o}
AC_SUBST(OBJEXT)

# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal)
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake)
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_MISSING_PROG(AMTAR, tar)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
# We need awk for the "check" target.  The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CC],
                  [_AM_DEPENDENCIES(CC)],
                  [define([AC_PROG_][CC],
                          defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CXX],
                  [_AM_DEPENDENCIES(CXX)],
                  [define([AC_PROG_][CXX],
                          defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl
])

#
# Check to make sure that the build environment is sane.
#

# serial 3

# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Do `set' in a subshell so we don't clobber the current shell's
# arguments.  Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
   if test "$[*]" = "X"; then
      # -L didn't work.
      set X `ls -t $srcdir/configure conftest.file`
   fi
   rm -f conftest.file
   if test "$[*]" != "X $srcdir/configure conftest.file" \
      && test "$[*]" != "X conftest.file $srcdir/configure"; then

      # If neither matched, then we have a broken ls.  This can happen
      # if, for instance, CONFIG_SHELL is bash and it inherits a
      # broken ls alias from the environment.  This has actually
      # happened.  Such a system could not be considered "sane".
      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
alias in your environment])
   fi

   test "$[2]" = conftest.file
   )
then
   # Ok.
   :
else
   AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])


# serial 2

# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])


# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
  am_missing_run="$MISSING --run "
else
  am_missing_run=
  am_backtick='`'
  AC_MSG_WARN([${am_backtick}missing' script is too old or missing])
fi
])

# AM_AUX_DIR_EXPAND

# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory.  The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run.  This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
#    fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
#    fails if $ac_aux_dir is absolute,
#    fails when called from a subdirectory in a VPATH build with
#          a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir.  In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
#   MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH.  The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.

AC_DEFUN([AM_AUX_DIR_EXPAND], [
# expand $ac_aux_dir to an absolute path
am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
])

# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])

# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries.  This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])

# serial 4						-*- Autoconf -*-



# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery.  Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...



# _AM_DEPENDENCIES(NAME)
# ---------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX" or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl

ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc']
       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
                   [depcc="$$1"   am_compiler_list=])

AC_CACHE_CHECK([dependency style of $depcc],
               [am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
  # We make a subdir and do the tests there.  Otherwise we can end up
  # making bogus files that we don't know about and never remove.  For
  # instance it was reported that on HP-UX the gcc test will end up
  # making a dummy file named `D' -- because `-MD' means `put the output
  # in D'.
  mkdir conftest.dir
  # Copy depcomp to subdir because otherwise we won't find it if we're
  # using a relative directory.
  cp "$am_depcomp" conftest.dir
  cd conftest.dir

  am_cv_$1_dependencies_compiler_type=none
  if test "$am_compiler_list" = ""; then
     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
  fi
  for depmode in $am_compiler_list; do
    # We need to recreate these files for each test, as the compiler may
    # overwrite some of them when testing with obscure command lines.
    # This happens at least with the AIX C compiler.
    echo '#include "conftest.h"' > conftest.c
    echo 'int i;' > conftest.h
    echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf

    case $depmode in
    nosideeffect)
      # after this tag, mechanisms are not by side-effect, so they'll
      # only be used when explicitly requested
      if test "x$enable_dependency_tracking" = xyes; then
	continue
      else
	break
      fi
      ;;
    none) break ;;
    esac
    # We check with `-c' and `-o' for the sake of the "dashmstdout"
    # mode.  It turns out that the SunPro C++ compiler does not properly
    # handle `-M -o', and we need to detect this.
    if depmode=$depmode \
       source=conftest.c object=conftest.o \
       depfile=conftest.Po tmpdepfile=conftest.TPo \
       $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
       grep conftest.h conftest.Po > /dev/null 2>&1 &&
       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
      am_cv_$1_dependencies_compiler_type=$depmode
      break
    fi
  done

  cd ..
  rm -rf conftest.dir
else
  am_cv_$1_dependencies_compiler_type=none
fi
])
$1DEPMODE="depmode=$am_cv_$1_dependencies_compiler_type"
AC_SUBST([$1DEPMODE])
])


# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
  DEPDIR=.deps
else
  # MS-DOS does not allow filenames that begin with a dot.
  DEPDIR=_deps
fi
rmdir .deps 2>/dev/null
AC_SUBST(DEPDIR)
])


# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[  --disable-dependency-tracking Speeds up one-time builds
  --enable-dependency-tracking  Do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
  am_depcomp="$ac_aux_dir/depcomp"
  AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
pushdef([subst], defn([AC_SUBST]))
subst(AMDEPBACKSLASH)
popdef([subst])
])

# Generate code to set up dependency tracking.
# This macro should only be invoked once -- use via AC_REQUIRE.
# Usage:
# AM_OUTPUT_DEPENDENCY_COMMANDS

#
# This code is only required when automatic dependency tracking
# is enabled.  FIXME.  This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],[
AC_OUTPUT_COMMANDS([
test x"$AMDEP_TRUE" != x"" ||
for mf in $CONFIG_FILES; do
  case "$mf" in
  Makefile) dirpart=.;;
  */Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
  *) continue;;
  esac
  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
  # Extract the definition of DEP_FILES from the Makefile without
  # running `make'.
  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
  test -z "$DEPDIR" && continue
  # When using ansi2knr, U may be empty or an underscore; expand it
  U=`sed -n -e '/^U = / s///p' < "$mf"`
  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
  # We invoke sed twice because it is the simplest approach to
  # changing $(DEPDIR) to its actual value in the expansion.
  for file in `sed -n -e '
    /^DEP_FILES = .*\\\\$/ {
      s/^DEP_FILES = //
      :loop
	s/\\\\$//
	p
	n
	/\\\\$/ b loop
      p
    }
    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
    # Make sure the directory exists.
    test -f "$dirpart/$file" && continue
    fdir=`echo "$file" | sed -e 's|/[^/]*$||'`
    $ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
    # echo "creating $dirpart/$file"
    echo '# dummy' > "$dirpart/$file"
  done
done
], [AMDEP_TRUE="$AMDEP_TRUE"
ac_aux_dir="$ac_aux_dir"])])

# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
doit:
	@echo done
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include='#'
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
   am__include=include
   am__quote=
   _am_result=GNU
fi
# Now try BSD make style include.
if test "$am__include" = "#"; then
   echo '.include "confinc"' > confmf
   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
      am__include=.include
      am__quote='"'
      _am_result=BSD
   fi
fi
AC_SUBST(am__include)
AC_SUBST(am__quote)
AC_MSG_RESULT($_am_result)
rm -f confinc confmf
])

# serial 3

# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
#
# FIXME: Once using 2.50, use this:
# m4_match([$1], [^TRUE\|FALSE$], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_DEFUN([AM_CONDITIONAL],
[ifelse([$1], [TRUE],
        [errprint(__file__:__line__: [$0: invalid condition: $1
])dnl
m4exit(1)])dnl
ifelse([$1], [FALSE],
       [errprint(__file__:__line__: [$0: invalid condition: $1
])dnl
m4exit(1)])dnl
AC_SUBST([$1_TRUE])
AC_SUBST([$1_FALSE])
if $2; then
  $1_TRUE=
  $1_FALSE='#'
else
  $1_TRUE='#'
  $1_FALSE=
fi])

# Like AC_CONFIG_HEADER, but automatically create stamp file.

# serial 3

# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated.  We must strip everything past the first ":",
# and everything past the last "/".

AC_PREREQ([2.12])

AC_DEFUN([AM_CONFIG_HEADER],
[ifdef([AC_FOREACH],dnl
	 [dnl init our file count if it isn't already
	 m4_ifndef([_AM_Config_Header_Index], m4_define([_AM_Config_Header_Index], [0]))
	 dnl prepare to store our destination file list for use in config.status
	 AC_FOREACH([_AM_File], [$1],
		    [m4_pushdef([_AM_Dest], m4_patsubst(_AM_File, [:.*]))
		    m4_define([_AM_Config_Header_Index], m4_incr(_AM_Config_Header_Index))
		    dnl and add it to the list of files AC keeps track of, along
		    dnl with our hook
		    AC_CONFIG_HEADERS(_AM_File,
dnl COMMANDS, [, INIT-CMDS]
[# update the timestamp
echo timestamp >"AS_ESCAPE(_AM_DIRNAME(]_AM_Dest[))/stamp-h]_AM_Config_Header_Index["
][$2]m4_ifval([$3], [, [$3]]))dnl AC_CONFIG_HEADERS
		    m4_popdef([_AM_Dest])])],dnl
[AC_CONFIG_HEADER([$1])
  AC_OUTPUT_COMMANDS(
   ifelse(patsubst([$1], [[^ ]], []),
	  [],
	  [test -z "$CONFIG_HEADERS" || echo timestamp >dnl
	   patsubst([$1], [^\([^:]*/\)?.*], [\1])stamp-h]),dnl
[am_indx=1
for am_file in $1; do
  case " \$CONFIG_HEADERS " in
  *" \$am_file "*)
    am_dir=\`echo \$am_file |sed 's%:.*%%;s%[^/]*\$%%'\`
    if test -n "\$am_dir"; then
      am_tmpdir=\`echo \$am_dir |sed 's%^\(/*\).*\$%\1%'\`
      for am_subdir in \`echo \$am_dir |sed 's%/% %'\`; do
        am_tmpdir=\$am_tmpdir\$am_subdir/
        if test ! -d \$am_tmpdir; then
          mkdir \$am_tmpdir
        fi
      done
    fi
    echo timestamp > "\$am_dir"stamp-h\$am_indx
    ;;
  esac
  am_indx=\`expr \$am_indx + 1\`
done])
])]) # AM_CONFIG_HEADER

# _AM_DIRNAME(PATH)
# -----------------
# Like AS_DIRNAME, only do it during macro expansion
AC_DEFUN([_AM_DIRNAME],
       [m4_if(m4_regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
	      m4_if(m4_regexp([$1], [^//\([^/]\|$\)]), -1,
		    m4_if(m4_regexp([$1], [^/.*]), -1,
			  [.],
			  m4_patsubst([$1], [^\(/\).*], [\1])),
		    m4_patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
	      m4_patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
]) # _AM_DIRNAME

dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
dnl
dnl This macro figures out how to build C programs using POSIX
dnl threads.  It sets the PTHREAD_LIBS output variable to the threads
dnl library and linker flags, and the PTHREAD_CFLAGS output variable
dnl to any special C compiler flags that are needed.  (The user can also
dnl force certain compiler flags/libs to be tested by setting these
dnl environment variables.)
dnl
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
dnl multi-threaded programs (defaults to the value of CC otherwise).
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
dnl
dnl If you are only building threads programs, you may wish to
dnl use these variables in your default LIBS, CFLAGS, and CC:
dnl
dnl        LIBS="$PTHREAD_LIBS $LIBS"
dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
dnl        CC="$PTHREAD_CC"
dnl
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE
dnl to that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
dnl
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands
dnl to run it if it is not found.  If ACTION-IF-FOUND is not specified,
dnl the default action will define HAVE_PTHREAD.
dnl
dnl Please let the authors know if this macro fails on any platform,
dnl or if you have any other suggestions or comments.  This macro was
dnl based on work by SGJ on autoconf scripts for FFTW (www.fftw.org)
dnl (with help from M. Frigo), as well as ac_pthread and hb_pthread
dnl macros posted by AFC to the autoconf macro repository.  We are also
dnl grateful for the helpful feedback of numerous users.
dnl
dnl @version $Id: acx_pthread.m4,v 1.4 2005/07/29 22:05:04 ca Exp $
dnl @version $Gnu-Id: acx_pthread.m4,v 1.6 2002/07/13 08:46:20 simons Exp $
dnl @author Steven G. Johnson <stevenj@alum.mit.edu> and Alejandro Forero Cuervo <bachue@bachue.com>

AC_DEFUN([ACX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_SAVE
AC_LANG_C
acx_pthread_ok=no

# We used to check for pthread.h first, but this fails if pthread.h
# requires special compiler flags (e.g. on True64 or Sequent).
# It gets checked for in the link test anyway.

# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
        save_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
        save_LIBS="$LIBS"
        LIBS="$PTHREAD_LIBS $LIBS"
        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
        AC_MSG_RESULT($acx_pthread_ok)
        if test x"$acx_pthread_ok" = xno; then
                PTHREAD_LIBS=""
                PTHREAD_CFLAGS=""
        fi
        LIBS="$save_LIBS"
        CFLAGS="$save_CFLAGS"
fi

# We must check for the threads library under a number of different
# names; the ordering is very important because some systems
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).

# Create a list of thread flags to try.  Items starting with a "-" are
# C compiler flags, and other items are library names, except for "none"
# which indicates that we try without any flags at all, and "pthread-config"
# which is a program returning the flags for the Pth emulation library.

acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"

# The ordering *is* (sometimes) important.  Some notes on the
# individual items follow:

# pthreads: AIX (must check this before -lpthread)
# none: in case threads are in libc; should be tried before -Kthread and
#       other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
# -pthreads: Solaris/gcc
# -mthreads: Mingw32/gcc, Lynx/gcc
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
#      doesn't hurt to check since this sometimes defines pthreads too;
#      also defines -D_REENTRANT)
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)

case "${host_cpu}-${host_os}" in
        *solaris*)

        # On Solaris (at least, for some versions), libc contains stubbed
        # (non-functional) versions of the pthreads routines, so link-based
        # tests will erroneously succeed.  (We need to link with -pthread or
        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
        # a function called by this macro, so we could check for that, but
        # who knows whether they'll stub that too in a future libc.)  So,
        # we'll just look for -pthreads and -lpthread first:

        acx_pthread_flags="-pthreads -pthread pthread -mt $acx_pthread_flags"
        ;;

	*hpux11*)
	# HP UX 11: some compilers support -mt to set all options for
	# multithreaded programs
	acx_pthread_flags="pthreads none -mt -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe pthread-config"
	;;
esac

if test x"$acx_pthread_ok" = xno; then
for flag in $acx_pthread_flags; do

        case $flag in
                none)
                AC_MSG_CHECKING([whether pthreads work without any flags])
                ;;

                -*)
                AC_MSG_CHECKING([whether pthreads work with $flag])
                PTHREAD_CFLAGS="$flag"
                ;;

		pthread-config)
		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
		if test x"$acx_pthread_config" = xno; then continue; fi
		PTHREAD_CFLAGS="`pthread-config --cflags`"
		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
		;;

                *)
                AC_MSG_CHECKING([for the pthreads library -l$flag])
                PTHREAD_LIBS="-l$flag"
                ;;
        esac

        save_LIBS="$LIBS"
        save_CFLAGS="$CFLAGS"
        LIBS="$PTHREAD_LIBS $LIBS"
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"

        # Check for various functions.  We must include pthread.h,
        # since some functions may be macros.  (On the Sequent, we
        # need a special flag -Kthread to make this header compile.)
        # We check for pthread_join because it is in -lpthread on IRIX
        # while pthread_create is in libc.  We check for pthread_attr_init
        # due to DEC craziness with -lpthreads.  We check for
        # pthread_cleanup_push because it is one of the few pthread
        # functions on Solaris that doesn't have a non-functional libc stub.
        # We try pthread_create on general principles.
        AC_TRY_LINK([#include <pthread.h>],
                    [pthread_t th; th=0;pthread_join(th, 0);
                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
                    [acx_pthread_ok=yes])

        LIBS="$save_LIBS"
        CFLAGS="$save_CFLAGS"

        AC_MSG_RESULT($acx_pthread_ok)
        if test "x$acx_pthread_ok" = xyes; then
                break;
        fi

        PTHREAD_LIBS=""
        PTHREAD_CFLAGS=""
done
fi

# Various other checks:
if test "x$acx_pthread_ok" = xyes; then
        save_LIBS="$LIBS"
        LIBS="$PTHREAD_LIBS $LIBS"
        save_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"

        # Detect AIX lossage: threads are created detached by default
        # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
        AC_MSG_CHECKING([for joinable pthread attribute])
        AC_TRY_LINK([#include <pthread.h>],
                    [int attr=PTHREAD_CREATE_JOINABLE;],
                    ok=PTHREAD_CREATE_JOINABLE, ok=unknown)
        if test x"$ok" = xunknown; then
                AC_TRY_LINK([#include <pthread.h>],
                            [int attr=PTHREAD_CREATE_UNDETACHED;],
                            ok=PTHREAD_CREATE_UNDETACHED, ok=unknown)
        fi
        if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
                AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok,
                          [Define to the necessary symbol if this constant
                           uses a non-standard name on your system.])
        fi
        AC_MSG_RESULT(${ok})
        if test x"$ok" = xunknown; then
                AC_MSG_WARN([we do not know how to create joinable pthreads])
        fi

        AC_MSG_CHECKING([if more special flags are required for pthreads])
        flag=no
        case "${host_cpu}-${host_os}" in
                *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
                *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
        esac
        AC_MSG_RESULT(${flag})
        if test "x$flag" != xno; then
                PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
        fi

        LIBS="$save_LIBS"
        CFLAGS="$save_CFLAGS"

        # More AIX lossage: must compile with cc_r
        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
else
        PTHREAD_CC="$CC"
fi

AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_CC)

# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test x"$acx_pthread_ok" = xyes; then
        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
        :
else
        acx_pthread_ok=no
        $2
fi
AC_LANG_RESTORE
])dnl ACX_PTHREAD

dnl $Id: acsite.m4,v 1.72 2007/07/28 16:45:05 ca Exp $

dnl ##########################################################################
dnl ###  SM_UNSIGNED_SIZE_T - check for unsigned size_t
dnl ##########################################################################

AC_DEFUN([SM_UNSIGNED_SIZE_T], [
  AC_CACHE_CHECK([for unsigned size_t],
    sm_cv_unsigned_size_t,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <sys/types.h>

int main()
{
	size_t v;

	v = 0;
	--v;
	if (v > 0)
		exit(0);
	exit(1);
}
>>changequote([, ]),
      sm_cv_unsigned_size_t=yes,
      sm_cv_unsigned_size_t=no,
      sm_cv_unsigned_size_t=no
    )]
  )
  if test "$sm_cv_unsigned_size_t" = "yes"; then
    AC_DEFINE(HAVE_UNSIGNED_SIZE_T, 1, [Define if your system size_t is unsigned ])
  fi
])

dnl ##########################################################################
dnl ###  SM_UNSIGNED_CHAR - check for unsigned char
dnl ##########################################################################

AC_DEFUN([SM_UNSIGNED_CHAR], [
  AC_CACHE_CHECK([for unsigned char],
    sm_cv_unsigned_char,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <sys/types.h>

int main()
{
	char v;

	v = 0;
	--v;
	if (v > 0)
		exit(0);
	exit(1);
}
>>changequote([, ]),
      sm_cv_unsigned_char=yes,
      sm_cv_unsigned_char=no,
      sm_cv_unsigned_char=no
    )]
  )
  if test "$sm_cv_unsigned_char" = "yes"; then
    AC_DEFINE(HAVE_UNSIGNED_CHAR, 1, [Define if your system char is unsigned ])
  fi
])

dnl ##########################################################################
dnl ###  SM_STATFS_4ARGS - check for four-argument statfs call
dnl ##########################################################################

AC_DEFUN([SM_STATFS_4ARGS], [
  AC_CACHE_CHECK([for four-argument statfs call],
    sm_cv_statfs_4args,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#if HAVE_SYS_STATFS_H
#include <sys/statfs.h>
#endif
#if HAVE_SYS_MOUNT_H
#include <sys/param.h>
#include <sys/mount.h>
#endif

int main()
{
	char *dir;
	struct statfs fs;

	dir = ".";
	if (statfs(dir, &fs, sizeof fs, 0) == 0)
		exit(0);
	exit(1);
}
>>changequote([, ]),
      sm_cv_statfs_4args=yes,
      sm_cv_statfs_4args=no,
      sm_cv_statfs_4args=no
    )]
  )
  if test "$sm_cv_statfs_4args" = "yes"; then
    AC_DEFINE(HAVE_STATFS_4ARGS, 1, [Define if statfs uses four arguments])
  fi
])

dnl ##########################################################################
dnl ###  SM_FUNC_SNPRINTF - check for working snprintf()
dnl ##########################################################################

AC_DEFUN([SM_FUNC_SNPRINTF], [
  AC_CACHE_CHECK([for working snprintf],
    sm_cv_func_snprintf_works,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>

typedef struct {
  int length;
  char *test;
  int retval;
  char *result;
} test_t;

const test_t tests[] = {
  { 10, "12345678901234567890", 20, "123456789" },
#if 0
  { 0, "12345678901234567890", 20, NULL },
  { -1, "12345678901234567890", -1, NULL },
#endif
  { 0, NULL, 0, NULL }
};

int main() {
  char test1[1024];
  int i;

  for (i = 0; tests[i].test; i++) {
    memset(test1, 'X', sizeof(test1));
    if ((snprintf(test1, tests[i].length, "%s", tests[i].test)
         != tests[i].retval) ||
        (tests[i].result && strcmp(tests[i].result, test1)))
      exit(1);
  }

  exit(0);
}
>>changequote([, ]),
      sm_cv_func_snprintf_works=yes,
      sm_cv_func_snprintf_works=no,
      sm_cv_func_snprintf_works=no
    )]
  )
  if test "$sm_cv_func_snprintf_works" = "yes"; then
    AC_DEFINE(HAVE_SNPRINTF, 1, [Define if your system has a working snprintf])
  else
    LIBOBJS="$LIBOBJS snprintf.o"
  fi
])

dnl ##########################################################################
dnl ###  SM_TYPE - check for arbitrary type in arbitrary header file(s)
dnl ##########################################################################

dnl ### Usage: SM_TYPE(type_t, default, [ #include <hdr1.h> ... ])
AC_DEFUN([SM_TYPE], [
  AC_CACHE_CHECK(if $1 is defined, sm_cv_type_$1,
    AC_TRY_LINK($3,
      $1 x;,
      sm_cv_type_$1=yes,
      sm_cv_type_$1=no
    )
  )
  if test "$sm_cv_type_$1" != "yes"; then
    AC_DEFINE($1, $2, Define if your system does not have $1)
  fi
])

dnl ##########################################################################
dnl ###  SM_LIB_WRAP - check for TCP Wrappers library
dnl ##########################################################################

AC_DEFUN([SM_LIB_WRAP], [
  AC_CHECK_HEADERS(tcpd.h)
  if test "$ac_cv_header_tcpd_h" = "yes"; then
    sm_old_libs="$LIBS"
    LIBS="$LIBS -lwrap"
    AC_CACHE_CHECK([for libwrap library], sm_cv_lib_wrap_hosts_ctl,
      AC_TRY_LINK(
        [
          #include <stdio.h>
          #include <tcpd.h>
          int allow_severity;
          int deny_severity;
        ], [
          hosts_ctl("test", STRING_UNKNOWN, "10.0.0.1", STRING_UNKNOWN);
        ],
        sm_cv_lib_wrap_hosts_ctl=yes,
        sm_cv_lib_wrap_hosts_ctl=no
      )
    )
    if test "$sm_cv_lib_wrap_hosts_ctl" = "yes"; then
      AC_DEFINE(HAVE_LIBWRAP, 1, [Define if you have libwrap])
    else
      LIBS="$sm_old_libs"
    fi
  fi
])

dnl ##########################################################################
dnl ###  SM_CHECK_RES_SEARCH - check for broken res_search()
dnl ##########################################################################

AC_DEFUN([SM_CHECK_RES_SEARCH], [
  AC_CACHE_CHECK([for broken res_search],
    sm_cv_func_broken_res_search,
    AC_TRY_RUN(
      [
	#include <sys/types.h>
	#include <netinet/in.h>
	#include <arpa/nameser.h>
	#include <resolv.h>

	int main()
	{
	  unsigned char answer[1024];

	  if (res_search("unknown.sendmail.org", C_IN, T_MX,
		         answer, sizeof(answer)) == -1
	      && h_errno == 0)
	    exit(0);

	  exit(1);
	}
      ],
      sm_cv_func_broken_res_search=yes,
      sm_cv_func_broken_res_search=no
    )
  )
  if test "$sm_cv_func_broken_res_search" = "yes"; then
    AC_DEFINE(BROKEN_RES_SEARCH, 1,
              [Define if res_search sets h_errno to 0 on unknown hosts])
  fi
])

dnl dnl ##########################################################################
dnl dnl ###  SM_CHECK_DN_EXPAND - check for dn_expand()
dnl dnl ##########################################################################
dnl 
dnl AC_DEFUN([SM_CHECK_DN_EXPAND], [
dnl   AC_CACHE_CHECK([for dn_expand libraries],
dnl     sm_cv_func_dn_expand,
dnl 	AC_TRY_COMPILE(
dnl       [
dnl 	#include <sys/types.h>
dnl 	#include <netinet/in.h>
dnl 	#include <arpa/nameser.h>
dnl 	#include <resolv.h>
dnl 	#include <netdb.h>
dnl 
dnl 	int main()
dnl 	{
dnl 	  int n;
dnl 	  unsigned char msg[1024], *eomorig, *comp_dn;
dnl 	  char expand[1024];
dnl 
dnl 	  n = dn_expand(msg, eomorig, comp_dn, expand, sizeof(expand));
dnl 	}
dnl       ],
dnl       sm_cv_func_dn_expand=yes,
dnl       sm_cv_func_dn_expand=no
dnl     )
dnl   )
dnl   if test "$sm_cv_func_dn_expand" = "yes"; then
dnl     AC_DEFINE(DN_EXPAND_NEEDS_LIBRESOLV, 1,
dnl               [Define if dn_expand needs libresolv])
dnl   fi
dnl ])


dnl ##########################################################################
dnl ###  SM_TYPE_ACCEPT - check for type of 3rd arg to accept()
dnl ##########################################################################

AC_DEFUN([SM_TYPE_ACCEPT], [
  AC_CHECK_FUNCS(accept)
  if test "$ac_cv_func_accept" = "yes"; then
    AC_CACHE_CHECK([for type of argument 3 of accept],
      sm_cv_type_accept_arg3,
      for sm_type in 'socklen_t' 'size_t' 'unsigned long'  'unsigned int' 'int'; do
	AC_TRY_COMPILE(
	  [
	    #include <sys/types.h>
	    #include <sys/socket.h>
	  ], [
	    extern int accept(int, struct sockaddr *, $sm_type *);
          ],
          [ sm_cv_type_accept_arg3=$sm_type; break ]
        )
      done
      if test "$sm_cv_type_accept_arg3" = ""; then
	sm_cv_type_accept_arg3="int";
      fi
    )
    if test "$sm_cv_type_accept_arg3" != ""; then
      AC_DEFINE_UNQUOTED(socklen_T, $sm_cv_type_accept_arg3,
                         [Define to the type of the 3rd arg to accept()])
    fi
  fi
])

dnl ##########################################################################
dnl ###  SM_TYPE_GETSOCKOPT - check for type of 5th arg to getsockopt()
dnl ##########################################################################

AC_DEFUN([SM_TYPE_GETSOCKOPT], [
  AC_CHECK_FUNCS(getsockopt)
  if test "$ac_cv_func_getsockopt" = "yes"; then
    AC_CACHE_CHECK([for type of argument 5 of getsockopt],
      sm_cv_type_getsockopt_arg5,
      for sm_type in 'socklen_t' 'size_t' 'int'; do
	AC_TRY_COMPILE(
	  [
	    #include <sys/types.h>
	    #include <sys/socket.h>
	  ], [
	    extern int getsockopt(int, int, int, void *, $sm_type *);
          ],
          [ sm_cv_type_getsockopt_arg5=$sm_type; break ]
        )
      done
      if test "$sm_cv_type_getsockopt_arg5" = ""; then
	sm_cv_type_getsockopt_arg5="int";
      fi
    )
    if test "$sm_cv_type_getsockopt_arg5" != ""; then
      AC_DEFINE_UNQUOTED(sockoptlen_T, $sm_cv_type_getsockopt_arg5,
                         [Define to the type of the 5th arg to getsockopt()])
    fi
  fi
])

dnl ##########################################################################
dnl ###  SM_TYPE_GETPWNAME_R - check for POSIX conformance of getpwnam_r()
dnl ##########################################################################

AC_DEFUN([SM_TYPE_GETPWNAME_R], [
  AC_CHECK_FUNCS(getpwnam_r)
    AC_CACHE_CHECK([for POSIX conformance of getpwnam_r],
      sm_cv_posix_getpwnam_r,
	[AC_TRY_LINK(
changequote(<<, >>)<<
#ifndef _POSIX_PTHREAD_SEMANTICS
#define _POSIX_PTHREAD_SEMANTICS 1
#endif
#include <pwd.h>
int r;
struct passwd *pwent;
struct passwd pwentb;
char buf[1024];
	  >>,
	  <<
	    r = getpwnam_r("root", &pwentb, buf, sizeof(buf), &pwent);
>>changequote([, ]),
      sm_cv_posix_getpwnam_r=yes,
      sm_cv_posix_getpwnam_r=no
        )]
    )
  if test "$sm_cv_posix_getpwnam_r" = "yes"; then
	AC_DEFINE_UNQUOTED(POSIX_GETPWNAM_R, 1, [Define if getpwnam_r() conforms to POSIX])
  fi
])


dnl ##########################################################################
dnl ###  SM_SIGWAIT - check for interface to sigwait()
dnl ##########################################################################

AC_DEFUN([SM_SIGWAIT], [
  AC_CHECK_FUNCS(sigwait)
  if test "$ac_cv_func_sigwait" = "yes"; then
    AC_CACHE_CHECK([whether sigwait takes only one argument],
      sm_cv_func_sigwait_one_arg,
      AC_TRY_COMPILE(
	[
	  #include <signal.h>
	], [
	  extern int sigwait(sigset_t *);
	],
	sm_cv_func_sigwait_one_arg=yes,
	sm_cv_func_sigwait_one_arg=no
      )
    )
    if test "$sm_cv_func_sigwait_one_arg" = "yes"; then
      AC_DEFINE(SIGWAIT_ONE_ARG, 1, [Define if sigwait() takes only one arg])
    fi
  fi
])

dnl ##########################################################################
dnl ###  SM_TYPE_CTIME_R - check ctime_r() parameters:
dnl ###  char *ctime_r(const time_t *clock, char *buf);
dnl ###  char *ctime_r(const time_t *clock, char *buf, int buflen);
dnl ##########################################################################

AC_DEFUN([SM_TYPE_CTIME_R], [
  AC_CHECK_FUNCS(ctime_r)
  if test "$ac_cv_func_ctime_r" = "yes"; then
    AC_CACHE_CHECK([ctime_r API], sm_cv_type_ctime_r,
	AC_TRY_COMPILE(
	  [
	    #include <sys/types.h>
	    #include <sys/socket.h>
	  ], [
	    extern char *ctime_r(const time_t *_clock, char *_buf);
	  ],
	  [ sm_cv_type_ctime_r=2 ],
	    AC_TRY_COMPILE(
	      [
	        #include <sys/types.h>
	        #include <sys/socket.h>
	      ], [
	        extern char *ctime_r(const time_t *_clock, char *_buf, int _buflen);
	      ],
	      [ sm_cv_type_ctime_r=3 ],
	   )
	)
      if test "$sm_cv_type_ctime_r" = ""; then
	sm_cv_type_ctime_r=0;
      fi
    )
    if test "$sm_cv_type_ctime_r" != ""; then
      AC_DEFINE_UNQUOTED(SM_CTIME_R_API, $sm_cv_type_ctime_r,
			 [Specify API of ctime_r()])
    fi
  fi
])

dnl ##########################################################################
dnl ###  SM_SAFE_CTYPE ctype.h misbehaves with non-ASCII characters.
dnl ##########################################################################

AC_DEFUN([SM_SAFE_CTYPE], [
  AC_CACHE_CHECK([for safe ctype],
    sm_cv_safe_ctype,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <ctype.h>

int main()
{
	int v;
	char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=|~,./;'[]<>?:{}  ";
	char lower[] = "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=|~,./;'[]<>?:{}  ";

	v = EOF;
	if (isalnum(v))
		exit(1);
	if (isprint(v))
		exit(1);
	upper[sizeof(upper) - 2] = '\"';
	lower[sizeof(lower) - 2] = '\"';
	for (v = 128; v < 256; v++)
		if (isalnum(v))
			exit(1);
	for (v = 0; v < sizeof(upper); v++)
	{
		if (tolower(upper[v]) != lower[v])
			exit(1);
		if (toupper(lower[v]) != upper[v])
			exit(1);
	}
	exit(0);
}
>>changequote([, ]),
      sm_cv_safe_ctype=yes,
      sm_cv_safe_ctype=no,
      sm_cv_safe_ctype=no
    )]
  )
  if test "$sm_cv_safe_ctype" = "yes"; then
    AC_DEFINE(HAVE_SAFE_CTYPE, 1, [Define if your system ctype is 8 bit safe ])
  fi
])

dnl ##########################################################################
dnl ###  SM___PROGNAME - check for __progname
dnl ##########################################################################

AC_DEFUN([SM___PROGNAME], [
  AC_CACHE_CHECK([for __progname],
    sm_cv___progname,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>

extern char **__progname;
int main()
{
	printf("%s\n", __progname);
	exit(0);
}
>>changequote([, ]),
      sm_cv___progname=yes,
      sm_cv___progname=no,
      sm_cv___progname=no
    )]
  )
  if test "$sm_cv___progname" = "yes"; then
    AC_DEFINE(HAVE___PROGNAME, 1, [Define if your system has char *__progname ])
  fi
])

dnl ##########################################################################
dnl ###  SM_MSGHDR_MSG_CONTROL - check if msghdr{} has msg_control member.
dnl ##########################################################################

AC_DEFUN([SM_MSGHDR_MSG_CONTROL], [
AC_CACHE_CHECK(if msghdr{} has msg_control member, ac_cv_msghdr_has_msg_control,
	AC_TRY_COMPILE([
#		include <sys/types.h>
#		include <sys/socket.h>],
		[unsigned int i = sizeof(((struct msghdr *)0)->msg_control)],
	ac_cv_msghdr_has_msg_control=yes,
	ac_cv_msghdr_has_msg_control=no))
if test $ac_cv_msghdr_has_msg_control = yes ; then
	AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL, 1, [Define if msghdr{} has msg_control member])
fi
])

dnl ##########################################################################
dnl ###  SM_SOCK_UN_SUN_LEN - check if sockaddr_un has sun_len member.
dnl ##########################################################################

AC_DEFUN([SM_SOCK_UN_SUN_LEN], [
AC_CACHE_CHECK(if sockaddr_un has sun_len member, ac_cv_sock_un_sun_len,
	AC_TRY_COMPILE([
#		include <sys/types.h>
#		include <sys/socket.h>
#		include <sys/un.h>],
		[unsigned int i = sizeof(((struct sockaddr_un *)0)->sun_len)],
	ac_cv_sock_un_sun_len=yes,
	ac_cv_sock_un_sun_len=no))
if test $ac_cv_sock_un_sun_len = yes ; then
	AC_DEFINE(HAVE_SOCK_UN_SUN_LEN, 1, [Define if sockaddr_un has sun_len member])
fi
])

dnl ##########################################################################
dnl ###  SM_RUSAGE_MEMBER - Check if rusage{} has XYZ member.
dnl ##########################################################################

AC_DEFUN([SM_RUSAGE_MEMBER], [
AC_CACHE_CHECK(if rusage{} has $1 member, ac_cv_rusage_has_$1,
	AC_TRY_COMPILE([
#		include <sys/time.h>
#		include <sys/resource.h>],
		[unsigned int i = sizeof(((struct rusage *)0)->$1)],
	ac_cv_rusage_has_$1=yes,
	ac_cv_rusage_has_$1=no))
if test $ac_cv_rusage_has_$1 = yes ; then
	AC_DEFINE(SM_RUSAGE_$1, 1, [Define if rusage{} has $1 member])
fi
])

dnl ##########################################################################
dnl ###  SM_STAT_MEMBER - Check if stat{} has XYZ member.
dnl ##########################################################################

AC_DEFUN([SM_STAT_MEMBER], [
AC_CACHE_CHECK(if stat{} has $1 member, ac_cv_stat_has_$1,
	AC_TRY_COMPILE([
#		include <sys/types.h>
#		include <sys/stat.h>],
		[unsigned int i = sizeof(((struct stat *)0)->$1)],
	ac_cv_stat_has_$1=yes,
	ac_cv_stat_has_$1=no))
if test $ac_cv_stat_has_$1 = yes ; then
	AC_DEFINE(SM_STAT_$1, 1, [Define if stat{} has $1 member])
fi
])


dnl ##########################################################################
dnl ###  SM_INET_BLKSIZE stat(inet-sock) returns useful value for blksize
dnl ##########################################################################

AC_DEFUN([SM_INET_BLKSIZE], [
  AC_CACHE_CHECK([stat(inet-sock) returns useful value for blksize],
    sm_cv_stblksz_inet,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/stat.h>

int
main(int argc, char **argv)
{
	int fd, r, sockt;
	struct stat st;

	sockt = PF_INET;
	if (argc > 1)
	{
		if (strcasecmp(argv[1], "unix") == 0)
			sockt = PF_UNIX;
		else if (strcasecmp(argv[1], "inet") == 0)
			sockt = PF_INET;
		else return -1;
	}
	fd = socket(sockt, SOCK_STREAM, 0);
	if (fd == -1)
		return -1;
	r = fstat(fd, &st);
	if (r == -1)
		return -1;
	if (st.st_blksize < 256)
		return 1;
	return 0;
}
>>changequote([, ]),
      sm_cv_stblksz_inet=yes,
      sm_cv_stblksz_inet=no,
      sm_cv_stblksz_inet=no
    )]
  )
  if test "$sm_cv_stblksz_inet" = "yes"; then
    AC_DEFINE(HAVE_STBLKSZ_INET, 1, [Define if your system returns useful blksize for inet sockets])
  fi
])


dnl ##########################################################################
dnl ###  SM_FREE_NULL - check whether free(NULL) is ok
dnl ##########################################################################

AC_DEFUN([SM_FREE_NULL], [
  AC_CACHE_CHECK([for free(NULL)],
    sm_cv_free_null,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <stdlib.h>

int main()
{
	free(0);
	exit(0);
}
>>changequote([, ]),
      sm_cv_free_null=yes,
      sm_cv_free_null=no,
      sm_cv_free_null=no
    )]
  )
  if test "$sm_cv_free_null" = "yes"; then
    AC_DEFINE(HAVE_FREE_NULL, 1, [Define if your system allows free(NULL)])
  fi
])

dnl ##########################################################################
dnl ###  SM_STRFTIME_E - check whether strftime() supports %e
dnl ##########################################################################

AC_DEFUN([SM_STRFTIME_E], [
  AC_CACHE_CHECK([strftime() supports %e],
    sm_cv_strftime_e,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <sys/types.h>
#include <time.h>

int main(int argc, char **argv)
{
	size_t r;
	time_t t;
	struct tm *ttm;
	char buf[64];

	t = (time_t) 10000;
	ttm = localtime(&t);
	buf[0] = '\0';
	r = strftime(buf, sizeof(buf), "%e", ttm);
	return strcmp(" 1", buf) == 0;
}
>>changequote([, ]),
      sm_cv_strftime_e=yes,
      sm_cv_strftime_e=no,
      sm_cv_strftime_e=no
    )]
  )
  if test "$sm_cv_strftime_e" = "yes"; then
    AC_DEFINE(HAVE_STRFTIME_E, 1, [Define if strftime() supports %e])
  fi
])


dnl ##########################################################################
dnl ###  Berkeley DB 4.x (x > 0)
dnl ##########################################################################

define(BERKELEY_DB4x_FUNC,
changequote(<<, >>)<<
#include <stdio.h>
#include <db.h>

#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
# error  wrong DB version, need 4.[1-5]
_DB_VERSION_MAJOR DB_VERSION_MAJOR
_DB_VERSION_MINOR DB_VERSION_MINOR
#endif

int
main(int argc, char **argv)
{
	DB *db;
	int ret;

	ret = db_create(&db, 0, 0);
	return 0;
}
>>changequote([, ]))

define(BERKELEY_DB4x_FULL,
changequote(<<, >>)<<
#include <stdio.h>
#include <db.h>
#define BDB_NAME "bdb"
static int
bdb_open(void)
{
	int r;
	unsigned int flags;
	int major_v, minor_v, patch_v;
	char *dbfile, *dbh;
	DB *dbp;
	DB_ENV *dbenv;
	DB_TXN *db_txn;

	dbp = NULL;
	dbenv = NULL;
	db_txn = NULL;
	dbfile = NULL;
	(void) db_version(&major_v, &minor_v, &patch_v);
	if (major_v != DB_VERSION_MAJOR || minor_v != DB_VERSION_MINOR)
		return -1;
	r = db_env_create(&dbenv, 0);
	if (r != 0)
	{
		dbenv->err(dbenv, r, "db_env_create");
		goto error;
	}
	flags = DB_CREATE | DB_INIT_MPOOL | DB_INIT_TXN |
			DB_INIT_LOCK | DB_PRIVATE | DB_RECOVER;
	dbh = BDB_NAME;
	r  = dbenv->open(dbenv, dbh, flags, 0600);
	if (r != 0)
	{
		dbenv->err(dbenv, r,
			"where=DB_ENV->open, dbhome=%s", dbh);
		goto error;
	}

	/* Create and initialize database object, open the database. */
	r = db_create(&dbp, dbenv, 0);
	if (r != 0)
		goto error;

	db_txn = NULL;
	r = dbenv->txn_begin(dbenv, NULL, &db_txn, 0);
	if (r != 0)
		goto error;

	dbfile = BDB_NAME;

	flags = DB_CREATE;
	r = dbp->open(dbp, db_txn, dbfile, NULL, DB_BTREE, flags, 0600);
	if (r != 0)
	{
		dbp->err(dbp, r, "where=db->open, db=%s", BDB_NAME);
		if (db_txn != NULL)
		{
			(void) db_txn->abort(db_txn);
			db_txn = NULL;
		}
		goto error;
	}

	if (db_txn != NULL)
	{
		r = db_txn->commit(db_txn, 0);
		db_txn = NULL;
		if (r != 0)
			goto error;
	}

	return 0;

  error:
	if (dbp != NULL)
		(void) dbp->close(dbp, 0);
	if (dbenv != NULL)
		(void) dbenv->close(dbenv, 0);
	return r;
}

int
main(int argc, char **argv)
{
	int r;

	(void) unlink(BDB_NAME "/bdb");
	(void) unlink(BDB_NAME "/log.0000000001");
	(void) unlink(BDB_NAME);
	(void) rmdir(BDB_NAME);
	(void) mkdir(BDB_NAME, 0775);
	r = bdb_open();
	(void) unlink(BDB_NAME "/bdb");
	(void) unlink(BDB_NAME "/log.0000000001");
	(void) rmdir(BDB_NAME);
	return r;
}
>>changequote([, ]))

AC_DEFUN([BERKELEY_DB4x_CHK_LIB],
[
	DBLIBS="db-4.5 db4.5 db45 db4-4.5 db-4.4 db4.4 db44 db4-4.4 db-4.3 db4.3 db43 db4-4.3 db-4.2 db4.2 db42 db4-4.2 db-4.1 db4.1 db41 db-4 db4 db"
	dnl if lib is specified: try static (lib.a)
	bdb_wo_fdatasync="unknown"
	if test -d "$with_bdb_lib"; then
	    BDB_LIBADD="$with_bdb_lib"
	    for dbname in $DBLIBS
	    do
	        BDB2_SAVE_LIBS=$LIBS
	        LIBS="$LIBS $BDB_LIBADD/lib${dbname}.a"
		AC_TRY_RUN(BERKELEY_DB4x_FUNC,
			MTA_DB_LIB="$BDB_LIBADD/lib${dbname}.a";
			dblib="berkeley"; break, dblib="no")

	        if test $dblib = "no" -a $fdatasync_in_lrt; then
	          BDB3_SAVE_LIBS=$LIBS
	          LIBS="$LIBS $MTA_FDATASYNC_LIB"
	          AC_TRY_RUN([BERKELEY_DB4x_FUNC],
			MTA_DB_LIB="$BDB_LIBADD/lib${dbname}.a $MTA_FDATASYNC_LIB";
			dblib="berkeley"; break, dblib="no")
	          LIBS=$BDB3_SAVE_LIBS
	        fi

	        LIBS=$BDB2_SAVE_LIBS
	    done
	else
	    for dbname in $DBLIBS
	    do
	        BDB2_SAVE_LIBS=$LIBS
	        LIBS="$LIBS -l${dbname}"
		AC_TRY_RUN(BERKELEY_DB4x_FUNC,
			MTA_DB_LIB="-l${dbname}";
			dblib="berkeley"; break, dblib="no")

	        if test $dblib = "no" -a $fdatasync_in_lrt; then
	          BDB3_SAVE_LIBS=$LIBS
	          LIBS="$LIBS $MTA_FDATASYNC_LIB"
	          AC_TRY_RUN([BERKELEY_DB4x_FUNC],
			MTA_DB_LIB="-l${dbname} $MTA_FDATASYNC_LIB";
			dblib="berkeley"; break, dblib="no")
	          LIBS=$BDB3_SAVE_LIBS
	        fi

	        LIBS=$BDB2_SAVE_LIBS
	    done
	fi

	if test $dblib != "no" -a $fdatasync_in_lrt; then
	  BDB3_SAVE_LIBS=$LIBS
	  LIBS="$LIBS $MTA_DB_LIB"
	  AC_TRY_RUN([BERKELEY_DB4x_FULL],
		bdb_wo_fdatasync="ok", bdb_wo_fdatasync="no")
	  LIBS=$BDB3_SAVE_LIBS
	  if test $bdb_wo_fdatasync = "no"; then
	    BDB3_SAVE_LIBS=$LIBS
	    LIBS="$LIBS $MTA_DB_LIB $MTA_FDATASYNC_LIB"
	    AC_TRY_RUN([BERKELEY_DB4x_FULL],
		MTA_DB_LIB="$MTA_DB_LIBS $MTA_FDATASYNC_LIB";
		dblib="berkeley"; break, dblib="no")
	    LIBS=$BDB3_SAVE_LIBS
	  fi
	fi
])

AC_DEFUN([BERKELEY_DB4x_CHK],
[
	if test -d "$with_bdb_inc"; then
	    CPPFLAGS="$CPPFLAGS -I$with_bdb_inc"
	    BDB_INCADD="-I$with_bdb_inc"
	else
	    BDB_INCADD=""
	fi

	AC_CHECK_HEADER(db.h,
                       	BERKELEY_DB4x_CHK_LIB()
			MTA_DB_INC=$BDB_INCADD,
                        dblib="no")
])

AC_DEFUN([SM_BERKELEYDB4], [
  AC_CACHE_CHECK([for Berkeley DB 4.x],
    sm_cv_berkeleyDB4,
    [
	BDB_SAVE_LIBS=$LIBS
	BDB_SAVE_LDFLAGS=$LDFLAGS
	LIBS="$LIBS $MTA_DB_LIB"
	if test -d "$with_bdb_lib"; then
	    LDFLAGS="$LDFLAGS -L$with_bdb_lib"
	fi
AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <db.h>

/*
**  If you change this, change also include/sm/bdb.h
*/
#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 && DB_VERSION_MINOR > 4)
# error  wrong DB version, need 4.x (x > 0)
#endif
#define DB_CACHE_SIZE	1024

int
main(int argc, char **argv)
{
	char *name;
	DBTYPE dbtype;
	DB *db;
	int flags, ret;

	db = NULL;
	flags = DB_CREATE;
	dbtype = DB_HASH;
	ret = db_create(&db, NULL, 0);
	name = "dbtest.db";
	if (ret == 0 && db != NULL)
	{
		ret = db->set_cachesize(db, 0, DB_CACHE_SIZE, 0);
		if (ret != 0)
		{
			(void) db->close(db, 0);
			exit(1);
		}
	}
	if (ret == 0 && db != NULL)
	{
		ret = db->open(db, NULL, name, NULL, dbtype, flags, 0640);
		if (ret != 0)
		{
			(void) db->close(db, 0);
			exit(1);
		}
		(void) db->close(db, 0);
	}
	unlink(name);
	exit(0);
}
>>changequote([, ]),
      sm_cv_berkeleyDB4=yes,
      sm_cv_berkeleyDB4=no,
      sm_cv_berkeleyDB4=no
    )]
	LIBS=$BDB_SAVE_LIBS
	LDFLAGS=$BDB_SAVE_LDFLAGS
  )
  if test "$sm_cv_berkeleyDB4" = "yes"; then
    AC_DEFINE(HAVE_BERKELEYDB4, 1, [Define if Berkeley DB 4.x (x > 0) is available])
  fi
])


dnl ##########################################################################
dnl ###  SYS_NERR
dnl ##########################################################################

AC_DEFUN([SM_SYS_NERR], [
  AC_CACHE_CHECK([for sys_nerr],
    sm_cv_sys_nerr,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <string.h>

int
main(int argc, char **argv)
{
	return (sys_nerr > 0) ? 0 : 1;
}
>>changequote([, ]),
      sm_cv_sys_nerr=yes,
      sm_cv_sys_nerr=no,
      sm_cv_sys_nerr=no
    )]
  )
  if test "$sm_cv_sys_nerr" = "yes"; then
    AC_DEFINE(HAVE_SYS_NERR, 1, [Define if sys_nerr is available])
  fi
])

dnl ##########################################################################
dnl ###  SYS_ERRLIST
dnl ##########################################################################

AC_DEFUN([SM_SYS_ERRLIST], [
  AC_CACHE_CHECK([for sys_errlist],
    sm_cv_sys_errlist,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <string.h>

int
main(int argc, char **argv)
{
	/* hopefully errno==1 is defined */
	return (sys_errlist[1]) ? 0 : 1;
}
>>changequote([, ]),
      sm_cv_sys_errlist=yes,
      sm_cv_sys_errlist=no,
      sm_cv_sys_errlist=no
    )]
  )
  if test "$sm_cv_sys_errlist" = "yes"; then
    AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if sys_errlist is available])
  fi
])


dnl ##########################################################################
dnl ###  PTHREAD_RWLOCK_INIT
dnl ##########################################################################

AC_DEFUN([SM_PTHREAD_RWLOCK_INIT], [
  AC_CACHE_CHECK([for pthread_rwlock_init],
    sm_cv_pthread_rwlock_init,
    [AC_TRY_RUN(
changequote(<<, >>)<<
#include <pthread.h>

int
main(int argc, char **argv)
{
	pthread_rwlock_t rwl;

	if (pthread_rwlock_init(&rwl, 0) != 0)
		exit(1);
	pthread_rwlock_destroy(&rwl);
	exit(0);
}
>>changequote([, ]),
      sm_cv_pthread_rwlock_init=yes,
      sm_cv_pthread_rwlock_init=no,
      sm_cv_pthread_rwlock_init=no
    )]
  )
  if test "$sm_cv_pthread_rwlock_init" = "yes"; then
    AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT, 1, [Define if pthread_rwlock_init is available])
  fi
])

dnl ##########################################################################
dnl ###  SM_TLS
dnl ##########################################################################

AC_DEFUN([SM_TLS], [
 AC_ARG_ENABLE(TLS, [  --enable-TLS           enable STARTTLS (check libraries) ],
  smtls=$enableval,
  smtls=yes)
  AC_MSG_CHECKING(TLS support)
  MTA_TLS_LIB=""
  if test "$smtls" != no; then
    AC_CHECK_LIB(crypto, BIO_write,
	MTA_TLS_LIB="$MTA_TLS_LIB -lcrypto"; lcrypto="yes", lcrypto="no")
    TLS_SAVE_LIBS=$LIBS
    LIBS="$LIBS $MTA_TLS_LIB"
    AC_CHECK_LIB(ssl, SSL_CTX_new,
	MTA_TLS_LIB="-lssl $MTA_TLS_LIB"; lssl="yes", lssl="no")
    if test "$lcrypto" != no -a "lssl" != no; then
      AC_CACHE_CHECK([for OpenSSL availability],
        sm_cv_openssl,
        [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <openssl/ssl.h>

int main(int argc, char **argv)
{
	unsigned int linkversion;

	linkversion = (unsigned int) SSLeay();
	fprintf(stderr,
		"OpenSSL versions:\n"
		"compiled against: version=0x%08x\n"
		"linked against:   version=0x%08x\n"
		, (unsigned int) OPENSSL_VERSION_NUMBER, linkversion);
	exit(((unsigned int) OPENSSL_VERSION_NUMBER == linkversion)
		? 0 : 1);
}
>>changequote([, ]),
        sm_cv_openssl=yes,
        sm_cv_openssl=no,
        sm_cv_openssl=no
        )]
      )
      if test "$sm_cv_openssl" != no; then
        AC_DEFINE(MTA_USE_TLS, 1, [Define if TLS is available and should be used])
        AC_MSG_RESULT(enabled)
      else
        AC_MSG_RESULT(disabled due to failure in test compilation)
      fi
    else
      AC_MSG_RESULT(disabled due to missing libraries)
    fi
    LIBS=$TLS_SAVE_LIBS
  else
    AC_MSG_RESULT(disabled)
  fi
  AC_SUBST(MTA_TLS_LIB)
])

dnl ##########################################################################
dnl ###  SM_SASL
dnl ##########################################################################

AC_DEFUN([SM_SASL], [
 AC_ARG_ENABLE(SASL, [  --enable-SASL          enable SASL (check libraries) ],
  smsasl=$enableval,
  smsasl=yes)
  AC_MSG_CHECKING(SASL support)
  MTA_SASL_LIB=""
  MTA_SASL_INC=""
  if test "$smsasl" = yes; then
    SASL_SAVE_LDFLAGS=$LDFLAGS
    SASL_SAVE_CFLAGS=$CFLAGS
    SASL_SAVE_CPPFLAGS=$CPPFLAGS
    SASL_SAVE_LIBS=$LIBS
    SASL_ADD_L=""
    if test -d "$with_sasl_lib"; then
      SASL_ADD_L="-L$with_sasl_lib"
      LDFLAGS="$LDFLAGS $SASL_ADD_L"
    fi
    SM_SASL_LIB="-lsasl2"
    AC_CHECK_LIB(sasl, sasl_server_init, [SM_SASL_LIB="-lsasl"])
    AC_CHECK_LIB(sasl2, sasl_server_init, [SM_SASL_LIB="-lsasl2"])
    LIBS="$LIBS $SM_SASL_LIB"
    AC_CHECK_FUNCS([sasl_version_info])
    if test -d "$with_sasl_inc"; then
      CPPFLAGS="$CPPFLAGS -I$with_sasl_inc"
      SASL_INCADD="-I$with_sasl_inc"
    else
      SASL_INCADD=""
    fi
    AC_CHECK_HEADER(sasl/sasl.h,
		[MTA_SASL_INC=$SASL_INCADD; sm_cv_cyrus_saslhdr="yes"],
		[sm_cv_cyrus_saslhdr="no"])
    if test "$sm_cv_cyrus_saslhdr" = yes; then
    AC_CACHE_CHECK([for Cyrus SASL v2 availability],
      sm_cv_cyrus_saslv2,
      [AC_TRY_RUN([
#include <stdio.h>
#include <sasl/sasl.h>

#if !HAVE_SASL_VERSION_INFO
void sasl_version_info(const char **implementation,
		       const char **version_string,
		       int *version_major,
		       int *version_minor,
		       int *version_step,
		       int *version_patch)
{
	int v;
	sasl_version(implementation, &v);
	if (version_major)
		*version_major = (v >> 24) & 0xff;
	if (version_minor)
		*version_minor = (v >> 16) & 0xff;
	if (version_step)
		*version_step = v & 0xffff;
	if (version_patch)
		*version_patch = 0;
}
#endif

int main(int argc, char **argv)
{
	const char *implementation, *version_string;
	int r, version_major, version_minor, version_step, version_patch;

	sasl_version_info(&implementation, &version_string,
                          &version_major, &version_minor, &version_step,
                          &version_patch);
	if (version_major != 2)
		exit(1);
	r = sasl_server_init(NULL, "sendmail");
	exit(0);
}],
      sm_cv_cyrus_saslv2=yes,
      sm_cv_cyrus_saslv2=no,
      sm_cv_cyrus_saslv2=no
      )]
    )
    fi
    if test "$sm_cv_cyrus_saslv2" = yes; then
      MTA_SASL_LIB="$SASL_ADD_L $SM_SASL_LIB"
      AC_DEFINE(MTA_USE_SASL, 1, [Define if SASL is available and should be used])
      AC_MSG_RESULT(enabled)
    else
      AC_MSG_RESULT(disabled due to failure in test compilation)
    fi
    LIBS=$SASL_SAVE_LIBS
    CFLAGS=$SASL_SAVE_CFLAGS
    LDFLAGS=$SASL_SAVE_LDFLAGS
    CPPFLAGS=$SASL_SAVE_CPPFLAGS
  else
    AC_MSG_RESULT(disabled)
  fi
  AC_SUBST(MTA_SASL_LIB)
  AC_SUBST(MTA_SASL_INC)
])


dnl ##########################################################################
dnl ###  SM_RES_QUERY_PROTOTYPE - check whether res_query prototype is available
dnl ##########################################################################

AC_DEFUN([SM_RES_QUERY_PROTOTYPE], [
  AC_CACHE_CHECK([check whether res_query prototype is available],
    sm_cv_res_query_prototype,
    AC_TRY_COMPILE([
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>],
	[
	int (*resfunc)(const char *, int, int, unsigned char *, int);
	resfunc = res_query;
	],
      sm_cv_res_query_prototype=yes,
      sm_cv_res_query_prototype=no
    )
  )
  if test "$sm_cv_res_query_prototype" = "yes"; then
    AC_DEFINE(HAVE_RES_QUERY_PROTOTYPE, 1, [Define if your system has res_query() prototype])
  fi
])


dnl ##########################################################################
dnl ###  SM_NEED_NAMESER_COMPAT_H - check whether nameser_compat.h is needed
dnl ##########################################################################

AC_DEFUN([SM_NEED_NAMESER_COMPAT_H], [
  AC_CHECK_HEADERS(arpa/nameser_compat.h)
  AC_CHECK_HEADERS(arpa/nameser8_compat.h)
  AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <arpa/nameser.h>

int main()
{
	int i;
	HEADER hp;

	i = T_MX;
	i += hp.qdcount;
	exit(0);
}
>>changequote([, ]),
      sm_cv_need_nameser_compat_h=no,
      sm_cv_need_nameser_compat_h=maybe,
      sm_cv_need_nameser_compat_h=maybe
  )
  if test "$sm_cv_need_nameser_compat_h" = "maybe"; then
    if test "$ac_cv_header_arpa_nameser8_compat_h" = "yes"; then
      AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <arpa/nameser.h>
#include <arpa/nameser8_compat.h>

int main()
{
	int i;
	HEADER hp;

	i = T_MX;
	i += hp.qdcount;
	exit(0);
}
>>changequote([, ]),
        sm_cv_need_nameser8_compat_h=yes,
        sm_cv_need_nameser8_compat_h=no,
        sm_cv_need_nameser8_compat_h=no
      )
      if test "$sm_cv_need_nameser8_compat_h" = "yes"; then
        AC_DEFINE(NEED_NAMESER8_COMPAT, 1, [Define if your system needs arpa/nameser8_compat.h])
      fi
    fi
    if test "$ac_cv_header_arpa_nameser_compat_h" = "yes" -a "$sm_cv_need_nameser8_compat_h" = "no"; then
      AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <arpa/nameser.h>
#include <arpa/nameser_compat.h>

int main()
{
	int i;
	HEADER hp;

	i = T_MX;
	i += hp.qdcount;
	exit(0);
}
>>changequote([, ]),
        sm_cv_need_nameser_compat_h=yes,
        sm_cv_need_nameser_compat_h=no,
        sm_cv_need_nameser_compat_h=no
      )
    fi
    if test "$sm_cv_need_nameser_compat_h" = "yes"; then
      AC_DEFINE(NEED_NAMESER_COMPAT, 1, [Define if your system needs arpa/nameser_compat.h])
    fi
  fi
])


dnl ##########################################################################
dnl ###  SM_SHA
dnl ##########################################################################

dnl check for SHA1
dnl AC_CHECK_HEADERS(sha1.h)
dnl AC_CHECK_FUNCS(SHA1Init SHA1Update SHA1Final)
dnl AC_CHECK_FUNCS(SHA1_Init SHA1_Update SHA1_Final)
dnl AC_CHECK_LIB(crypto, SHA1)

AC_DEFUN([SM_SHA], [
  MTA_SHA_LIB=""
  AC_CHECK_HEADERS(openssl/sha.h)
  if test "$ac_cv_header_openssl_sha_h" = "yes"; then
    SM_OLD_LIBS="$LIBS"
    LIBS="$LIBS -lcrypto"
    AC_CACHE_CHECK([check whether SHA1 works],
      sm_cv_sha1,
      [AC_TRY_RUN(
changequote(<<, >>)<<
#include <stdio.h>
#include <openssl/sha.h>

int main()
{
	unsigned char md[SHA_DIGEST_LENGTH];
	const char *d = "sha1 test";
	unsigned long n;

	n = strlen(d);
	SHA1(d, n, md);
	exit(0);
}
>>changequote([, ]),
      sm_cv_sha1=yes,
      sm_cv_sha1=no,
      sm_cv_sha1=no
      )]
    )
    if test "$sm_cv_sha1" = "yes"; then
      AC_DEFINE(HAVE_SHA1, 1, [Define if your system has a working SHA1() function])
      AC_CHECK_LIB(crypto, SHA1, MTA_SHA_LIB="-lcrypto", )
    fi
    LIBS="$SM_OLD_LIBS"
  fi
  AC_SUBST(MTA_SHA_LIB)
])

dnl ##########################################################################
dnl ###  SM_NEED_PROTO(includes, function)
dnl ##########################################################################

AC_DEFUN(SM_NEED_PROTO, [
if test "$ac_cv_func_$2" = yes; then
AC_CACHE_CHECK([if $2 needs a prototype], ac_cv_func_$2_noproto,
AC_TRY_COMPILE([$1],
[struct foo { int foo; } xx;
extern int $2 (struct foo*);
$2(&xx);
],
eval "ac_cv_func_$2_noproto=yes",
eval "ac_cv_func_$2_noproto=no"))
define([foo], [NEED_]translit($2, [a-z], [A-Z])[_PROTO])
if test "$ac_cv_func_$2_noproto" = yes; then
	AC_DEFINE(foo, 1, [define if the system is missing a prototype for $2()])
fi
undefine([foo])
fi
])


dnl ##########################################################################
dnl ###  SM_TINYCDB
dnl ##########################################################################

AC_DEFUN([SM_TINYCDB], [
 AC_ARG_ENABLE(TINYCDB, [  --enable-tinycdb           enable tinycdb (check libraries) ],
  smtinycdb=$enableval,
  smtinycdb=yes)
  AC_CHECK_HEADERS(cdb.h)
  if test "$ac_cv_header_cdb_h" = "yes"; then
    AC_MSG_CHECKING(tinycdb support)
    MTA_TINYCDB_LIB=""
    if test "$smtinycdb" != no; then
      AC_CHECK_LIB(cdb, cdb_init,
	MTA_TINYCDB_LIB="-lcdb $MTA_TINYCDB_LIB"; sm_cv_tinycdb="yes", sm_cv_tinycdb="no")
      if test "$sm_cv_tinycdb" != no; then
        AC_DEFINE(MTA_USE_TINYCDB, 1, [Define if TINYCDB is available and should be used])
        AC_MSG_RESULT(enabled)
      else
        AC_MSG_RESULT(disabled due to missing libraries)
      fi
    else
      AC_MSG_RESULT(disabled)
    fi
  else
    AC_MSG_RESULT(missing cdb.h)
  fi
  AC_SUBST(MTA_TINYCDB_LIB)
])




syntax highlighted by Code2HTML, v. 0.9.1