dnl Process this file with autoconf to produce a configure script.
AC_INIT(flood.c)

dnl Location for config.guess, config.sub, install.sh, etc.
AC_CONFIG_AUX_DIR(build)

dnl Override the default prefix with /usr/local/flood
AC_PREFIX_DEFAULT(/usr/local/flood)

dnl m4 Macros from APR
sinclude(build/apr_common.m4)

dnl m4 Macros for finding APR and APR-util
sinclude(build/find_apr.m4)
sinclude(build/find_apu.m4)

dnl We need to know our top directory.
abs_builddir=`pwd`

dnl Initially, we need no subdirs
FLOOD_SUBDIRS=""   

dnl Generate ./config.nice for reproducing runs of configure
APR_CONFIG_NICE(config.nice)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET

AC_CANONICAL_SYSTEM

AC_ARG_WITH(openssl,
  [  --with-openssl=PATH     Path to OpenSSL (eg. /usr/local/ssl)],
[if test "$withval" = "yes"; then
  AC_MSG_ERROR('option --with-openssl requires a path')
else
  fl_openssl_prefix=$withval

  if test "x$fl_openssl_prefix" != "x" -a ! -d "$fl_openssl_prefix"; then
    AC_MSG_ERROR('open --with-openssl requires a path to a directory')
  fi

  dnl XXX: We could probably do some better checking here, like looking
  dnl for headers and libraries with an explicit path.

  dnl Prefix these to the list, so they override env var settings
  CPPFLAGS="-I${fl_openssl_prefix}/include $CPPFLAGS"
  dnl We may need to also include $fl_openssl_prefix/openssl
  LDFLAGS="-L${fl_openssl_prefix}/lib $LDFLAGS"
  LIBTOOL_LDFLAGS="-R${fl_openssl_prefix}/lib"
fi])

dnl If the OS provides random support, use it.  Otherwise, we'll be 
dnl cheesy.
if test -c "/dev/random"; then
  flood_has_devrand=1
else if test -c "/dev/urandom"; then
  flood_has_devrand=1
else
  flood_has_devrand=0
fi
fi

dnl SSL is disabled by default
dnl "Export and import restrictions in some countries require that it be
dnl  disabled by default." See: <20011116151249.B1943@waka.ebuilt.net>
AC_ARG_ENABLE(ssl,
  [  --enable-ssl            Enable SSL support (disabled by default)],
[enable_ssl=$enableval],
[enable_ssl=no])

