dnl
dnl Process this file with autoconf to produce a configure script
dnl

AC_PREREQ(2.13)
AC_INIT(export_vars.sh.in)

AC_CONFIG_HEADER(include/private/apu_config.h)
AC_CONFIG_AUX_DIR(build)

sinclude(build/apu-conf.m4)
sinclude(build/apu-iconv.m4)
sinclude(build/apu-hints.m4)
sinclude(build/apr_common.m4)
sinclude(build/find_apr.m4)
sinclude(build/dbm.m4)

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

dnl # Some initial steps for configuration.  We setup the default directory
dnl # and which files are to be configured.

dnl Absolute source/build directory
abs_srcdir=`(cd $srcdir && pwd)`
abs_builddir=`pwd`

if test "$abs_builddir" != "$abs_srcdir"; then
  USE_VPATH=1
fi

AC_CANONICAL_SYSTEM

dnl
dnl compute the top directory of the build
dnl note: this is needed for LIBTOOL and exporting the bundled Expat
dnl
top_builddir="$abs_builddir"
AC_SUBST(top_builddir)
AC_SUBST(abs_srcdir)
AC_SUBST(abs_builddir)

dnl Initialize mkdir -p functionality.
APR_MKDIR_P_CHECK($abs_srcdir/build/mkdir.sh)

dnl get our version information
get_version="$abs_srcdir/build/get-version.sh"
version_hdr="$abs_srcdir/include/apu_version.h"
APRUTIL_MAJOR_VERSION="`$get_version major $version_hdr APU`"
APRUTIL_DOTTED_VERSION="`$get_version all $version_hdr APU`"

AC_SUBST(APRUTIL_DOTTED_VERSION)
AC_SUBST(APRUTIL_MAJOR_VERSION)

echo "APR-util Version: ${APRUTIL_DOTTED_VERSION}"

dnl Enable the layout handling code, then reparse the prefix-style
dnl arguments due to autoconf being a PITA.
APR_ENABLE_LAYOUT(apr-util)
APR_PARSE_ARGUMENTS

dnl load os-specific hints for apr-util
APU_PRELOAD

dnl
dnl set up the compilation flags and stuff
dnl

APRUTIL_INCLUDES=""
APRUTIL_PRIV_INCLUDES="-I$top_builddir/include -I$top_builddir/include/private"
if test -n "$USE_VPATH"; then
    APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES -I$abs_srcdir/include/private -I$abs_srcdir/include"
fi

dnl
dnl Find the APR includes directory and (possibly) the source (base) dir.
dnl
APU_FIND_APR

dnl
dnl even though we use apr_rules.mk for building apr-util, we need
dnl to grab CC and CPP ahead of time so that apr-util config tests
dnl use the same compiler as APR; we need the same compiler options
dnl and feature test macros as well
dnl
APR_SETIFNULL(CC, `$apr_config --cc`)
APR_SETIFNULL(CPP, `$apr_config --cpp`)
APR_ADDTO(CFLAGS, `$apr_config --cflags`)
APR_ADDTO(CPPFLAGS, `$apr_config --cppflags`)

dnl Find LDAP library
dnl Determine what DBM backend type to use.
dnl Find Expat
dnl Find an iconv library
APU_FIND_LDAP
APU_CHECK_DBM
APU_FIND_EXPAT
APU_FIND_ICONV

AC_SEARCH_LIBS(crypt, crypt ufc)
AC_MSG_CHECKING(if system crypt() function is threadsafe)
if test "x$apu_crypt_threadsafe" = "x1"; then
  AC_DEFINE(APU_CRYPT_THREADSAFE, 1, [Define if the system crypt() function is threadsafe])
  msg="yes"
else
  msg="no"
fi
AC_MSG_RESULT([$msg])

AC_CHECK_FUNCS(crypt_r, [ crypt_r="1" ], [ crypt_r="0" ])
if test "$crypt_r" = "1"; then
  APR_CHECK_CRYPT_R_STYLE
fi

so_ext=$APR_SO_EXT
lib_target=$APR_LIB_TARGET
AC_SUBST(so_ext)
AC_SUBST(lib_target)

APRUTIL_LIBNAME="aprutil${libsuffix}"
AC_SUBST(APRUTIL_LIBNAME)

EXTRA_OS_LINK=""
host_alias=`uname -s`
case "$host_alias" in
    dnl ### BeOS requires that ALL symbols resolve at LINK time!
    dnl ### 
    dnl ### So, if we're building on BeOS then we need to add in the
    dnl ### apr and expat libraries to the build or it'll die a truly horrible
    dnl ### death. We now use the apr-config tool to determine the correct
    dnl ### library to link against :)
*AIX*|*Darwin*|*BeOS*)
    dnl need such stuff as -liconv to be specified when building libaprutil.la
    EXTRA_OS_LINK='$(APRUTIL_LDFLAGS) $(APRUTIL_LIBS)'
    ;;
*)
    ;;
esac

AC_SUBST(EXTRA_OS_LINK)

dnl
dnl Prep all the flags and stuff for compilation and export to other builds
dnl
APR_ADDTO(APRUTIL_LIBS, [$APR_LIBS])

AC_SUBST(APRUTIL_EXPORT_LIBS)
AC_SUBST(APRUTIL_PRIV_INCLUDES)
AC_SUBST(APRUTIL_INCLUDES)
AC_SUBST(APRUTIL_LDFLAGS)
AC_SUBST(APRUTIL_LIBS)
AC_SUBST(LDFLAGS)

dnl copy apr's rules.mk into our build directory.
if test ! -d ./build; then
   $mkdir_p build
fi
cp $APR_BUILD_DIR/apr_rules.mk $abs_builddir/build/rules.mk

dnl
dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
dnl
case "$host_alias" in
*bsdi* | BSD/OS)
    # Check whether they've installed GNU make
    if make --version > /dev/null 2>&1; then
        INCLUDE_RULES="include $abs_builddir/build/rules.mk"
    else
        INCLUDE_RULES=".include \"$abs_builddir/build/rules.mk\""
    fi
    ;;
*)
    INCLUDE_RULES="include $abs_builddir/build/rules.mk"
    ;;
esac
AC_SUBST(INCLUDE_RULES)

if test -d ./test; then
    test_Makefile="test/Makefile"
fi

if test ! -d "$top_builddir/include/private"; then
    mkdir $top_builddir/include
    mkdir $top_builddir/include/private
fi

dnl
dnl everthing is done. 
MAKEFILES="Makefile buckets/Makefile crypto/Makefile dbm/Makefile dbm/sdbm/Makefile encoding/Makefile hooks/Makefile ldap/Makefile uri/Makefile xml/Makefile misc/Makefile strmatch/Makefile xlate/Makefile $test_Makefile"
AC_OUTPUT([
    export_vars.sh
    apu-config
    include/private/apu_select_dbm.h
    include/apr_ldap.h
    include/apu.h
    include/apu_want.h
    $MAKEFILES
	],[
chmod +x apu-config
])
