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(../apr/build)

sinclude(build/apu-conf.m4)
sinclude(../apr/build/apr_common.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

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)

dnl
dnl set up the compilation flags and stuff
dnl
APR_ADDTO(INCLUDES, [-I\$(top_builddir)/include/private -I\$(top_builddir)/include])

if test -n "$USE_VPATH"; then
    APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/include])
fi

dnl
dnl 1. Find the APR includes directory and (possibly) the source (base) dir.
dnl 2. Determine what DBM backend type to use.
dnl 3. Find Expat
dnl
APU_FIND_APR
APU_FIND_LDAP
APU_CHECK_DBM
APU_FIND_EXPAT

dnl Add in the INCLUDES from APR
APR_ADDTO(INCLUDES, [$APR_INCLUDES])
so_ext=$APR_SO_EXT
lib_target=$APR_LIB_TARGET
AC_SUBST(so_ext)
AC_SUBST(lib_target)

LDFLAGS=""
EXPAT_LINK=""
case "$host_alias" in
*beos*)
    # Horrible Hack !!!
    # if we're building a shared lib then we need to add in the
    # apr library to the build...
    LDFLAGS="$APR_SOURCE_DIR/libapr.la"
    EXPAT_LINK="\$(top_builddir)/xml/expat/lib/libexpat.so"
    ;;
*)
    ;;
esac

AC_SUBST(EXPAT_LINK)

dnl
dnl Prep all the flags and stuff for compilation and export to other builds
dnl
APR_ADDTO(CFLAGS, [$CFLAGS $INCLUDES $APR_EXPORT_CFLAGS $APR_EXPORT_CPPFLAGS])
APR_ADDTO(LIBS, [$APR_EXPORT_LIBS])

AC_SUBST(APRUTIL_EXPORT_LIBS)
AC_SUBST(LDFLAGS)
APR_ADDTO(LIBS,[$APRUTIL_EXPORT_LIBS])

dnl
dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
dnl
case "$host_alias" in
*bsdi*)
    INCLUDE_RULES=".include \"$top_builddir/../apr/build/rules.mk\""
    ;;
*)
    INCLUDE_RULES="include $top_builddir/../apr/build/rules.mk"
    ;;
esac
AC_SUBST(INCLUDE_RULES)

if test -d ./test; then
    test_Makefile="test/Makefile"
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 $test_Makefile"
AC_OUTPUT([
    export_vars.sh
    include/private/apu_select_dbm.h
    include/apr_ldap.h
    include/apu.h
    $MAKEFILES
	])

dnl #----------------------------- Fixup Makefiles for VPATH support
 
changequote({,})
 
if test -n "$USE_VPATH"; then
  for makefile in $MAKEFILES; do
    dir=`echo $makefile|sed 's%[^/][^/]*$%%'`
    (cat <<EOF
srcdir = $abs_srcdir/$dir
VPATH  = $abs_srcdir/$dir
 
EOF
)    |  cat - $makefile > tmp
    cp tmp $makefile
  done
  rm -f tmp
fi
 
changequote([,])