flood_has_openssl=0
if test "$enable_ssl" = "yes"; then
  AC_CHECK_HEADERS(openssl/ssl.h openssl/opensslv.h,,
    AC_MSG_ERROR('OpenSSL Headers not found at path specified'))
  AC_TRY_COMPILE([#include <openssl/opensslv.h>],
    [#if (OPENSSL_VERSION_NUMBER < 0x0090600fL)
     #error You need OpenSSL version 0.9.6 or greater.
     #endif],,
    AC_MSG_ERROR('OpenSSL version 0.9.6 or greater required.'))
  
  AC_CHECK_LIB(crypto, SHA1, LIBS="$LIBS -lcrypto")
  dnl BIO_next only appears in newer versions of OpenSSL
  dnl Since libssl relies on libcrypto, it *must* appear before -lcrypto.
  AC_CHECK_LIB(ssl, BIO_next, LIBS="-lssl $LIBS")
  flood_has_openssl=1

  dnl Extra OpenSSL specific options
  AC_ARG_WITH(capath,
    [  --with-capath=PATH      Path to a directory with c_rehash'd CA files used by OpenSSL (default $OPENSSL_PREFIX/certs)],
    [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-capath requires a path'); else CAPATH="$withval"; fi],
    [if test -d "$fl_openssl_prefix/certs"; then
        CAPATH="$fl_openssl_prefix/certs"
     else if test -d "$fl_openssl_prefix/ssl/certs"; then
        CAPATH="$fl_openssl_prefix/ssl/certs"
     else if test -d "/usr/lib/ssl/certs"; then
        CAPATH="/usr/lib/ssl/certs"
     else if test -d "/usr/share/ssl/certs"; then
        CAPATH="/usr/share/ssl/certs"
     else
        AC_MSG_ERROR('option --with-capath must be specified')
     fi
     fi
     fi
     fi
    ])
fi

APR_FIND_APR(./apr,,,[1 0])

if test "$apr_found" = "no"; then
  AC_MSG_ERROR([APR not found.  Please read the documentation.])
fi

if test "$apr_found" = "reconfig"; then
  APR_SUBDIR_CONFIG(apr, "$apache_apr_flags --prefix=$prefix")
  FLOOD_SUBDIRS="$FLOOD_SUBDIRS apr"   
fi

CFLAGS="$CFLAGS `$apr_config --cflags`"
CPPFLAGS="$CPPFLAGS `$apr_config --cppflags --includes`"
LDFLAGS="$LDFLAGS `$apr_config --ldflags`"
LIBTOOL="`$apr_config --apr-libtool`"
LIBTOOL_LIBS="$LIBTOOL_LIBS `$apr_config --link-libtool --libs`"
APR_CONFIG="$apr_config"

APR_FIND_APU(./apr-util,,,[1 0])

if test "$apu_found" = "no"; then
  AC_MSG_ERROR([APR-util not found.  Please read the documentation.])
fi
if test "$apu_found" = "reconfig"; then
  dnl If we are configuring apr-util as source, APR must be source
  dnl configured.
  APR_SUBDIR_CONFIG(apr-util, "$apache_apr_flags --with-apr=../apr --prefix=$prefix")
  FLOOD_SUBDIRS="$FLOOD_SUBDIRS apr-util"
fi

CPPFLAGS="$CPPFLAGS `$apu_config --includes`"
LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS `$apu_config --ldflags`"
dnl Since libaprutil relies on libapr, it *must* appear before -lapr.
LIBTOOL_LIBS="`$apu_config --link-libtool --libs` $LIBTOOL_LIBS"
APU_CONFIG="$apu_config"

AC_CHECK_FUNC(strtoll, hasstrtoll="1", hasstrtoll="0")
AC_CHECK_FUNC(strtoq, hasstrtoq="1", hasstrtoq="0")

AC_CHECK_FUNC(rand, hasrand="1", hasrand="0")
AC_CHECK_FUNC(lrand48, hasrand48="1", hasrand48="0")
AC_CHECK_FUNC(random, hasrandom="1", hasrandom="0")

AC_MSG_CHECKING([random number generator to use])
prngrand="0"
prngrand48="0"
prngrandom="0"
if test "$hasrandom" = "1"; then
    prngrandom="1"
    AC_MSG_RESULT([random])
else if test "$hasrand48" = "1"; then
    prngrand48="1"
    AC_MSG_RESULT([rand48])
else if test "$hasrand" = "1"; then
    prngrand="1"
    AC_MSG_RESULT([rand])
else
    AC_ERROR([No suitable PRNG detected])
fi
fi
fi

AC_SUBST(OPENSSL_PREFIX)
AC_SUBST(RANDFILE)
AC_SUBST(CAPATH)
AC_SUBST(FLOOD_SUBDIRS)
AC_SUBST(LIBTOOL)
AC_SUBST(LIBTOOL_LDFLAGS)
AC_SUBST(LIBTOOL_LIBS)
AC_SUBST(prngrand)
AC_SUBST(prngrand48)
AC_SUBST(prngrandom)
AC_SUBST(hasstrtoll)
AC_SUBST(hasstrtoq)
AC_SUBST(flood_has_openssl)
AC_SUBST(flood_has_devrand)
AC_SUBST(abs_builddir)

AC_SUBST(APR_CONFIG)
AC_SUBST(APU_CONFIG)

dnl Required for source compatibility with build/rules.mk of httpd-2.0
LTFLAGS="--silent"
LTCFLAGS=""
SHLTCFLAGS=""
AC_SUBST(LTFLAGS)
AC_SUBST(LTCFLAGS)
AC_SUBST(SHLTCFLAGS)

dnl Makefile outputs
dnl Note: There can only be one AC_OUTPUT command.
AC_OUTPUT(Makefile config.h build/rules.mk build/config_vars.mk)
