configure.ac   [plain text]


# 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 *ouput* 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