blob: 39e53e0d483380f5df70dabfafbc3cbc47688e32 [file] [log] [blame]
dnl ===================================================================
dnl Licensed to the Apache Software Foundation (ASF) under one
dnl or more contributor license agreements. See the NOTICE file
dnl distributed with this work for additional information
dnl regarding copyright ownership. The ASF licenses this file
dnl to you under the Apache License, Version 2.0 (the
dnl "License"); you may not use this file except in compliance
dnl with the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
dnl Unless required by applicable law or agreed to in writing,
dnl software distributed under the License is distributed on an
dnl "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
dnl KIND, either express or implied. See the License for the
dnl specific language governing permissions and limitations
dnl under the License.
dnl ===================================================================
dnl
# Miscellaneous additional macros for Subversion's own use.
# SVN_CONFIG_NICE(FILENAME)
# Write a shell script to FILENAME (typically 'config.nice') which reinvokes
# configure with all of the arguments. Reserves use of the filename
# FILENAME.old for its own use.
# This is different from 'config.status --recheck' in that it does add implicit
# --no-create --no-recursion options, and stores _just_ the configure
# invocation, instead of the entire configured state.
AC_DEFUN([SVN_CONFIG_NICE], [
AC_MSG_NOTICE([creating $1])
# This little dance satisfies Cygwin, which cannot overwrite in-use files.
if test -f "$1"; then
mv "$1" "$1.old"
fi
cat >"$1" <<EOF
#! /bin/sh
#
# Created by configure
'[$]0' $ac_configure_args "\[$]@"
EOF
chmod +x "$1"
rm -f "$1.old"
])
dnl
dnl SVN_CONFIG_SCRIPT(path)
dnl
dnl Make AC_OUTPUT create an executable file.
dnl Accumulate filenames in $SVN_CONFIG_SCRIPT_FILES for AC_SUBSTing to
dnl use in, for example, Makefile distclean rules.
dnl
AC_DEFUN(SVN_CONFIG_SCRIPT, [
SVN_CONFIG_SCRIPT_FILES="$SVN_CONFIG_SCRIPT_FILES $1"
AC_CONFIG_FILES([$1], [chmod +x $1])])
dnl Iteratively interpolate the contents of the second argument
dnl until interpolation offers no new result. Then assign the
dnl final result to $1.
dnl
dnl Based on APR_EXPAND_VAR macro
dnl
dnl Example:
dnl
dnl foo=1
dnl bar='${foo}/2'
dnl baz='${bar}/3'
dnl SVN_EXPAND_VAR(fraz, $baz)
dnl $fraz is now "1/2/3"
dnl
AC_DEFUN(SVN_EXPAND_VAR,[
svn_last=
svn_cur="$2"
while test "x${svn_cur}" != "x${svn_last}";
do
svn_last="${svn_cur}"
svn_cur=`eval "echo ${svn_cur}"`
done
$1="${svn_cur}"
])
dnl SVN_STRIP_FLAG(FLAG_VAR_NAME, FLAG)
dnl
dnl Remove FLAG from the variable FLAG_VAR_NAME, if it exists. This macro
dnl is primarily used for removing unwanted compiler flags, but is really
dnl just a general wrapper around `sed'.
AC_DEFUN(SVN_STRIP_FLAG,
[
$1=`echo "$$1" | $SED -e 's/$2//'`
])
dnl SVN_REMOVE_STANDARD_LIB_DIRS(OPTIONS)
dnl
dnl Remove standard library search directories.
dnl OPTIONS is a list of compiler/linker options.
dnl This macro prints input options except -L options whose arguments are
dnl standard library search directories (e.g. /usr/lib).
dnl
dnl This macro is used to avoid linking against Subversion libraries
dnl potentially placed in standard library search directories.
AC_DEFUN([SVN_REMOVE_STANDARD_LIB_DIRS],
[
input_flags="$1"
output_flags=""
filtered_dirs="/lib /lib64 /usr/lib /usr/lib64"
for flag in $input_flags; do
filter="no"
for dir in $filtered_dirs; do
if test "$flag" = "-L$dir" || test "$flag" = "-L$dir/"; then
filter="yes"
break
fi
done
if test "$filter" = "no"; then
output_flags="$output_flags $flag"
fi
done
if test -n "$output_flags"; then
printf "%s" "${output_flags# }"
fi
])
AC_DEFUN([SVN_CHECK_FOR_ATOMIC_BUILTINS],
[
AC_CACHE_CHECK([whether the compiler provides atomic builtins], [svn_cv_atomic_builtins],
[AC_TRY_RUN([
int main()
{
unsigned long long val = 1010, tmp, *mem = &val;
if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020)
return 1;
tmp = val;
if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010)
return 1;
if (__sync_sub_and_fetch(&val, 1010) != 0 || val != 0)
return 1;
tmp = 3030;
if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp)
return 1;
if (__sync_lock_test_and_set(&val, 4040) != 3030)
return 1;
mem = &tmp;
if (__sync_val_compare_and_swap(&mem, &tmp, &val) != &tmp)
return 1;
__sync_synchronize();
if (mem != &val)
return 1;
return 0;
}], [svn_cv_atomic_builtins=yes], [svn_cv_atomic_builtins=no], [svn_cv_atomic_builtins=no])])
])