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

dnl Autoconfiscation for Subversion

dnl General Setup -----------------------

dnl Ensure that subversion is configured with autoconf 2.50 or newer
dnl Don't even think about removing this check!
AC_PREREQ(2.50)

dnl Get the version number of Subversion, using m4's esyscmd() command to run
dnl the command at m4-generation time. This allows us to create an m4
dnl symbol holding the correct version number. AC_INIT() requires the
dnl version number at m4-time, rather than when ./configure is run, so
dnl all this must happen as part of m4, not as part of the shell code
dnl contained in ./configure.
dnl
dnl NOTE: esyscmd() is a GNU M4 extension. Thus, we wrap it in an apprpriate
dnl test. I believe this test will work, but I don't have a place with non-
dnl GNU M4 to test it right now.
define([subversion_version],
       ifdef([__gnu__],
	     [esyscmd(build/getversion.py subversion/include/svn_version.h)],
	     [0.x]))
AC_INIT(subversion, subversion_version, [http://subversion.tigris.org/])
undefine([subversion_version])

dnl AC_CONFIG_SRCDIR is *required*;  sanity-checks that our src dir exists.
AC_CONFIG_SRCDIR(subversion/include/svn_types.h)
AC_CONFIG_AUX_DIR(ac-helpers)

dnl What version of Subversion are we configuring?
# Note: this could be different from PACKAGE_VERSION. That symbol gets
# defined at M4 evaluation time, but only for GNU M4. Other M4
# implementations might end up with just "0.x"
svn_version="`$srcdir/build/getversion.py $srcdir/subversion/include/svn_version.h`"
echo "Configuring Subversion $svn_version"

abs_srcdir="`cd $srcdir && pwd`"
abs_builddir="`pwd`"

dnl ### should we ever bother with the system install?
dnl use abs_srcdir. sometimes during installation, libtool will relink the
dnl library. when it does this, it does a "cd", so a relative use of
dnl install-sh will not work.
INSTALL="$abs_srcdir/ac-helpers/install-sh -c"
AC_SUBST(INSTALL)

MKDIR="$INSTALL -d"
AC_SUBST(MKDIR)

dnl Grab our own macros
sinclude(build/ac-macros/berkeley-db.m4)
sinclude(build/ac-macros/svn-apache.m4)
sinclude(build/ac-macros/svn-macros.m4)
sinclude(build/ac-macros/neon.m4)
sinclude(build/ac-macros/find_apr.m4)
sinclude(build/ac-macros/apr.m4)
sinclude(build/ac-macros/find_apu.m4)
sinclude(build/ac-macros/aprutil.m4)
sinclude(build/ac-macros/java.m4)
sinclude(build/ac-macros/swig.m4)


dnl Grab the libtool macros
sinclude(ac-helpers/libtool.m4)


dnl Generate config.nice early (before the args are munged)
SVN_CONFIG_NICE(config.nice)

dnl AC_CONFIG_HEADER causes `autoheader' to produce svn_private_config.h.in for us.
dnl   (We can add custom defines by creating ./acconfig.h if we wish.)
AC_CONFIG_HEADER(svn_private_config.h)

dnl Todo: we're English-only now, but GNU Gettext eventually?
dnl Set of available languages.
dnl ALL_LINGUAS="de fr es ko nl no pl pt sl sv"
dnl                 I volunteer for this ^^ translation :-)  -xbc

dnl Check for programs ---------------------

dnl Look for a C compiler (before anything can set CFLAGS)
AC_PROG_CC

dnl Look for a C pre-processor
AC_PROG_CPP

dnl Look for an extended grep, this macro appeared in autoconf-2.53b
ifdef([AC_PROG_EGREP],[AC_PROG_EGREP],[])

dnl See if 'ln -s' works
AC_PROG_LN_S

dnl Sub-package configuration ---------------------

dnl Possibly reconfigure packages in subdirectories
AC_ARG_ENABLE(subdir-config,
  AC_HELP_STRING([--disable-subdir-config],
		 [do not reconfigure packages in subdirectories]),
  [
      if test "$enableval" = "yes" ; then
        do_subdir_config="yes"
      fi
  ], 
  [
      do_subdir_config=yes
  ])

dnl the extra bits to include into our build process
SVN_EXTRA_INCLUDES='-I$(top_srcdir)/subversion/include -I$(top_builddir)'
SVN_EXTRA_LIBS=

SVN_SUBDIRS=

AC_SUBST(SVN_EXTRA_INCLUDES)
AC_SUBST(SVN_EXTRA_LIBS)
AC_SUBST(SVN_SUBDIRS)

dnl Configure APR, and local Berkeley DB if any --------------------------

dnl verify apr version and set apr flags
changequote(<<, >>)
APR_VER_REGEX="0\.9\.[5-9]"
APR_VER_REGEX_TOO="1\.0"
APU_VER_REGEX="0\.9\.[5-9]"
APU_VER_REGEX_TOO="1\.0"
changequote([, ])

SVN_LIB_APR($APR_VER_REGEX, $APR_VER_REGEX_TOO)
SVN_LIB_APRUTIL($APU_VER_REGEX, $APU_VER_REGEX_TOO)

if test -d "$abs_srcdir/db" ; then
    AC_MSG_ERROR([Configuring against an in-tree copy of Berkeley DB is no
                  longer supported. Berkeley DB must be separately installed,
                  and perhaps specified by adding --with-berkeley-db=PATH])
fi

dnl What version of Expat are we using? -----------------

APU_HAVE_OLD_EXPAT="`$apu_config --old-expat`"
if test "$APU_HAVE_OLD_EXPAT" = "yes"; then
  AC_DEFINE(SVN_HAVE_OLD_EXPAT, 1, [Defined if Expat 1.0 or 1.1 was found])
fi


dnl Set up a number of directories ---------------------

dnl Create SVN_BINDIR for proper substitution
if test "${bindir}" = '${exec_prefix}/bin'; then
        if test "${exec_prefix}" = "NONE"; then
                if test "${prefix}" = "NONE"; then
                        SVN_BINDIR="${ac_default_prefix}/bin"
                else
                        SVN_BINDIR="${prefix}/bin"
                fi
        else
                SVN_BINDIR="${exec_prefix}/bin"
        fi
else
        SVN_BINDIR="${bindir}"
fi

dnl fully evaluate this value. when we substitute it into our tool scripts,
dnl they will not have things such as ${bindir} available
SVN_BINDIR="`eval echo ${SVN_BINDIR}`"
AC_SUBST(SVN_BINDIR)


dnl This directory is where we will store our data. We don't want to
dnl evaluate it so that later changes in datadir will propagate properly
svndatadir='${datadir}/subversion'


docdir='${datadir}/doc'
docdir="${docdir}/subversion-${svn_version}"
AC_SUBST(docdir)

dnl Pass EXEEXT on to the Makefiles
AC_SUBST(EXEEXT)

dnl Check for libtool -- we'll definitely need it for all our shared libs!
echo "configuring libtool now"
AC_ARG_ENABLE(experimental-libtool,
  AC_HELP_STRING([--experimental-libtool],[Use APR's libtool]),
  [experimental_libtool=$enableval],[experimental_libtool=no])

if test "$experimental_libtool" = "yes"; then
  echo "using APR's libtool"
  LIBTOOL="`$apr_config --apr-libtool`"
  SVN_LIBTOOL="`$apr_config --apr-libtool`"
else
  SVN_LIBTOOL='$(SHELL) $(abs_builddir)/libtool'
  dnl libtoolize requires that the following line not be indented
AC_PROG_LIBTOOL
fi
AC_SUBST(SVN_LIBTOOL)

dnl Before configuring libtool check for --enable-all-static option
AC_ARG_ENABLE(all-static,
  AC_HELP_STRING([--enable-all-static],
                 [Build completely static (standalone) binaries.]),
  [
    if test "$enableval" = "yes" ; then
      LT_LDFLAGS="-all-static $LT_LDFLAGS"
    fi
])

AC_SUBST(LT_LDFLAGS)



NEON_WANTED_REGEX="`sed -n '/NEON_WANTED_REGEX=/s/.*=//p' $srcdir/build/buildcheck.sh`"
dnl You can skip the neon version check only if you know what you are doing 
AC_ARG_ENABLE(neon-version-check,
  AC_HELP_STRING([--disable-neon-version-check],
		 [do not check the Neon version]),
  [
    if test "$enableval" = "no" ; then
      NEON_WANTED_REGEX="*"
    fi
  ],
  [])
NEON_LATEST_WORKING_VER="`sed -n '/NEON_LATEST_WORKING_VER=/s/.*=//p' $srcdir/build/buildcheck.sh`"
eval "`grep '^ *NEON_URL=' $srcdir/build/buildcheck.sh`"
SVN_LIB_NEON($NEON_WANTED_REGEX, $NEON_LATEST_WORKING_VER, $NEON_URL)

dnl find Apache with a recent-enough magic module number.
SVN_FIND_APACHE(20020903)

dnl Check for libraries --------------------

# Berkeley DB on SCO OpenServer needs -lsocket
AC_CHECK_LIB(socket, socket)

# Build the filesystem library (and repository administration tool)
# only if we have an appropriate version of Berkeley DB.
case "$host" in
powerpc-apple-darwin*)
    # Berkeley DB 4.0 does not work on OS X.
    SVN_FS_WANT_DB_MAJOR=4
    SVN_FS_WANT_DB_MINOR=1
    SVN_FS_WANT_DB_PATCH=25
    ;;
*)
    SVN_FS_WANT_DB_MAJOR=4
    SVN_FS_WANT_DB_MINOR=0
    SVN_FS_WANT_DB_PATCH=14
    ;;
esac
# Look for libdb4.so first:
SVN_LIB_BERKELEY_DB($SVN_FS_WANT_DB_MAJOR, $SVN_FS_WANT_DB_MINOR,
                    $SVN_FS_WANT_DB_PATCH, [db4 db])


# Only add *_APACHE_RULE if we also have db, since mod_dav_svn depends on it.
INSTALL_STATIC_RULES="install-bin install-docs"
INSTALL_RULES="install-base-lib install-lib install-include install-static"
BUILD_RULES="base-lib lib bin test"
if test "$svn_lib_berkeley_db" = "yes"; then
  BUILD_RULES="base-lib fs-lib lib bin fs-bin $BUILD_APACHE_RULE test fs-test"
  INSTALL_STATIC_RULES="install-bin install-fs-bin install-docs"
  INSTALL_RULES="install-base-lib install-fs-lib install-lib install-include install-static $INSTALL_APACHE_RULE"
  FS_TEST_DEPS="\$(FS_TEST_DEPS)"
  FS_TEST_PROGRAMS="\$(FS_TEST_PROGRAMS)"
fi

if test "$svn_lib_neon" = "yes"; then
  BUILD_RULES="$BUILD_RULES dav-lib"
  INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-dav-lib"
  INSTALL_RULES="`echo $INSTALL_RULES | sed 's/install-lib/install-dav-lib install-lib/'`"
fi

AC_SUBST(BUILD_RULES)
AC_SUBST(INSTALL_STATIC_RULES)
AC_SUBST(INSTALL_RULES)
AC_SUBST(FS_TEST_DEPS)
AC_SUBST(FS_TEST_PROGRAMS)

AC_DEFINE_UNQUOTED(SVN_FS_WANT_DB_MAJOR, $SVN_FS_WANT_DB_MAJOR,
                   [The desired major version for the Berkeley DB])
AC_DEFINE_UNQUOTED(SVN_FS_WANT_DB_MINOR, $SVN_FS_WANT_DB_MINOR,
                   [The desired minor version for the Berkeley DB])
AC_DEFINE_UNQUOTED(SVN_FS_WANT_DB_PATCH, $SVN_FS_WANT_DB_PATCH,
                   [The desired patch version for the Berkeley DB])

dnl Check for header files ----------------

dnl Standard C headers
AC_HEADER_STDC

dnl Check for typedefs, structures, and compiler characteristics ----------

dnl if compiler doesn't understand `const', then define it empty
AC_C_CONST

dnl if non-existent, define size_t to be `unsigned'
AC_TYPE_SIZE_T


dnl Check for library functions ----------

dnl libsvn_string uses memcmp()
AC_FUNC_MEMCMP

dnl svn_error's default warning handler uses vfprintf()
AC_FUNC_VPRINTF


dnl Process some configuration options ----------

AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],
	       [Turn on debugging and compile time warnings]),
[
    if test "$enableval" = "yes" ; then
      enable_debugging="yes"
    else
      enable_debugging="no"
    fi
])

AC_ARG_WITH(editor,
AC_HELP_STRING([--with-editor=PATH],
               [Specify a default editor for the subversion client.]),
[

    if test "$withval" = "yes" ; then
      AC_MSG_ERROR([--with-editor requires an argument.])
    else
      SVN_CLIENT_EDITOR=$withval
      AC_DEFINE_UNQUOTED(SVN_CLIENT_EDITOR, "$SVN_CLIENT_EDITOR",
                         [The path of a default editor for the client.])

    fi

])

AC_ARG_WITH(zlib,
AC_HELP_STRING([--with-zlib], [enable zlib support]),
[

    if test "$withval" = "yes" ; then
       AC_CHECK_HEADER(zlib.h, [
           AC_CHECK_LIB(z, inflate, [
               AC_DEFINE([SVN_HAVE_ZLIB], [1], [Is zlib support enabled?])
               LIBS="$LIBS -lz"
           ])
       ])
    fi

])
    
MOD_ACTIVATION="-a"
AC_ARG_ENABLE(mod-activation,
AC_HELP_STRING([--disable-mod-activation],
	       [Do not enable mod_dav_svn in httpd.conf]),
[
    if test "$enableval" = "no" ; then
      MOD_ACTIVATION=""
      AC_MSG_NOTICE([Disabling apache module activation])
    else
      AC_MSG_NOTICE([Enabling apache module activation])
    fi
])
AC_SUBST(MOD_ACTIVATION)


AC_ARG_ENABLE(maintainer-mode,
AC_HELP_STRING([--enable-maintainer-mode],
	       [Turn on debugging and very strict compile-time warnings]),
[
    if test "$enableval" = "yes" ; then
      if test "$enable_debugging" = "no" ; then
        AC_MSG_ERROR(Can't have --disable-debug and --enable-maintainer-mode)
      fi
      enable_debugging=yes
      dnl SVN_DEBUG enables specific features for developer builds
      dnl AP_DEBUG enables specific (Apache) features for developer builds
      CFLAGS="$CFLAGS -DSVN_DEBUG -DAP_DEBUG"
      if test "$GCC" = "yes"; then
        CFLAGS="$CFLAGS -Wpointer-arith -Wwrite-strings -Wshadow"
        case "$host" in
        *freebsd*|*linux*)
          CFLAGS="$CFLAGS -std=c89"
          ;;
        esac
      fi
    fi
])


AC_ARG_ENABLE(gprof,
AC_HELP_STRING([--enable-gprof],
	       [Produce gprof profiling data in 'gmon.out' (GCC only).]),
[
    if test "$enableval" = "yes" ; then
      dnl Probably other compilers support -pg or something similar;
      dnl feel free to extend this to include them.
      if test "$GCC" = "yes"; then
        if test "$enable_shared" = "yes" ; then
          AC_MSG_ERROR(Can't have --enable-gprof without --disable-shared (we
                  recommend also using --enable-all-static).)
        fi
        if test ! "$enable_all_static" = "yes" ; then
          AC_MSG_WARN(We recommend --enable-all-static with --enable-gprof.)
        fi
        AC_MSG_NOTICE([Enabling gprof profiling data (to gmon.out).])
        CFLAGS="$CFLAGS -pg"
        LT_LDFLAGS="$LT_LDFLAGS -pg"
      else
        AC_MSG_ERROR(We only support --enable-gprof with GCC right now.)
      fi
    fi
])


if test "$enable_debugging" = "yes" ; then
  dnl At the moment, we don't want optimization, because we're
  dnl debugging.
  dnl ### actually, debugging should be fine with the default -O2
  changequote(,)
  CFLAGS="`echo $CFLAGS' ' | sed -e 's/-O[^ ]* //g'`"
  changequote([,])
else
  if test "$enable_debugging" = "no" ; then
    changequote(,)
    CFLAGS="`echo $CFLAGS' ' | sed -e 's/-g[0-9] //g' | sed -e 's/-g//g'`"
    changequote([,])
  fi
fi

dnl Since this is used only on Unix-y systems, define the path separator as '/'
AC_DEFINE_UNQUOTED(SVN_PATH_LOCAL_SEPARATOR, '/',
        [Defined to be the path separator used on your local filesystem])

AC_DEFINE_UNQUOTED(SVN_NULL_DEVICE_NAME, "/dev/null",
        [Defined to be the null device for the system])

dnl Find a python 2.X binary, test cases will not run with Python 1.X
AC_PATH_PROG(PYTHON2, python2, none)
if test "$PYTHON2" = "none"; then
	AC_PATH_PROG(PYTHON, python, none)
else
	PYTHON=$PYTHON2
fi
if test "$PYTHON" != "none"; then
  echo "checking for Python 2.0 or newer"
  ${PYTHON} "${abs_srcdir}/build/pycheck.py"
fi

SVN_CHECK_JDK

AC_PATH_PROG(PERL, perl, none)

SVN_CHECK_SWIG

dnl try to find the "makeinfo" program
AC_PATH_PROG(MAKEINFO, makeinfo, [echo cannot run makeinfo])
if test "$MAKEINFO" = "echo cannot run makeinfo"; then
        dnl we won't install/make any info pages then
	INSTALL_INFO=""
else
	INSTALL_INFO='install-info'
fi
AC_SUBST(INSTALL_INFO)

dnl decide whether we want to link against the RA libraries
AC_ARG_ENABLE(dso,
AC_HELP_STRING([--enable-dso], [Turn on DSO loading of RA libraries]),
[
    if test "$enableval" = "yes"; then
      enable_dso=yes
      if test "$enable_shared" = "no"; then
        AC_MSG_ERROR([--enable-dso conflicts with --disable-shared])
      fi
    fi
])

if test "$enable_shared" = "no" -o "$enable_dso" != "yes"; then
  if test "$svn_lib_neon" = "yes"; then
    AC_DEFINE(SVN_LIBSVN_CLIENT_LINKS_RA_DAV, 1,
          [Defined if libsvn_client should link against libsvn_ra_dav])
    svn_ra_lib_deps="\$(RA_DAV_DEPS)"
    svn_ra_lib_link="\$(RA_DAV_LINK)"
  fi

  AC_DEFINE(SVN_LIBSVN_CLIENT_LINKS_RA_SVN, 1,
      [Defined if libsvn_client should link against libsvn_ra_svn])
  svn_ra_lib_deps="$svn_ra_lib_deps \$(RA_SVN_DEPS)"
  svn_ra_lib_link="$svn_ra_lib_link \$(RA_SVN_LINK)"

  if test "$svn_lib_berkeley_db" = "yes"; then
    AC_DEFINE(SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL, 1,
        [Defined if libsvn_client should link against libsvn_ra_local])
    svn_ra_lib_deps="\$(RA_LOCAL_DEPS) $svn_ra_lib_deps"
    ### We can't just append to SVN_RA_LIB_LINK because of the following
    ### scenario: user has neon and db3 in /usr/local, and db4 in
    ### /usr/local/BerkeleyDB.4.0.  If libsvn_ra_dav.la comes before 
    ### libsvn_fs.la then libtool ends up linking libsvn_fs to the db3 in
    ### /usr/local/lib
    svn_ra_lib_link="\$(RA_LOCAL_LINK) $svn_ra_lib_link"
  fi
  SVN_RA_LIB_DEPS=$svn_ra_lib_deps
  SVN_RA_LIB_LINK=$svn_ra_lib_link
fi

AC_SUBST(SVN_RA_LIB_DEPS)
AC_SUBST(SVN_RA_LIB_LINK)


dnl Pass some config data ----------------------------

AC_SUBST(abs_builddir)
AC_SUBST(abs_srcdir)

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

dnl Final step:  create the Makefile ----------------------------

AC_CONFIG_FILES([Makefile])

SVN_CONFIG_SCRIPT(svn-config)
SVN_CONFIG_SCRIPT(tools/backup/hot-backup.py)
SVN_CONFIG_SCRIPT(contrib/client-side/svn_load_dirs.pl)
SVN_CONFIG_SCRIPT(tools/hook-scripts/commit-access-control.pl)
SVN_CONFIG_SCRIPT(tools/hook-scripts/commit-email.pl)
SVN_CONFIG_SCRIPT(tools/hook-scripts/propchange-email.pl)

AC_OUTPUT


dnl Create all of the build directories

if test "$abs_srcdir" != "$abs_builddir"; then
    make mkdir-init
fi


dnl  Print warning messages about what we did and didn't configure at the 
dnl  end, where people will actually see them.
case "$svn_lib_berkeley_db" in
  "no" )
    db_version="$SVN_FS_WANT_DB_MAJOR.$SVN_FS_WANT_DB_MINOR.$SVN_FS_WANT_DB_PATCH"
    AC_MSG_WARN([we have configured for a client-only build


The Subversion filesystem library, part of the server, requires
Berkeley DB version $db_version or newer, which you don't seem to have
installed and linked to APR-UTIL.  We have created makefiles which
will build the Subversion client code only, and skip the server.  You
can find latest version of Berkeley DB at http://www.sleepycat.com/.
You can find the latest version of Berkeley DB here:
  http://www.sleepycat.com/download/index.shtml
])
;;
esac

