blob: a1796854512975d51401fecef12b3426e5109429 [file] [log] [blame]
# Copyright (c) 2008 BBN Technologies Corp. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of BBN Technologies nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY BBN TECHNOLOGIES AND CONTRIBUTORS ``AS IS''
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL BBN TECHNOLOGIES OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
AC_INIT([svnstsw], [1.4])
AC_PREREQ([2.61])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_AUX_DIR([conf])
AC_CONFIG_MACRO_DIR([conf])
AC_CONFIG_FILES([
Makefile
doc/Doxyfile-html
doc/Makefile
doc/man/libsvnstsw.3
doc/man/svnstsw.8
doc/man/svnstsw_exec_svnserve.3
doc/man/svnstsw_get_tunnel_user_name.3
doc/man/svnstsw_fso_is_changeable.3
include/Makefile
src/Makefile
])
AC_CONFIG_HEADERS([src/config.h])
AH_BOTTOM([#include <svnstsw_compat.h>])
AM_INIT_AUTOMAKE([foreign 1.10])
AM_MAINTAINER_MODE
# Test for a C99 compiler. Features in use:
# * _Bool
# * declare variables after start
# * variable-length arrays
# * C++-style comments
AC_PROG_CC_C99
# * snprintf
STSW_FUNC_SNPRINTF_BROKEN
if test "x$ac_cv_prog_cc_c99" = "xno" || test "x$snprintf_broken" = "xyes" ; then
AC_MSG_ERROR([Your C compiler does not support some of the required C99 features.])
fi
AC_PROG_LIBTOOL
AC_PROG_INSTALL
# Test for the reentrant POSIX functions we use
AC_CHECK_FUNCS([getpwuid_r getpwnam_r], [],
[AC_MSG_ERROR([A required function was not found on your system.])])
AC_CHECK_FUNCS([getlogin_r], [], [AC_MSG_WARN([
If multiple users share the same user ID on this system, svnserve
may use the wrong username as the argument to svnserve's
'--tunnel-user' parameter. This is because the POSIX function
getlogin_r() was not found on your system. The function
getpwuid_r() will be used instead, which means that another
username corresponding to the shared UID may be returned by
svnstsw_get_tunnel_user_name().
])])
# Have autoconf tests modify the following variables rather than
# CPPFLAGS, CFLAGS, etc. This allows automake .am files to override
# these flags (by appending to them) without overriding user-specified
# flags.
AC_SUBST([CONFIGURECPPFLAGS])
AC_SUBST([CONFIGURECFLAGS])
AC_SUBST([CONFIGURECXXFLAGS])
AC_SUBST([CONFIGURELDFLAGS])
AC_SUBST([CONFIGURELIBTOOLFLAGS])
# increase compiler strictness
if test "x$GCC" = "xyes" ; then
CONFIGURECFLAGS="-Wall -Werror $CONFIGURECFLAGS"
fi
if test "x$GXX" = "xyes" ; then
CONFIGURECXXFLAGS="-Wall -Werror $CONFIGURECXXFLAGS"
fi
# The following makes sure that the include subdirectory is included,
# even in VPATH builds. Unfortunately, autoconf doesn't define a
# shell variable containing the absolute path to the top source
# directory (at least it's not documented), so we can't use that here.
# However, it does have a preset *output* variable. The following
# causes a literal '-I${top_srcdir}/include' to appear in the
# definition of the CONFIGURECPPFLAGS variable. The '${top_srcdir}'
# is then substituted by make. Unfortunately, this is somewhat
# broken: If we want to do further autoconf tests using this include,
# the '${top_srcdir}' either won't be substituted or it will be
# substituted with an empty string since there is no 'top_srcdir'
# shell variable defined by autoconf. TODO: figure out a way around
# this.
#
CONFIGURECPPFLAGS="-I\${top_srcdir}/include $CONFIGURECPPFLAGS"
# find libapr
STSW_LIB_APR([0\.9\.@<:@7-9@:>@ 0\.9\.1@<:@0-9@:>@ 1\.])
CONFIGURECPPFLAGS="$STSW_APR_CPPFLAGS $STSW_APR_INCLUDES $CONFIGURECPPFLAGS"
CONFIGURECFLAGS="$STSW_APR_CFLAGS $CONFIGURECFLAGS"
CONFIGURELDFLAGS="$STSW_APR_LDFLAGS $STSW_APR_LIBS $CONFIGURELDFLAGS"
# find doxygen for generating the source code documentation
STSW_PROG_DOXYGEN
DOXYFILE_PREDEFINED="$DOXYFILE_PREDEFINED HAVE_CONFIG_H=1"
# Test for the location of svnserve
AC_ARG_WITH(
[svnserve],
[AS_HELP_STRING(
[--with-svnserve=/path/to/svnserve],
[Full path to the svnserve executable. This string will be
used literally to start svnserve; e.g.,
execl("/given/path/to/svnserve", ...). For security reasons,
this can not be a relative path -- it must start with "/".
Note that this path can point to any executable that accepts
svnserve's arguments, such as another svnserve wrapper. Do
not provide a path to a script unless you are fully aware of
the security problems that arise when a script is run as a
different user. If left unspecified, configure will search
the PATH for svnserve.])],
[
if test "x$withval" = "xyes" ; then
AC_PATH_PROG([SVNSERVE], [svnserve])
else
AC_MSG_CHECKING([for svnserve])
SVNSERVE=$withval
AC_MSG_RESULT([$SVNSERVE])
fi
],
[
AC_PATH_PROG([SVNSERVE], [svnserve])
])
case "$SVNSERVE" in
/*)
# absolute path
;;
*)
# relative path
AC_MSG_ERROR([You must specify a full path to the svnserve executable using "--with-svnserve=/path/to/svnserve"])
;;
esac
AC_DEFINE_UNQUOTED([SVNSERVE], ["$SVNSERVE"], [Define to the desired svnserve binary to run.])
# Ask user if root override is acceptable
stsw_root_override=yes
AC_ARG_ENABLE(
[svnserve-root-override],
[AS_HELP_STRING(
[--disable-svnserve-root-override],
[Tell svnstsw to ignore the -r and --root command-line
options. This prevents a user from specifying a virtual root
path, ensuring that the default path (given by
--with-svnserve-root-default) is always passed to the
svnserve executable (given by --with-svnserve) using
svnserve's --root command-line option. Allowing a user to
specify a different virtual root could be a security concern
if there is a repository that is accessible to the svnstsw
wrapper and that repository uses a username namespace that is
different from the system username namespace.])],
[
if test "x$enableval" != "xyes" ; then
stsw_root_override=no
fi
])
AC_MSG_CHECKING([if users should be allowed to override the default repository virtual root])
stsw_root_override_bool=1
if test "x$stsw_root_override" = "xno" ; then
stsw_root_override_bool=0
fi
AC_DEFINE_UNQUOTED([ALLOW_SVNSERVE_ROOT_OVERRIDE], [$stsw_root_override_bool], [Define to 1 if svnstsw should honor the -r and --root command-line arguments, 0 otherwise.])
AC_MSG_RESULT([$stsw_root_override])
# Ask the user for the default svn repository root
stsw_root_default=/
AC_ARG_WITH(
[svnserve-root-default],
[AS_HELP_STRING(
[--with-svnserve-root-default=/path/to/svn/virtual/root],
[Specify the default path to pass as the argument to
svnserve's --root command-line option. The given path will
be passed to svnserve if the user of svnstsw does not pass -r
or --root to svnstsw or if svnstsw is configured to prevent
users from specifying a virtual root path (via
--disable-svnserve-root-override). If unspecified, "/" is
used.])],
[
if test "x$withval" != "xyes" && test "x$withval" != "xno" ; then
stsw_root_default=$withval
fi
])
AC_MSG_CHECKING([for the default repository virtual root path])
AC_DEFINE_UNQUOTED([SVNSERVE_DEFAULT_ROOT], ["$stsw_root_default"], [Define to the desired default repository virtual root path.])
AC_MSG_RESULT([$stsw_root_default])
# Ask the user for the file mode creation mask
stsw_umask="S_IRWXO"
AC_ARG_WITH(
[umask],
[AS_HELP_STRING(
[--with-umask=<mode_t expression>],
[Specify the file mode creation mask to use when the program
is run. This must be a C constant expression with a type
that is compatible with mode_t (see the umask(3) man page and
<sys/stat.h>). If unspecified, "S_IRWXO" is used (which
disables read, write, and execute for others/world and allows
read, write, and execute for the user and group).])],
[
if test "x$withval" != "xyes" && test "x$withval" != "xno" ; then
stsw_umask=$withval
fi
])
AC_MSG_CHECKING([for the file mode creation mask])
AC_DEFINE_UNQUOTED([SVNSTSW_UMASK()], [($stsw_umask)], [Define to the desired file mode creation mask.])
AC_MSG_RESULT([$stsw_umask])
AC_OUTPUT