blob: 4b3df8710ab109de546a61dc801afca825dac4d7 [file] [log] [blame]
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