You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2022/01/14 14:01:51 UTC
svn commit: r1897034 [3/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client-side/svn_load_dirs/ contrib/hook-scripts/ contrib/se...
Modified: subversion/branches/multi-wc-format/build/ac-macros/swig.m4
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/ac-macros/swig.m4?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/ac-macros/swig.m4 (original)
+++ subversion/branches/multi-wc-format/build/ac-macros/swig.m4 Fri Jan 14 14:01:45 2022
@@ -21,33 +21,40 @@ dnl check to see if SWIG is current enou
dnl
dnl if it is, then check to see if we have the correct version of python.
dnl
-dnl if we do, then set up the appropriate SWIG_ variables to build the
-dnl python bindings.
+dnl if we do, then set up the appropriate SWIG_ variables to build the
+dnl Python, Perl, and Ruby bindings.
AC_DEFUN(SVN_CHECK_SWIG,
[
- AC_ARG_WITH(swig,
- AS_HELP_STRING([--with-swig=PATH],
- [Try to use 'PATH/bin/swig' to build the
- swig bindings. If PATH is not specified,
- look for a 'swig' binary in your PATH.]),
+ m4_ifndef([SVN_RELEASE_MODE],
[
- case "$withval" in
- "no")
- SWIG_SUITABLE=no
- SVN_FIND_SWIG(no)
- ;;
- "yes")
- SVN_FIND_SWIG(required)
+ AC_ARG_WITH(swig,
+ AS_HELP_STRING([--with-swig=PATH],
+ [Try to use 'PATH/bin/swig' to build the
+ swig bindings. If PATH is not specified,
+ look for a 'swig' binary in your PATH.]),
+ [
+ case "$withval" in
+ yes)
+ svn_find_swig_arg=required
;;
*)
- SVN_FIND_SWIG($withval)
+ svn_find_swig_arg=$withval
;;
- esac
- ],
- [
- SVN_FIND_SWIG(check)
+ esac
+ ],
+ [
+ if test "$SWIG_PY_PYTHON" != "none" \
+ || test "$SWIG_PL_PERL" != "none" \
+ || test "$SWIG_RB_RUBY" != "none" ; then
+ svn_find_swig_arg=check
+ else
+ svn_find_swig_arg=no
+ fi
+ ])
+ SVN_FIND_SWIG($svn_find_swig_arg)
])
+ SVN_DETERMINE_SWIG_OPTS
])
AC_DEFUN(SVN_FIND_SWIG,
@@ -69,7 +76,7 @@ AC_DEFUN(SVN_FIND_SWIG,
fi
if test ! -f "$SWIG" || test ! -x "$SWIG"; then
AC_MSG_ERROR([Could not find swig binary at $SWIG])
- fi
+ fi
fi
if test "$SWIG" != "none"; then
@@ -78,7 +85,7 @@ AC_DEFUN(SVN_FIND_SWIG,
$SED -ne 's/^.*Version \(.*\)$/\1/p'`"
# We want the version as an integer so we can test against
# which version we're using. SWIG doesn't provide this
- # to us so we have to come up with it on our own.
+ # to us so we have to come up with it on our own.
# The major is passed straight through,
# the minor is zero padded to two places,
# and the patch level is zero padded to three places.
@@ -91,222 +98,493 @@ AC_DEFUN(SVN_FIND_SWIG,
AC_MSG_RESULT([$SWIG_VERSION_RAW])
# If you change the required swig version number, don't forget to update:
# subversion/bindings/swig/INSTALL
- if test -n "$SWIG_VERSION" && test "$SWIG_VERSION" -ge "103024"; then
- SWIG_SUITABLE=yes
- else
- SWIG_SUITABLE=no
+ if test ! -n "$SWIG_VERSION" || test "$SWIG_VERSION" -lt "103024"; then
AC_MSG_WARN([Detected SWIG version $SWIG_VERSION_RAW])
AC_MSG_WARN([Subversion requires SWIG >= 1.3.24])
fi
fi
-
- SWIG_PY_COMPILE="none"
- SWIG_PY_LINK="none"
- if test "$PYTHON" != "none"; then
- AC_MSG_NOTICE([Configuring python swig binding])
-
- AC_CACHE_CHECK([for Python includes], [ac_cv_python_includes],[
- ac_cv_python_includes="`$PYTHON ${abs_srcdir}/build/get-py-info.py --includes`"
- ])
- SWIG_PY_INCLUDES="\$(SWIG_INCLUDES) $ac_cv_python_includes"
-
- if test "$ac_cv_python_includes" = "none"; then
- AC_MSG_WARN([python bindings cannot be built without distutils module])
- fi
-
- AC_CACHE_CHECK([for compiling Python extensions], [ac_cv_python_compile],[
- ac_cv_python_compile="`$PYTHON ${abs_srcdir}/build/get-py-info.py --compile`"
- ])
- SWIG_PY_COMPILE="$ac_cv_python_compile $CFLAGS"
+])
- AC_CACHE_CHECK([for linking Python extensions], [ac_cv_python_link],[
- ac_cv_python_link="`$PYTHON ${abs_srcdir}/build/get-py-info.py --link`"
- ])
- SWIG_PY_LINK="$ac_cv_python_link"
- AC_CACHE_CHECK([for linking Python libraries], [ac_cv_python_libs],[
- ac_cv_python_libs="`$PYTHON ${abs_srcdir}/build/get-py-info.py --libs`"
- ])
- SWIG_PY_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_python_libs)`"
+AC_DEFUN(SVN_DETERMINE_SWIG_OPTS,
+[
+ m4_ifndef([SVN_RELEASE_MODE],
+ [
+ # not in release mode
+ SWIG_PY_COMPILE="none"
+ SWIG_PY_LINK="none"
+ SWIG_PY_OPTS="none"
+ SWIG_PY_ERRMSG="check config.log for details"
+ if test "$SWIG_PY_PYTHON" = "none"; then
+ SWIG_PY_ERRMSG="You specfied not to build Python bindings or \
+suitable Python interpreter is not found."
+ else
+ if test "$SWIG" = "none"; then
+ AC_MSG_WARN([You specified to build SWIG Python bindings, but SWIG is not found.])
+ SWIG_PY_ERRMSG="SWIG is need to build SWIG Python bindings, but it is not found."
+ else
+ AC_MSG_NOTICE([Configuring python swig binding])
- dnl Sun Forte adds an extra space before substituting APR_INT64_T_FMT
- dnl gcc-2.95 adds an extra space after substituting APR_INT64_T_FMT
- dnl thus the egrep patterns have a + in them.
- SVN_PYCFMT_SAVE_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $SVN_APR_INCLUDES"
- AC_CACHE_CHECK([for apr_int64_t Python/C API format string],
- [svn_cv_pycfmt_apr_int64_t], [
- if test "x$svn_cv_pycfmt_apr_int64_t" = "x"; then
- AC_EGREP_CPP([MaTcHtHiS +\"lld\" +EnDeNd],
- [#include <apr.h>
- MaTcHtHiS APR_INT64_T_FMT EnDeNd],
- [svn_cv_pycfmt_apr_int64_t="L"])
- fi
- if test "x$svn_cv_pycfmt_apr_int64_t" = "x"; then
- AC_EGREP_CPP([MaTcHtHiS +\"ld\" +EnDeNd],r
- [#include <apr.h>
- MaTcHtHiS APR_INT64_T_FMT EnDeNd],
- [svn_cv_pycfmt_apr_int64_t="l"])
+ AC_CACHE_CHECK([for Python includes], [ac_cv_python_includes],[
+ ac_cv_python_includes="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --includes`"
+ ])
+ SWIG_PY_INCLUDES="\$(SWIG_INCLUDES) $ac_cv_python_includes"
+
+ if test "$ac_cv_python_includes" = "none"; then
+ SWIG_PY_ERRMSG="no distutils found"
+ AC_MSG_WARN([python bindings cannot be built without distutils module])
+ else
+
+ python_header_found="no"
+
+ save_cppflags="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_cv_python_includes"
+ AC_CHECK_HEADER(Python.h, [
+ python_header_found="yes"
+ ])
+ CPPFLAGS="$save_cppflags"
+
+ if test "$python_header_found" = "no"; then
+ SWIG_PY_ERRMSG="no Python.h found"
+ AC_MSG_WARN([Python.h not found; disabling python swig bindings])
+ else
+ SVN_PY3C()
+
+ if test "$py3c_found" = "no"; then
+ SWIG_PY_ERRMSG="py3c library not found"
+ AC_MSG_WARN([py3c library not found; disabling python swig bindings])
+ else
+ AC_CACHE_CHECK([for compiling Python extensions], [ac_cv_python_compile],[
+ ac_cv_python_compile="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --compile`"
+ ])
+ SWIG_PY_COMPILE="$ac_cv_python_compile $CFLAGS"
+
+ AC_CACHE_CHECK([for linking Python extensions], [ac_cv_python_link],[
+ ac_cv_python_link="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --link`"
+ ])
+ SWIG_PY_LINK="$ac_cv_python_link"
+
+ AC_CACHE_CHECK([for linking Python libraries], [ac_cv_python_libs],[
+ ac_cv_python_libs="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --libs`"
+ ])
+ SWIG_PY_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_python_libs)`"
+
+ # Look more closely at the SWIG and Python versions to
+ # determine SWIG_PY_OPTS. We can skip this if we already
+ # have the SWIG-generated files.
+ AC_CACHE_CHECK([for Python >= 3], [ac_cv_python_is_py3],[
+ ac_cv_python_is_py3="no"
+ $SWIG_PY_PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \
+ ac_cv_python_is_py3="yes"
+ ])
+
+ if test "$ac_cv_python_is_py3" = "yes"; then
+ if test "$SWIG_VERSION" -ge "300010"; then
+ dnl SWIG Python bindings successfully configured, clear the error message dnl
+ SWIG_PY_ERRMSG=""
+ else
+ SWIG_PY_ERRMSG="SWIG version is not suitable"
+ AC_MSG_WARN([Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer])
+ fi
+ if test "$SWIG_VERSION" -lt "400000"; then
+ SWIG_PY_OPTS="-python -py3 -nofastunpack -modern"
+ else
+ SWIG_PY_OPTS="-python -py3 -nofastunpack"
+ fi
+ else
+ if test "$SWIG_VERSION" -lt "400000"; then
+ SWIG_PY_OPTS="-python -classic"
+ dnl SWIG Python bindings successfully configured, clear the error message dnl
+ SWIG_PY_ERRMSG=""
+ else
+ SWIG_PY_OPTS="-python -nofastunpack"
+ SWIG_PY_ERRMSG="SWIG version is not suitable"
+ AC_MSG_WARN([Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0])
+ fi
+ fi
+ fi
+ fi
+ fi
fi
- if test "x$svn_cv_pycfmt_apr_int64_t" = "x"; then
- AC_EGREP_CPP([MaTcHtHiS +\"d\" +EnDeNd],
- [#include <apr.h>
- MaTcHtHiS APR_INT64_T_FMT EnDeNd],
- [svn_cv_pycfmt_apr_int64_t="i"])
- fi
- ])
- CPPFLAGS="$SVN_PYCFMT_SAVE_CPPFLAGS"
- if test "x$svn_cv_pycfmt_apr_int64_t" = "x"; then
- AC_MSG_ERROR([failed to recognize APR_INT64_T_FMT on this platform])
fi
- AC_DEFINE_UNQUOTED([SVN_APR_INT64_T_PYCFMT],
- ["$svn_cv_pycfmt_apr_int64_t"],
- [Define to the Python/C API format character suitable]
- [ for apr_int64_t])
- fi
- if test "$PERL" != "none"; then
- AC_MSG_CHECKING([perl version])
- dnl Note that the q() bit is there to avoid unbalanced brackets
- dnl which m4 really doesn't like.
- PERL_VERSION="`$PERL -e 'q([[); print $]] * 1000000,$/;'`"
- AC_MSG_RESULT([$PERL_VERSION])
- if test "$PERL_VERSION" -ge "5008000"; then
- SWIG_PL_INCLUDES="\$(SWIG_INCLUDES) `$PERL -MExtUtils::Embed -e ccopts`"
- SWIG_PL_LINK="`$PERL -MExtUtils::Embed -e ldopts`"
- SWIG_PL_LINK="`SVN_REMOVE_STANDARD_LIB_DIRS($SWIG_PL_LINK)`"
+ SWIG_PL_ERRMSG="check config.log for details"
+ if test "$SWIG_PL_PERL" = "none"; then
+ SWIG_PL_ERRMSG="You specfied not to build Perl bindings or \
+suitable Perl interpreter is not found."
else
- AC_MSG_WARN([perl bindings require perl 5.8.0 or newer.])
+ if test "$SWIG" = "none"; then
+ AC_MSG_WARN([You specified to build SWIG Perl bindings, but SWIG is not found.])
+ SWIG_PL_ERRMSG="SWIG is need to build SWIG Perl bindings, but it is not found."
+ else
+ AC_MSG_CHECKING([perl version])
+ dnl Note that the q() bit is there to avoid unbalanced brackets
+ dnl which m4 really doesn't like.
+ PERL_VERSION="`$SWIG_PL_PERL -e 'q([[); print $]] * 1000000,$/;'`"
+ AC_MSG_RESULT([$PERL_VERSION])
+ if test "$PERL_VERSION" -ge "5008000"; then
+ SWIG_PL_INCLUDES="\$(SWIG_INCLUDES) `$SWIG_PL_PERL -MExtUtils::Embed -e ccopts`"
+ SWIG_PL_LINK="`$SWIG_PL_PERL -MExtUtils::Embed -e ldopts`"
+ SWIG_PL_LINK="`SVN_REMOVE_STANDARD_LIB_DIRS($SWIG_PL_LINK)`"
+
+ dnl SWIG Perl bindings successfully configured, clear the error message
+ SWIG_PL_ERRMSG=""
+ else
+ AC_MSG_WARN([perl bindings require perl 5.8.0 or newer.])
+ fi
+ fi
fi
- fi
- SWIG_RB_COMPILE="none"
- SWIG_RB_LINK="none"
- if test "$RUBY" != "none"; then
- if test x"$SWIG_VERSION" = x"3""00""008"; then
- # Use a local variable to escape the '#' sign.
- ruby_swig_issue_602='https://subversion.apache.org/docs/release-notes/1.11#ruby-swig-issue-602'
- AC_MSG_WARN([Ruby bindings are known not to support swig 3.0.8; see $ruby_swig_issue_602])
+ SWIG_RB_COMPILE="none"
+ SWIG_RB_LINK="none"
+ SWIG_RB_ERRMSG="check config.log for details"
+ if test "$SWIG_RB_RUBY" = "none"; then
+ SWIG_RB_ERRMSG="You specfied not to build Ruby bindings or \
+suitable Ruby interpreter is not found."
+ else
+ if test "$SWIG" = "none"; then
+ AC_MSG_WARN([You specified to build SWIG Ruby bindings, but SWIG is not found.])
+ SWIG_RB_ERRMSG="SWIG is need to build SWIG Ruby bindings, but it is not found."
+ else
+ if test x"$SWIG_VERSION" = x"3""00""008"; then
+ # Use a local variable to escape the '#' sign.
+ ruby_swig_issue_602='https://subversion.apache.org/docs/release-notes/1.11#ruby-swig-issue-602'
+ AC_MSG_WARN([Ruby bindings are known not to support swig 3.0.8; see $ruby_swig_issue_602])
+ fi
+ rbconfig="$SWIG_RB_RUBY -rrbconfig -e "
+
+ for var_name in arch archdir CC LDSHARED DLEXT LIBS LIBRUBYARG \
+ rubyhdrdir rubyarchhdrdir sitedir sitelibdir sitearchdir libdir
+ do
+ rbconfig_tmp=`$rbconfig "print RbConfig::CONFIG@<:@'$var_name'@:>@"`
+ eval "rbconfig_$var_name=\"$rbconfig_tmp\""
+ done
+
+ AC_MSG_NOTICE([Configuring Ruby SWIG binding])
+
+ AC_CACHE_CHECK([for Ruby include path], [svn_cv_ruby_includes],[
+ if test -d "$rbconfig_rubyhdrdir"; then
+ dnl Ruby >=1.9
+ svn_cv_ruby_includes="-I. -I$rbconfig_rubyhdrdir"
+ if test -d "$rbconfig_rubyarchhdrdir"; then
+ dnl Ruby >=2.0
+ svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyarchhdrdir"
+ else
+ svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyhdrdir/$rbconfig_arch"
+ fi
+ else
+ dnl Ruby 1.8
+ svn_cv_ruby_includes="-I. -I$rbconfig_archdir"
+ fi
+ ])
+ SWIG_RB_INCLUDES="\$(SWIG_INCLUDES) $svn_cv_ruby_includes"
+
+ AC_CACHE_CHECK([how to compile Ruby extensions], [svn_cv_ruby_compile],[
+ svn_cv_ruby_compile="$rbconfig_CC $CFLAGS"
+ ])
+ SWIG_RB_COMPILE="$svn_cv_ruby_compile"
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-ansi])
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c89])
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c90])
+ dnl FIXME: Check that the compiler for Ruby actually supports this flag
+ SWIG_RB_COMPILE="$SWIG_RB_COMPILE -Wno-int-to-pointer-cast"
+
+ AC_CACHE_CHECK([how to link Ruby extensions], [svn_cv_ruby_link],[
+ svn_cv_ruby_link="`$SWIG_RB_RUBY -e 'ARGV.shift; print ARGV.join(%q( ))' \
+ $rbconfig_LDSHARED`"
+ svn_cv_ruby_link="$rbconfig_CC $svn_cv_ruby_link"
+ svn_cv_ruby_link="$svn_cv_ruby_link -shrext .$rbconfig_DLEXT"
+ ])
+ SWIG_RB_LINK="$svn_cv_ruby_link"
+
+ AC_CACHE_CHECK([how to link Ruby libraries], [ac_cv_ruby_libs], [
+ ac_cv_ruby_libs="$rbconfig_LIBRUBYARG $rbconfig_LIBS"
+ ])
+ SWIG_RB_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_ruby_libs)`"
+
+ AC_MSG_CHECKING([for rb_errinfo])
+ old_CFLAGS="$CFLAGS"
+ old_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $svn_cv_ruby_includes"
+ SVN_STRIP_FLAG([CFLAGS], [-ansi])
+ SVN_STRIP_FLAG([CFLAGS], [-std=c89])
+ SVN_STRIP_FLAG([CFLAGS], [-std=c90])
+ LIBS="$SWIG_RB_LIBS"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+#include <ruby.h>
+int main()
+{rb_errinfo();}]])], have_rb_errinfo="yes", have_rb_errinfo="no")
+ if test "$have_rb_errinfo" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_RB_ERRINFO], [1],
+ [Define to 1 if you have the `rb_errinfo' function.])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ CFLAGS="$old_CFLAGS"
+ LIBS="$old_LIBS"
+
+ AC_CACHE_VAL([svn_cv_ruby_sitedir],[
+ svn_cv_ruby_sitedir="$rbconfig_sitedir"
+ ])
+ AC_ARG_WITH([ruby-sitedir],
+ AS_HELP_STRING([--with-ruby-sitedir=SITEDIR],
+ [install Ruby bindings in SITEDIR
+ (default is same as ruby's one)]),
+ [svn_ruby_installdir="$withval"],
+ [svn_ruby_installdir="$svn_cv_ruby_sitedir"])
+
+ AC_MSG_CHECKING([where to install Ruby scripts])
+ AC_CACHE_VAL([svn_cv_ruby_sitedir_libsuffix],[
+ svn_cv_ruby_sitedir_libsuffix="`echo "$rbconfig_sitelibdir" | \
+ $SED -e "s,^$rbconfig_sitedir,,"`"
+ ])
+ SWIG_RB_SITE_LIB_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_libsuffix}"
+ AC_MSG_RESULT([$SWIG_RB_SITE_LIB_DIR])
+
+ AC_MSG_CHECKING([where to install Ruby extensions])
+ AC_CACHE_VAL([svn_cv_ruby_sitedir_archsuffix],[
+ svn_cv_ruby_sitedir_archsuffix="`echo "$rbconfig_sitearchdir" | \
+ $SED -e "s,^$rbconfig_sitedir,,"`"
+ ])
+ SWIG_RB_SITE_ARCH_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_archsuffix}"
+ AC_MSG_RESULT([$SWIG_RB_SITE_ARCH_DIR])
+
+ AC_MSG_CHECKING([how to use output level for Ruby bindings tests])
+ AC_CACHE_VAL([svn_cv_ruby_test_verbose],[
+ svn_cv_ruby_test_verbose="normal"
+ ])
+ AC_ARG_WITH([ruby-test-verbose],
+ AS_HELP_STRING([--with-ruby-test-verbose=LEVEL],
+ [how to use output level for Ruby bindings tests
+ (default is normal)]),
+ [svn_ruby_test_verbose="$withval"],
+ [svn_ruby_test_verbose="$svn_cv_ruby_test_verbose"])
+ SWIG_RB_TEST_VERBOSE="$svn_ruby_test_verbose"
+ AC_MSG_RESULT([$SWIG_RB_TEST_VERBOSE])
+
+ dnl SWIG Ruby bindings successfully configured, clear the error message
+ SWIG_RB_ERRMSG=""
+ fi
fi
- rbconfig="$RUBY -rrbconfig -e "
+ ],
+ [
+ # in release mode
+ SWIG_PY_COMPILE="none"
+ SWIG_PY_LINK="none"
+ SWIG_PY_OPTS="none"
+ SWIG_PY_ERRMSG="check config.log for details"
+ if test "$SWIG_PY_PYTHON" = "none"; then
+ SWIG_PY_ERRMSG="You specfied not to build Python bindings or \
+suitable Python interpreter is not found."
+ else
+ AC_MSG_NOTICE([Configuring python swig binding])
- for var_name in arch archdir CC LDSHARED DLEXT LIBS LIBRUBYARG \
- rubyhdrdir rubyarchhdrdir sitedir sitelibdir sitearchdir libdir
- do
- rbconfig_tmp=`$rbconfig "print RbConfig::CONFIG@<:@'$var_name'@:>@"`
- eval "rbconfig_$var_name=\"$rbconfig_tmp\""
- done
-
- AC_MSG_NOTICE([Configuring Ruby SWIG binding])
-
- AC_CACHE_CHECK([for Ruby include path], [svn_cv_ruby_includes],[
- if test -d "$rbconfig_rubyhdrdir"; then
- dnl Ruby >=1.9
- svn_cv_ruby_includes="-I. -I$rbconfig_rubyhdrdir -I$rbconfig_rubyhdrdir/ruby -I$rbconfig_rubyhdrdir/ruby/backward"
- if test -d "$rbconfig_rubyarchhdrdir"; then
- dnl Ruby >=2.0
- svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyarchhdrdir"
+ AC_CACHE_CHECK([for Python includes], [ac_cv_python_includes],[
+ ac_cv_python_includes="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --includes`"
+ ])
+ SWIG_PY_INCLUDES="\$(SWIG_INCLUDES) $ac_cv_python_includes"
+
+ if test "$ac_cv_python_includes" = "none"; then
+ SWIG_PY_ERRMSG="no distutils found"
+ AC_MSG_WARN([python bindings cannot be built without distutils module])
else
- svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyhdrdir/$rbconfig_arch"
+
+ python_header_found="no"
+
+ save_cppflags="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_cv_python_includes"
+ AC_CHECK_HEADER(Python.h, [
+ python_header_found="yes"
+ ])
+ CPPFLAGS="$save_cppflags"
+
+ if test "$python_header_found" = "no"; then
+ SWIG_PY_ERRMSG="no Python.h found"
+ AC_MSG_WARN([Python.h not found; disabling python swig bindings])
+ else
+ SVN_PY3C()
+
+ if test "$py3c_found" = "no"; then
+ SWIG_PY_ERRMSG="py3c library not found"
+ AC_MSG_WARN([py3c library not found; disabling python swig bindings])
+ else
+ AC_CACHE_CHECK([for compiling Python extensions], [ac_cv_python_compile],[
+ ac_cv_python_compile="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --compile`"
+ ])
+ SWIG_PY_COMPILE="$ac_cv_python_compile $CFLAGS"
+
+ AC_CACHE_CHECK([for linking Python extensions], [ac_cv_python_link],[
+ ac_cv_python_link="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --link`"
+ ])
+ SWIG_PY_LINK="$ac_cv_python_link"
+
+ AC_CACHE_CHECK([for linking Python libraries], [ac_cv_python_libs],[
+ ac_cv_python_libs="`$SWIG_PY_PYTHON ${abs_srcdir}/build/get-py-info.py --libs`"
+ ])
+ SWIG_PY_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_python_libs)`"
+
+ SWIG_PY_ERRMSG=""
+ fi
+ fi
fi
+ fi
+
+ SWIG_PL_ERRMSG="check config.log for details"
+ if test "$SWIG_PL_PERL" = "none"; then
+ SWIG_PL_ERRMSG="You specfied not to build Perl bindings or \
+suitable Perl interpreter is not found."
else
- dnl Ruby 1.8
- svn_cv_ruby_includes="-I. -I$rbconfig_archdir"
+ AC_MSG_CHECKING([perl version])
+ dnl Note that the q() bit is there to avoid unbalanced brackets
+ dnl which m4 really doesn't like.
+ PERL_VERSION="`$SWIG_PL_PERL -e 'q([[); print $]] * 1000000,$/;'`"
+ AC_MSG_RESULT([$PERL_VERSION])
+ if test "$PERL_VERSION" -ge "5008000"; then
+ SWIG_PL_INCLUDES="\$(SWIG_INCLUDES) `$SWIG_PL_PERL -MExtUtils::Embed -e ccopts`"
+ SWIG_PL_LINK="`$SWIG_PL_PERL -MExtUtils::Embed -e ldopts`"
+ SWIG_PL_LINK="`SVN_REMOVE_STANDARD_LIB_DIRS($SWIG_PL_LINK)`"
+
+ dnl SWIG Perl bindings successfully configured, clear the error message
+ SWIG_PL_ERRMSG=""
+ else
+ AC_MSG_WARN([perl bindings require perl 5.8.0 or newer.])
+ fi
fi
- ])
- SWIG_RB_INCLUDES="\$(SWIG_INCLUDES) $svn_cv_ruby_includes"
- AC_CACHE_CHECK([how to compile Ruby extensions], [svn_cv_ruby_compile],[
- svn_cv_ruby_compile="$rbconfig_CC $CFLAGS"
- ])
- SWIG_RB_COMPILE="$svn_cv_ruby_compile"
- SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-ansi])
- SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c89])
- SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c90])
- dnl FIXME: Check that the compiler for Ruby actually supports this flag
- SWIG_RB_COMPILE="$SWIG_RB_COMPILE -Wno-int-to-pointer-cast"
-
- AC_CACHE_CHECK([how to link Ruby extensions], [svn_cv_ruby_link],[
- svn_cv_ruby_link="`$RUBY -e 'ARGV.shift; print ARGV.join(%q( ))' \
- $rbconfig_LDSHARED`"
- svn_cv_ruby_link="$rbconfig_CC $svn_cv_ruby_link"
- svn_cv_ruby_link="$svn_cv_ruby_link -shrext .$rbconfig_DLEXT"
- ])
- SWIG_RB_LINK="$svn_cv_ruby_link"
+ SWIG_RB_COMPILE="none"
+ SWIG_RB_LINK="none"
+ SWIG_RB_ERRMSG="check config.log for details"
+ if test "$SWIG_RB_RUBY" = "none"; then
+ SWIG_RB_ERRMSG="You specfied not to build Ruby bindings or \
+suitable Ruby interpreter is not found."
+ else
+ rbconfig="$SWIG_RB_RUBY -rrbconfig -e "
- AC_CACHE_CHECK([how to link Ruby libraries], [ac_cv_ruby_libs], [
- ac_cv_ruby_libs="$rbconfig_LIBRUBYARG $rbconfig_LIBS"
- ])
- SWIG_RB_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_ruby_libs)`"
+ for var_name in arch archdir CC LDSHARED DLEXT LIBS LIBRUBYARG \
+ rubyhdrdir rubyarchhdrdir sitedir sitelibdir sitearchdir libdir
+ do
+ rbconfig_tmp=`$rbconfig "print RbConfig::CONFIG@<:@'$var_name'@:>@"`
+ eval "rbconfig_$var_name=\"$rbconfig_tmp\""
+ done
+
+ AC_MSG_NOTICE([Configuring Ruby SWIG binding])
+
+ AC_CACHE_CHECK([for Ruby include path], [svn_cv_ruby_includes],[
+ if test -d "$rbconfig_rubyhdrdir"; then
+ dnl Ruby >=1.9
+ svn_cv_ruby_includes="-I. -I$rbconfig_rubyhdrdir"
+ if test -d "$rbconfig_rubyarchhdrdir"; then
+ dnl Ruby >=2.0
+ svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyarchhdrdir"
+ else
+ svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyhdrdir/$rbconfig_arch"
+ fi
+ else
+ dnl Ruby 1.8
+ svn_cv_ruby_includes="-I. -I$rbconfig_archdir"
+ fi
+ ])
+ SWIG_RB_INCLUDES="\$(SWIG_INCLUDES) $svn_cv_ruby_includes"
- AC_MSG_CHECKING([for rb_errinfo])
- old_CFLAGS="$CFLAGS"
- old_LIBS="$LIBS"
- CFLAGS="$CFLAGS $svn_cv_ruby_includes"
- SVN_STRIP_FLAG([CFLAGS], [-ansi])
- SVN_STRIP_FLAG([CFLAGS], [-std=c89])
- SVN_STRIP_FLAG([CFLAGS], [-std=c90])
- LIBS="$SWIG_RB_LIBS"
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ AC_CACHE_CHECK([how to compile Ruby extensions], [svn_cv_ruby_compile],[
+ svn_cv_ruby_compile="$rbconfig_CC $CFLAGS"
+ ])
+ SWIG_RB_COMPILE="$svn_cv_ruby_compile"
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-ansi])
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c89])
+ SVN_STRIP_FLAG([SWIG_RB_COMPILE], [-std=c90])
+ dnl FIXME: Check that the compiler for Ruby actually supports this flag
+ SWIG_RB_COMPILE="$SWIG_RB_COMPILE -Wno-int-to-pointer-cast"
+
+ AC_CACHE_CHECK([how to link Ruby extensions], [svn_cv_ruby_link],[
+ svn_cv_ruby_link="`$SWIG_RB_RUBY -e 'ARGV.shift; print ARGV.join(%q( ))' \
+ $rbconfig_LDSHARED`"
+ svn_cv_ruby_link="$rbconfig_CC $svn_cv_ruby_link"
+ svn_cv_ruby_link="$svn_cv_ruby_link -shrext .$rbconfig_DLEXT"
+ ])
+ SWIG_RB_LINK="$svn_cv_ruby_link"
+
+ AC_CACHE_CHECK([how to link Ruby libraries], [ac_cv_ruby_libs], [
+ ac_cv_ruby_libs="$rbconfig_LIBRUBYARG $rbconfig_LIBS"
+ ])
+ SWIG_RB_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($ac_cv_ruby_libs)`"
+
+ AC_MSG_CHECKING([for rb_errinfo])
+ old_CFLAGS="$CFLAGS"
+ old_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $svn_cv_ruby_includes"
+ SVN_STRIP_FLAG([CFLAGS], [-ansi])
+ SVN_STRIP_FLAG([CFLAGS], [-std=c89])
+ SVN_STRIP_FLAG([CFLAGS], [-std=c90])
+ LIBS="$SWIG_RB_LIBS"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <ruby.h>
int main()
{rb_errinfo();}]])], have_rb_errinfo="yes", have_rb_errinfo="no")
- if test "$have_rb_errinfo" = "yes"; then
- AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_RB_ERRINFO], [1],
- [Define to 1 if you have the `rb_errinfo' function.])
- else
- AC_MSG_RESULT([no])
- fi
- CFLAGS="$old_CFLAGS"
- LIBS="$old_LIBS"
-
- AC_CACHE_VAL([svn_cv_ruby_sitedir],[
- svn_cv_ruby_sitedir="$rbconfig_sitedir"
- ])
- AC_ARG_WITH([ruby-sitedir],
- AS_HELP_STRING([--with-ruby-sitedir=SITEDIR],
- [install Ruby bindings in SITEDIR
- (default is same as ruby's one)]),
- [svn_ruby_installdir="$withval"],
- [svn_ruby_installdir="$svn_cv_ruby_sitedir"])
-
- AC_MSG_CHECKING([where to install Ruby scripts])
- AC_CACHE_VAL([svn_cv_ruby_sitedir_libsuffix],[
- svn_cv_ruby_sitedir_libsuffix="`echo "$rbconfig_sitelibdir" | \
- $SED -e "s,^$rbconfig_sitedir,,"`"
- ])
- SWIG_RB_SITE_LIB_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_libsuffix}"
- AC_MSG_RESULT([$SWIG_RB_SITE_LIB_DIR])
+ if test "$have_rb_errinfo" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_RB_ERRINFO], [1],
+ [Define to 1 if you have the `rb_errinfo' function.])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ CFLAGS="$old_CFLAGS"
+ LIBS="$old_LIBS"
- AC_MSG_CHECKING([where to install Ruby extensions])
- AC_CACHE_VAL([svn_cv_ruby_sitedir_archsuffix],[
- svn_cv_ruby_sitedir_archsuffix="`echo "$rbconfig_sitearchdir" | \
- $SED -e "s,^$rbconfig_sitedir,,"`"
- ])
- SWIG_RB_SITE_ARCH_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_archsuffix}"
- AC_MSG_RESULT([$SWIG_RB_SITE_ARCH_DIR])
+ AC_CACHE_VAL([svn_cv_ruby_sitedir],[
+ svn_cv_ruby_sitedir="$rbconfig_sitedir"
+ ])
+ AC_ARG_WITH([ruby-sitedir],
+ AS_HELP_STRING([--with-ruby-sitedir=SITEDIR],
+ [install Ruby bindings in SITEDIR
+ (default is same as ruby's one)]),
+ [svn_ruby_installdir="$withval"],
+ [svn_ruby_installdir="$svn_cv_ruby_sitedir"])
+
+ AC_MSG_CHECKING([where to install Ruby scripts])
+ AC_CACHE_VAL([svn_cv_ruby_sitedir_libsuffix],[
+ svn_cv_ruby_sitedir_libsuffix="`echo "$rbconfig_sitelibdir" | \
+ $SED -e "s,^$rbconfig_sitedir,,"`"
+ ])
+ SWIG_RB_SITE_LIB_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_libsuffix}"
+ AC_MSG_RESULT([$SWIG_RB_SITE_LIB_DIR])
+
+ AC_MSG_CHECKING([where to install Ruby extensions])
+ AC_CACHE_VAL([svn_cv_ruby_sitedir_archsuffix],[
+ svn_cv_ruby_sitedir_archsuffix="`echo "$rbconfig_sitearchdir" | \
+ $SED -e "s,^$rbconfig_sitedir,,"`"
+ ])
+ SWIG_RB_SITE_ARCH_DIR="${svn_ruby_installdir}${svn_cv_ruby_sitedir_archsuffix}"
+ AC_MSG_RESULT([$SWIG_RB_SITE_ARCH_DIR])
+
+ AC_MSG_CHECKING([how to use output level for Ruby bindings tests])
+ AC_CACHE_VAL([svn_cv_ruby_test_verbose],[
+ svn_cv_ruby_test_verbose="normal"
+ ])
+ AC_ARG_WITH([ruby-test-verbose],
+ AS_HELP_STRING([--with-ruby-test-verbose=LEVEL],
+ [how to use output level for Ruby bindings tests
+ (default is normal)]),
+ [svn_ruby_test_verbose="$withval"],
+ [svn_ruby_test_verbose="$svn_cv_ruby_test_verbose"])
+ SWIG_RB_TEST_VERBOSE="$svn_ruby_test_verbose"
+ AC_MSG_RESULT([$SWIG_RB_TEST_VERBOSE])
- AC_MSG_CHECKING([how to use output level for Ruby bindings tests])
- AC_CACHE_VAL([svn_cv_ruby_test_verbose],[
- svn_cv_ruby_test_verbose="normal"
- ])
- AC_ARG_WITH([ruby-test-verbose],
- AS_HELP_STRING([--with-ruby-test-verbose=LEVEL],
- [how to use output level for Ruby bindings tests
- (default is normal)]),
- [svn_ruby_test_verbose="$withval"],
- [svn_ruby_test_verbose="$svn_cv_ruby_test_verbose"])
- SWIG_RB_TEST_VERBOSE="$svn_ruby_test_verbose"
- AC_MSG_RESULT([$SWIG_RB_TEST_VERBOSE])
- fi
+ dnl SWIG Ruby bindings successfully configured, clear the error message
+ SWIG_RB_ERRMSG=""
+ fi
+ ])
AC_SUBST(SWIG)
AC_SUBST(SWIG_PY_INCLUDES)
AC_SUBST(SWIG_PY_COMPILE)
AC_SUBST(SWIG_PY_LINK)
AC_SUBST(SWIG_PY_LIBS)
+ AC_SUBST(SWIG_PY_OPTS)
+ AC_SUBST(SWIG_PY_ERRMSG)
AC_SUBST(SWIG_PL_INCLUDES)
AC_SUBST(SWIG_PL_LINK)
+ AC_SUBST(SWIG_PL_ERRMSG)
AC_SUBST(SWIG_RB_LINK)
AC_SUBST(SWIG_RB_LIBS)
AC_SUBST(SWIG_RB_INCLUDES)
@@ -314,4 +592,5 @@ int main()
AC_SUBST(SWIG_RB_SITE_LIB_DIR)
AC_SUBST(SWIG_RB_SITE_ARCH_DIR)
AC_SUBST(SWIG_RB_TEST_VERBOSE)
+ AC_SUBST(SWIG_RB_ERRMSG)
])
Modified: subversion/branches/multi-wc-format/build/ac-macros/utf8proc.m4
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/ac-macros/utf8proc.m4?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/ac-macros/utf8proc.m4 (original)
+++ subversion/branches/multi-wc-format/build/ac-macros/utf8proc.m4 Fri Jan 14 14:01:45 2022
@@ -54,7 +54,7 @@ AC_DEFUN(SVN_UTF8PROC,
SVN_UTF8PROC_PREFIX
fi
if test "$utf8proc_found" != "yes"; then
- AC_MSG_ERROR([Subversion requires UTF8PROC])
+ AC_MSG_ERROR([Subversion requires UTF8PROC; install it or re-run configure with "--with-utf8proc=internal"])
fi
fi
AC_SUBST(SVN_UTF8PROC_INCLUDES)
Propchange: subversion/branches/multi-wc-format/build/ac-macros/utf8proc.m4
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/branches/multi-wc-format/build/buildcheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/buildcheck.sh?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/buildcheck.sh (original)
+++ subversion/branches/multi-wc-format/build/buildcheck.sh Fri Jan 14 14:01:45 2022
@@ -76,26 +76,12 @@ fi
echo "buildcheck: autoheader version $ah_version (ok)"
#--------------------------------------------------------------------------
-# libtool 1.4 or newer
+# libtool 2.0 or newer
#
-LIBTOOL_WANTED_MAJOR=1
-LIBTOOL_WANTED_MINOR=4
+LIBTOOL_WANTED_MAJOR=2
+LIBTOOL_WANTED_MINOR=0
LIBTOOL_WANTED_PATCH=
-LIBTOOL_WANTED_VERSION=1.4
-
-# The minimum version for source releases is 1.4.3,
-# because it's required by (at least) Solaris.
-if test "$VERSION_CHECK" = "--release"; then
- LIBTOOL_WANTED_PATCH=3
- LIBTOOL_WANTED_VERSION=1.4.3
-else
- case `uname -sr` in
- SunOS\ 5.*)
- LIBTOOL_WANTED_PATCH=3
- LIBTOOL_WANTED_VERSION=1.4.3
- ;;
- esac
-fi
+LIBTOOL_WANTED_VERSION=2.0
# Much like APR except we do not prefer libtool 1 over libtool 2.
libtoolize=${LIBTOOLIZE:-`./build/PrintPath glibtoolize libtoolize glibtoolize1 libtoolize15 libtoolize14`}
Modified: subversion/branches/multi-wc-format/build/generator/gen_base.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/gen_base.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/gen_base.py (original)
+++ subversion/branches/multi-wc-format/build/generator/gen_base.py Fri Jan 14 14:01:45 2022
@@ -663,7 +663,7 @@ class TargetExe(TargetLinked):
TargetLinked.add_dependencies(self)
# collect test programs
- if 'svnauthz' in self.name: # special case
+ if 'svnauthz' in self.name or 'svnmover' in self.name: # special case
self.gen_obj.test_deps.append(self.filename)
self.gen_obj.test_helpers.append(self.filename)
elif self.install == 'test':
@@ -1273,7 +1273,8 @@ class IncludeDependencyInfo:
Return a dictionary with included full file names as keys and None as
values."""
hdrs = { }
- for line in fileinput.input(fname):
+
+ for line in fileinput.FileInput(fname, openhook=fileinput.hook_encoded("utf-8")):
match = self._re_include.match(line)
if not match:
continue
Modified: subversion/branches/multi-wc-format/build/generator/gen_make.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/gen_make.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/gen_make.py (original)
+++ subversion/branches/multi-wc-format/build/generator/gen_make.py Fri Jan 14 14:01:45 2022
@@ -208,7 +208,9 @@ class Generator(gen_base.GeneratorBase):
swig_lang_deps[objname.lang].append(str(objname))
for lang in self.swig.langs:
- data.swig_langs.append(_eztdata(short=self.swig.short[lang],
+ data.swig_langs.append(_eztdata(name=lang,
+ short=self.swig.short[lang],
+ short_upper=self.swig.short[lang].upper(),
deps=swig_lang_deps[lang]))
########################################
@@ -445,7 +447,7 @@ class Generator(gen_base.GeneratorBase):
### we should turn AREA into an object, then test it instead of this
if area[:5] == 'swig-' and area[-4:] != '-lib' \
or area[:7] == 'javahl-' \
- or area[:6] == 'cxxhl-' \
+ or area[:6] == 'svnxx-' \
or area == 'tools':
ezt_area.extra_install = 'yes'
@@ -509,6 +511,9 @@ class Generator(gen_base.GeneratorBase):
standalone.write('top_srcdir = .\n')
standalone.write('top_builddir = .\n')
standalone.write('SWIG = swig\n')
+ swig_py_opts = os.environ.get('SWIG_PY_OPTS',
+ '-python -py3 -nofastunpack -modern')
+ standalone.write('SWIG_PY_OPTS = %s\n' % (swig_py_opts))
standalone.write('PYTHON = ' + sys.executable + '\n')
standalone.write('\n')
standalone.write(open("build-outputs.mk","r").read())
@@ -633,9 +638,10 @@ DIR=`pwd`
lib_deps=[],
lib_required=[],
lib_required_private=[],
+ version=self.version,
)
- # libsvn_foo -> -lsvn_foo
- data.lib_deps.append('-l%s' % lib_name.replace('lib', '', 1))
+ # libsvn_foo -> -lsvn_foo-1
+ data.lib_deps.append('-l%s-%s' % (lib_name.replace('lib', '', 1), data.version))
for lib_dep in lib_deps.split():
if lib_dep == 'apriconv':
# apriconv is part of apr-util, skip it
Modified: subversion/branches/multi-wc-format/build/generator/gen_vcnet_vcproj.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/gen_vcnet_vcproj.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/gen_vcnet_vcproj.py (original)
+++ subversion/branches/multi-wc-format/build/generator/gen_vcnet_vcproj.py Fri Jan 14 14:01:45 2022
@@ -120,10 +120,13 @@ class Generator(gen_win.WinGeneratorBase
'instrument_purify_quantify' : self.instrument_purify_quantify,
'version' : self.vcproj_version,
'toolset_version' : 'v' + self.vcproj_version.replace('.',''),
+ 'user_macros': self.user_macros,
}
if self.vcproj_extension == '.vcproj':
self.write_with_template(fname, 'templates/vcnet_vcproj.ezt', data)
+ self.write_with_template(os.path.splitext(fname)[0] + '.vsprops',
+ 'templates/vcnet_vsprops.ezt', data)
else:
self.write_with_template(fname, 'templates/vcnet_vcxproj.ezt', data)
self.write_with_template(fname + '.filters', 'templates/vcnet_vcxproj_filters.ezt', data)
@@ -283,3 +286,11 @@ class Generator(gen_win.WinGeneratorBase
}
self.write_with_template('subversion_vcnet.sln', 'templates/vcnet_sln.ezt', data)
+
+ def quote_define(self, value):
+ "Properly quote special characters in a define (if needed)"
+
+ if self.vcproj_extension == '.vcproj':
+ return value.replace('"', '""')
+ else:
+ return value
Modified: subversion/branches/multi-wc-format/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/gen_win.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/gen_win.py (original)
+++ subversion/branches/multi-wc-format/build/generator/gen_win.py Fri Jan 14 14:01:45 2022
@@ -128,7 +128,7 @@ class WinGeneratorBase(gen_win_dependenc
# VC 2002 and VC 2003 only allow a single platform per project file
if subdir == 'vcnet-vcproj':
if self.vcproj_version != '7.00' and self.vcproj_version != '7.10':
- self.platforms = ['Win32','x64']
+ self.platforms = ['Win32', 'x64', 'ARM64']
#Here we can add additional modes to compile for
self.configs = ['Debug','Release']
@@ -158,6 +158,13 @@ class WinGeneratorBase(gen_win_dependenc
### implement this from scratch using the algorithms described in
### http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt
+ # Ensure data is in byte representation. If it doesn't have an encode
+ # attribute, assume it is already in the correct form.
+ try:
+ data = data.encode('utf8')
+ except AttributeError:
+ pass
+
myhash = hashlib_md5(data).hexdigest()
guid = ("{%s-%s-%s-%s-%s}" % (myhash[0:8], myhash[8:12],
@@ -736,9 +743,14 @@ class WinGeneratorBase(gen_win_dependenc
if target.name.endswith('svn_subr'):
fakedefines.append("SVN_USE_WIN32_CRASHHANDLER")
+ fakedefines.append(self.quote_define('SVN_WIN32_CRASHREPORT_EMAIL="users@subversion.apache.org"'))
return fakedefines
+ def quote_define(self, value):
+ "Properly quote special characters in a define (if needed)"
+ return value
+
def get_win_includes(self, target, cfg='Release'):
"Return the list of include directories for target"
@@ -773,13 +785,17 @@ class WinGeneratorBase(gen_win_dependenc
else:
lang_subdir = target.lang
+ if target.lang == "python":
+ lib = self._libraries['py3c']
+ fakeincludes.extend(lib.include_dirs)
+
# After the language specific includes include the generic libdir,
# to allow overriding a generic with a per language include
fakeincludes.append(os.path.join(self.swig_libdir, lang_subdir))
fakeincludes.append(self.swig_libdir)
- if 'cxxhl' in target.name:
- fakeincludes.append("subversion/bindings/cxxhl/include")
+ if 'svnxx' in target.name:
+ fakeincludes.append("subversion/bindings/cxx/include")
return gen_base.unique(map(self.apath, fakeincludes))
Modified: subversion/branches/multi-wc-format/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/gen_win_dependencies.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/gen_win_dependencies.py (original)
+++ subversion/branches/multi-wc-format/build/generator/gen_win_dependencies.py Fri Jan 14 14:01:45 2022
@@ -32,6 +32,7 @@ import fnmatch
import re
import subprocess
import string
+from collections import namedtuple
if sys.version_info[0] >= 3:
# Python >=3.0
@@ -46,6 +47,8 @@ else:
import gen_base
import ezt
+UserMacro = namedtuple('UserMacro', ['name', 'value'])
+
class SVNCommonLibrary:
def __init__(self, name, include_dirs, lib_dir, lib_name, version=None,
@@ -117,6 +120,7 @@ class GenDependenciesBase(gen_base.Gener
'swig',
'perl',
'python',
+ 'py3c',
'ruby',
'java_sdk',
'openssl',
@@ -124,6 +128,8 @@ class GenDependenciesBase(gen_base.Gener
# So optional, we don't even have any code to detect them on Windows
'magic',
+ 'macos-plist',
+ 'macos-keychain',
]
# When build.conf contains a 'when = SOMETHING' where SOMETHING is not in
@@ -146,6 +152,7 @@ class GenDependenciesBase(gen_base.Gener
self.jdk_path = None
self.junit_path = None
self.swig_path = None
+ self.py3c_path = None
self.vs_version = '2002'
self.sln_version = '7.00'
self.vcproj_version = '7.00'
@@ -161,10 +168,12 @@ class GenDependenciesBase(gen_base.Gener
self.disable_shared = None
self.static_apr = None
self.static_openssl = None
+ self.shared_serf = None
self.instrument_apr_pools = None
self.instrument_purify_quantify = None
self.sasl_path = None
self.cpp_defines = []
+ self.user_macros = []
# NLS options
self.enable_nls = None
@@ -196,6 +205,8 @@ class GenDependenciesBase(gen_base.Gener
self.zlib_path = val
elif opt == '--with-swig':
self.swig_path = val
+ elif opt == '--with-py3c':
+ self.py3c_path = val
elif opt == '--with-sqlite':
self.sqlite_path = val
elif opt == '--with-sasl':
@@ -215,8 +226,12 @@ class GenDependenciesBase(gen_base.Gener
self.disable_shared = 1
elif opt == '--with-static-apr':
self.static_apr = 1
+ self.shared_serf = 0 # Can't mix apr versions
elif opt == '--with-static-openssl':
self.static_openssl = 1
+ elif opt == '--with-shared-serf':
+ if not self.static_apr:
+ self.shared_serf = 1
elif opt == '-D':
self.cpp_defines.append(val)
elif opt == '--vsnet-version':
@@ -265,6 +280,11 @@ class GenDependenciesBase(gen_base.Gener
self.sln_version = '12.00'
self.vcproj_version = '14.1'
self.vcproj_extension = '.vcxproj'
+ elif val == '2019' or val == '16':
+ self.vs_version = '2019'
+ self.sln_version = '12.00'
+ self.vcproj_version = '14.2'
+ self.vcproj_extension = '.vcxproj'
elif re.match('^20\d+$', val):
print('WARNING: Unknown VS.NET version "%s",'
' assuming VS2012. Your VS can probably upgrade')
@@ -322,13 +342,15 @@ class GenDependenciesBase(gen_base.Gener
# Swig (optional) dependencies
if self._find_swig(show_warnings):
self._find_perl(show_warnings)
- self._find_python(show_warnings)
+ # py3c is required to build python bindings, show check it first
+ if self._find_py3c(show_warnings):
+ self._find_python(show_warnings)
self._find_ruby(show_warnings)
def _find_apr(self):
"Find the APR library and version"
- minimal_apr_version = (1, 3, 0)
+ minimal_apr_version = (1, 4, 0)
if not self.apr_path:
sys.stderr.write("ERROR: Use '--with-apr' option to configure APR " + \
@@ -574,9 +596,14 @@ class GenDependenciesBase(gen_base.Gener
# apr-Util 0.9-1.4 compiled expat to 'xml.lib', but apr-util 1.5 switched
# to the more common 'libexpat.lib'
- libname = 'libexpat.lib'
- if not os.path.exists(os.path.join(lib_dir, 'libexpat.lib')):
- libname = 'xml.lib'
+ if os.path.exists(os.path.join(lib_dir, 'libexpat.lib')):
+ # Shared or completely static build
+ libname = 'libexpat.lib'
+ elif os.path.exists(os.path.join(lib_dir, 'libexpatMD.lib')):
+ # libexpat CMake build. static build against Multithreaded DLL CRT
+ libname = 'libexpatMD.lib'
+ else:
+ libname = 'xml.lib'
version = (major, minor, patch)
xml_version = '%d.%d.%d' % version
@@ -763,7 +790,7 @@ class GenDependenciesBase(gen_base.Gener
if self.bdb_path:
bdb_path = self.bdb_path
-
+
inc_path = os.path.join(bdb_path, 'include')
db_h_path = os.path.join(inc_path, 'db.h')
@@ -1020,9 +1047,64 @@ class GenDependenciesBase(gen_base.Gener
except ImportError:
return
+ if sys.version_info[0] >= 3:
+ if self.swig_version < (3, 0, 10):
+ if show_warnings:
+ print("WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer")
+ return
+ if self.swig_version < (4, 0, 0):
+ opts = "-python -py3 -nofastunpack -modern"
+ else:
+ opts = "-python -py3 -nofastunpack"
+ else:
+ if not ((1, 3, 24) <= self.swig_version < (4, 0, 0)):
+ if show_warnings:
+ print("WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0")
+ return
+ opts = "-python -classic"
+
+ self.user_macros.append(UserMacro("SWIG_PY_OPTS", opts))
self._libraries['python'] = SVNCommonLibrary('python', inc_dir, lib_dir, None,
sys.version.split(' ')[0])
+ def _find_py3c(self, show_warnings):
+ "Find the py3c library which is used in SWIG python bindings"
+ show_warnings = True
+ # Assume a default path, unless otherwise specified
+ py3c_path = "py3c"
+
+ if self.py3c_path:
+ py3c_path = self.py3c_path
+
+ py3c_path = os.path.abspath(py3c_path)
+ inc_path = os.path.join(py3c_path, 'include')
+ py3c_hdr_path = os.path.join(inc_path, 'py3c.h')
+
+ pc_path = os.path.join(py3c_path, 'py3c.pc.in')
+
+ if not os.path.isfile(py3c_hdr_path):
+ if show_warnings:
+ print('WARNING: "%s" not found' % py3c_hdr_path)
+ print('Use "--with-py3c" to configure py3c location.')
+ return False
+
+ with open(pc_path) as fp:
+ txt = fp.read()
+
+ ver_match = re.search(r'Version:\s+([0-9.]+)', txt)
+
+ if not ver_match:
+ if show_warnings:
+ print("WARNING: Failed to find version in '%s'" % pc_path)
+ return False
+
+ py3c_version = ver_match.group(1)
+
+ self._libraries['py3c'] = SVNCommonLibrary('py3c', inc_path, None,
+ None, py3c_version)
+
+ return True
+
def _find_jdk(self, show_warnings):
"Find details about an installed jdk"
@@ -1073,7 +1155,7 @@ class GenDependenciesBase(gen_base.Gener
outfp = subprocess.Popen([os.path.join(jdk_path, 'bin', 'javac.exe'),
'-version'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT).stdout
- line = outfp.read()
+ line = outfp.read().decode('utf8')
if line:
vermatch = re.search(r'(([0-9]+(\.[0-9]+)+)(_[._0-9]+)?)', line, re.M)
else:
@@ -1131,7 +1213,7 @@ class GenDependenciesBase(gen_base.Gener
try:
fp = subprocess.Popen([self.swig_exe, '-version'],
stdout=subprocess.PIPE).stdout
- txt = fp.read()
+ txt = fp.read().decode('utf8')
if txt:
vermatch = re.search(r'^SWIG\ Version\ (\d+)\.(\d+)\.(\d+)', txt, re.M)
else:
@@ -1159,7 +1241,7 @@ class GenDependenciesBase(gen_base.Gener
try:
fp = subprocess.Popen([self.swig_exe, '-swiglib'],
stdout=subprocess.PIPE).stdout
- lib_dir = fp.readline().strip()
+ lib_dir = fp.readline().decode('utf8').strip()
fp.close()
except OSError:
lib_dir = None
@@ -1262,6 +1344,9 @@ class GenDependenciesBase(gen_base.Gener
lib_name = 'serf-%d.lib' % (serf_ver_maj,)
else:
lib_name = 'serf.lib'
+
+ if self.shared_serf:
+ lib_name = 'lib' + lib_name
defines = ['SVN_HAVE_SERF', 'SVN_LIBSVN_RA_LINKS_RA_SERF']
Modified: subversion/branches/multi-wc-format/build/generator/swig/__init__.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/swig/__init__.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/swig/__init__.py (original)
+++ subversion/branches/multi-wc-format/build/generator/swig/__init__.py Fri Jan 14 14:01:45 2022
@@ -62,7 +62,7 @@ class Generator:
if os.access(self.swig_path, os.X_OK):
# ### TODO: What's the reason for this os.access() check? It was added
# ### in r873265 (== r33191).
- self.swig_libdir = subprocess.check_output([self.swig_path, "-swiglib"]).strip()
+ self.swig_libdir = subprocess.check_output([self.swig_path, "-swiglib"]).decode('utf8').strip()
else:
self.swig_libdir = None
@@ -71,7 +71,7 @@ class Generator:
"""Get the version number of SWIG"""
if not self._swigVersion:
- swig_version = subprocess.check_output([self.swig_path, "-version"])
+ swig_version = subprocess.check_output([self.swig_path, "-version"]).decode('utf8')
m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
if m:
self._swigVersion = tuple(map(int, m.groups()))
Modified: subversion/branches/multi-wc-format/build/generator/swig/header_wrappers.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/swig/header_wrappers.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/swig/header_wrappers.py (original)
+++ subversion/branches/multi-wc-format/build/generator/swig/header_wrappers.py Fri Jan 14 14:01:45 2022
@@ -265,7 +265,13 @@ class Generator(generator.swig.Generator
self.proxy_filename(base_fname))
# Open a temporary output file
- self.ofile = tempfile.TemporaryFile(dir=self.proxy_dir)
+ if sys.version_info[0] >= 3:
+ self.ofile = tempfile.TemporaryFile(dir=self.proxy_dir,
+ mode="w+",
+ encoding="utf8")
+ else:
+ self.ofile = tempfile.TemporaryFile(dir=self.proxy_dir)
+
self.ofile.write('/* Proxy classes for %s\n' % base_fname)
self.ofile.write(' * DO NOT EDIT -- AUTOMATICALLY GENERATED\n')
self.ofile.write(' * BY build/generator/swig/header_wrappers.py */\n')
Modified: subversion/branches/multi-wc-format/build/generator/templates/build-outputs.mk.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/templates/build-outputs.mk.ezt?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/templates/build-outputs.mk.ezt (original)
+++ subversion/branches/multi-wc-format/build/generator/templates/build-outputs.mk.ezt Fri Jan 14 14:01:45 2022
@@ -70,8 +70,18 @@ RELEASE_MODE = 1
# Section 3: SWIG autogen rules
########################################
[for swig_langs]
-autogen-swig-[swig_langs.short]:[for swig_langs.deps] [swig_langs.deps][end]
+.swig_[swig_langs.short]_checked:
+ @if [ -n "$(SWIG_[swig_langs.short_upper]_ERRMSG)" ]; then \
+ echo "SWIG [swig_langs.name] disabled at configure time: $(SWIG_[swig_langs.short_upper]_ERRMSG)" >&2; \
+ exit 1; \
+ fi
+ @touch $@
+
+autogen-swig-[swig_langs.short]: .swig_[swig_langs.short]_checked [for swig_langs.deps] [swig_langs.deps][end]
autogen-swig: autogen-swig-[swig_langs.short]
+
+# Ensure the swig build targets depend on the configuration check
+swig-[swig_langs.short]: .swig_[swig_langs.short]_checked
[end]
Modified: subversion/branches/multi-wc-format/build/generator/templates/pkg-config.in.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/templates/pkg-config.in.ezt?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/templates/pkg-config.in.ezt (original)
+++ subversion/branches/multi-wc-format/build/generator/templates/pkg-config.in.ezt Fri Jan 14 14:01:45 2022
@@ -6,7 +6,7 @@ includedir=@includedir@
Name: [lib_name]
Description: [lib_desc]
Version: @PACKAGE_VERSION@
-Requires: [for lib_required] [lib_required][end]
-Requires.private: [for lib_required_private] [lib_required_private][end]
+Requires: [for lib_required][if-index lib_required first][else], [end][lib_required][end]
+Requires.private: [for lib_required_private][if-index lib_required_private first][else], [end][lib_required_private][end]
Libs: -L${libdir} [for lib_deps] [lib_deps][end]
-Cflags: -I${includedir}
+Cflags: -I${includedir}/subversion-[version]
Modified: subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcproj.ezt?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcproj.ezt (original)
+++ subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcproj.ezt Fri Jan 14 14:01:45 2022
@@ -33,6 +33,7 @@
OutputDirectory="..\..\..\[configs.name]\[target.output_dir]"
BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
IntermediateDirectory="..\..\..\[configs.name]\[target.intermediate_dir]\[target.proj_name]"
+ InheritedPropertySheets=".\[target.proj_name].vsprops"
ConfigurationType="[target_type]"[is configs.name "Release"]
WholeProgramOptimization="FALSE"[end]>
<Tool
@@ -59,7 +60,7 @@
DisableSpecificWarnings="4100;4127;4206;4512;4701;4706;4800"
Detect64BitPortabilityProblems="FALSE"
AdditionalOptions="
- /we4002 /we4003 /we4013 /we4020 /we4022 /we4024 /we4028 /we4029 /we4030 /we4031 /we4033 /we4047 /we4089 /we4113 /we4115 /we4204 /we4715"
+ /we4002 /we4003 /we4013 /we4020 /we4022 /we4024 /we4028 /we4029 /we4030 /we4031 /we4033 /we4047 /we4089 /we4113 /we4204 /we4715"
DebugInformationFormat="3"
ProgramDataBaseFileName="$(IntDir)\[target.output_pdb]"
[if-any configs.forced_include_files]ForcedIncludeFiles="[for configs.forced_include_files][configs.forced_include_files][if-index configs.forced_include_files last][else];[end][end]"
Modified: subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcxproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcxproj.ezt?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcxproj.ezt (original)
+++ subversion/branches/multi-wc-format/build/generator/templates/vcnet_vcxproj.ezt Fri Jan 14 14:01:45 2022
@@ -43,7 +43,9 @@
[for platforms][for configs] <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
-[end][end] <PropertyGroup Label="UserMacros" />
+[end][end] <PropertyGroup Label="UserMacros">
+[for user_macros] <[user_macros.name]>[user_macros.value]</[user_macros.name]>
+[end] </PropertyGroup>
[for platforms][for configs] <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">
<OutDir>$(SolutionDir)[configs.name]\[target.output_dir]\</OutDir>
<IntDir>$(SolutionDir)[configs.name]\obj\[target.intermediate_dir]\[target.proj_name]\</IntDir>
@@ -59,16 +61,16 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
[end] <AdditionalIncludeDirectories>$(SolutionDir)[configs.name];[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<StringPooling>true</StringPooling>
- <PreprocessorDefinitions>[if-any instrument_apr_pools]APR_POOL_DEBUG=[instrument_apr_pools];[end][is platforms "x64"]WIN64;[end][for configs.defines][configs.defines];[end]%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>[if-any instrument_apr_pools]APR_POOL_DEBUG=[instrument_apr_pools];[end][is platforms "x64"]WIN64;[end][is platforms "ARM64"]WIN64;[end][for configs.defines][configs.defines];[end]%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4100;4127;4206;4512;4701;4706;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- <TreatSpecificWarningsAsErrors>4002;4003;4013;4020;4022;4024;4028;4029;4030;4031;4033;4047;4089;4113;4115;4133;4204;4700;4715;4789;%(TreatSpecificWarningsAsErrors)</TreatSpecificWarningsAsErrors>
+ <TreatSpecificWarningsAsErrors>4002;4003;4013;4020;4022;4024;4028;4029;4030;4031;4033;4047;4089;4113;4133;4204;4700;4715;4789;%(TreatSpecificWarningsAsErrors)</TreatSpecificWarningsAsErrors>
[if-any configs.forced_include_files] <ForcedIncludeFiles>[for configs.forced_include_files][configs.forced_include_files];[end]%(ForcedIncludeFiles)</ForcedIncludeFiles>
[end] </ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is platforms "x64"]WIN64;[end][for configs.defines][configs.defines];[end]%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is platforms "x64"]WIN64;[end][is platforms "ARM64"]WIN64;[end][for configs.defines][configs.defines];[end]%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
[is config_type "Application"] <Link>
<AdditionalDependencies>[for configs.libs][configs.libs];[end]%(AdditionalDependencies)</AdditionalDependencies>
@@ -90,7 +92,7 @@
[if-any def_file] <ModuleDefinitionFile>[def_file]</ModuleDefinitionFile>
[end] </Link>
[else][is config_type "StaticLibrary"] <Lib>
- <TargetMachine>[is platforms "X64"]MachineX64[else]MachineX86[end]</TargetMachine>
+ <TargetMachine>[is platforms "X64"]MachineX64[else][is platforms "ARM64"]MachineARM64[else]MachineX86[end][end]</TargetMachine>
[is configs.name "Debug"] <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
[end] </Lib>
[end][end][end] </ItemDefinitionGroup>
Modified: subversion/branches/multi-wc-format/build/get-py-info.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/get-py-info.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/get-py-info.py (original)
+++ subversion/branches/multi-wc-format/build/get-py-info.py Fri Jan 14 14:01:45 2022
@@ -81,20 +81,8 @@ def link_options():
# Initialize config variables
assert os.name == "posix"
options = sysconfig.get_config_var('LDSHARED').split()
- fwdir = sysconfig.get_config_var('PYTHONFRAMEWORKDIR')
- if fwdir and fwdir != "no-framework":
-
- # Setup the framework prefix
- fwprefix = sysconfig.get_config_var('PYTHONFRAMEWORKPREFIX')
- if fwprefix != "/System/Library/Frameworks":
- add_option_if_missing(options, "-F%s" % fwprefix)
-
- # Load in the framework
- fw = sysconfig.get_config_var('PYTHONFRAMEWORK')
- add_option(options, "-framework", fw)
-
- elif sys.platform == 'darwin':
+ if sys.platform == 'darwin':
# Load bundles from python
python_exe = os.path.join(sysconfig.get_config_var("BINDIR"),
Modified: subversion/branches/multi-wc-format/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/run_tests.py?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/build/run_tests.py (original)
+++ subversion/branches/multi-wc-format/build/run_tests.py Fri Jan 14 14:01:45 2022
@@ -34,6 +34,7 @@
[--config-file=<file>] [--ssl-cert=<file>]
[--exclusive-wc-locks] [--memcached-server=<url:port>]
[--fsfs-compression=<type>] [--fsfs-dir-deltification=<true|false>]
+ [--allow-remote-http-connection]
<abs_srcdir> <abs_builddir>
<prog ...>
@@ -46,10 +47,10 @@ and filename of a test program, optional
separated list of test numbers; the default is to run all the tests in it.
'''
-import os, sys, shutil, codecs
+import os, sys, shutil
import re
import logging
-import optparse, subprocess, imp, threading, traceback
+import optparse, subprocess, threading, traceback
from datetime import datetime
try:
@@ -63,6 +64,13 @@ if sys.version_info < (3, 0):
# Python >= 3.0 already has this build in
import exceptions
+if sys.version_info < (3, 5):
+ import imp
+else:
+ # The imp module is deprecated since Python 3.4; the replacement we use,
+ # module_from_spec(), is available since Python 3.5.
+ import importlib.util
+
# Ensure the compiled C tests use a known locale (Python tests set the locale
# explicitly).
os.environ['LC_ALL'] = 'C'
@@ -83,6 +91,29 @@ class TextColors:
cls.SUCCESS = ''
+if hasattr(subprocess.Popen, '__enter__'):
+ Popen = subprocess.Popen
+else:
+ class Popen(subprocess.Popen):
+ """Popen objects are supported as context managers since Python 3.2.
+ This class provides backwards-compatibility with Python 2.
+ """
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ if self.stdout:
+ self.stdout.close()
+ if self.stderr:
+ self.stderr.close()
+ try:
+ if self.stdin:
+ self.stdin.close()
+ finally:
+ self.wait()
+
+
def _get_term_width():
'Attempt to discern the width of the terminal'
# This may not work on all platforms, in which case the default of 80
@@ -133,6 +164,18 @@ def ensure_str(s):
else:
return s.decode("latin-1")
+def open_logfile(filename, mode, encoding='utf-8'):
+ if sys.version_info[0] != 2:
+ return open(filename, mode, encoding=encoding, errors='surrogateescape')
+ else:
+ class Wrapper(object):
+ def __init__(self, stream, encoding):
+ self._stream = stream
+ self.encoding = encoding
+ def __getattr__(self, name):
+ return getattr(self._stream, name)
+ return Wrapper(open(filename, mode), encoding)
+
class TestHarness:
'''Test harness for Subversion tests.
'''
@@ -195,8 +238,9 @@ class TestHarness:
authzparent = os.path.join(self.builddir, subdir)
if not os.path.exists(authzparent):
os.makedirs(authzparent);
- open(os.path.join(authzparent, 'authz'), 'w').write('[/]\n'
- '* = rw\n')
+ with open(os.path.join(authzparent, 'authz'), 'w') as fp:
+ fp.write('[/]\n'
+ '* = rw\n')
# ### Support --repos-template
if self.opts.list_tests is not None:
@@ -280,6 +324,8 @@ class TestHarness:
cmdline.append('--fsfs-compression=%s' % self.opts.fsfs_compression)
if self.opts.fsfs_dir_deltification is not None:
cmdline.append('--fsfs-dir-deltification=%s' % self.opts.fsfs_dir_deltification)
+ if self.opts.allow_remote_http_connection is not None:
+ cmdline.append('--allow-remote-http-connection')
self.py_test_cmdline = cmdline
@@ -341,15 +387,15 @@ class TestHarness:
def execute(self, harness):
start_time = datetime.now()
- prog = subprocess.Popen(self._command_line(harness),
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- cwd=self.progdir)
-
- self.stdout_lines = prog.stdout.readlines()
- self.stderr_lines = prog.stderr.readlines()
- prog.wait()
- self.result = prog.returncode
+ with Popen(self._command_line(harness),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ cwd=self.progdir) as prog:
+
+ self.stdout_lines = prog.stdout.readlines()
+ self.stderr_lines = prog.stderr.readlines()
+ prog.wait()
+ self.result = prog.returncode
self.taken = datetime.now() - start_time
class CollectingThread(threading.Thread):
@@ -367,22 +413,20 @@ class TestHarness:
def _count_c_tests(self, progabs, progdir, progbase):
'Run a c test, escaping parameters as required.'
cmdline = [ progabs, '--list' ]
- prog = subprocess.Popen(cmdline, stdout=subprocess.PIPE, cwd=progdir)
- lines = prog.stdout.readlines()
- self.result.append(TestHarness.Job(len(lines) - 2, False, progabs,
- progdir, progbase))
- prog.wait()
+ with Popen(cmdline, stdout=subprocess.PIPE, cwd=progdir) as prog:
+ lines = prog.stdout.readlines()
+ self.result.append(TestHarness.Job(len(lines) - 2, False, progabs,
+ progdir, progbase))
def _count_py_tests(self, progabs, progdir, progbase):
'Run a c test, escaping parameters as required.'
cmdline = [ sys.executable, progabs, '--list' ]
- prog = subprocess.Popen(cmdline, stdout=subprocess.PIPE, cwd=progdir)
- lines = prog.stdout.readlines()
+ with Popen(cmdline, stdout=subprocess.PIPE, cwd=progdir) as prog:
+ lines = prog.stdout.readlines()
- for i in range(0, len(lines) - 2):
- self.result.append(TestHarness.Job(i + 1, True, progabs,
- progdir, progbase))
- prog.wait()
+ for i in range(0, len(lines) - 2):
+ self.result.append(TestHarness.Job(i + 1, True, progabs,
+ progdir, progbase))
def run(self):
"Run a single test. Return the test's exit code."
@@ -690,7 +734,7 @@ class TestHarness:
# Copy the truly interesting verbose logs to a separate file, for easier
# viewing.
if xpassed or failed_list:
- faillog = codecs.open(self.faillogfile, 'w', encoding="latin-1")
+ faillog = open_logfile(self.faillogfile, 'w')
last_start_lineno = None
last_start_re = re.compile('^(FAIL|SKIP|XFAIL|PASS|START|CLEANUP|END):')
for lineno, line in enumerate(log_lines):
@@ -710,9 +754,11 @@ class TestHarness:
# Summary.
if failed or xpassed or failed_list:
- print("SUMMARY: Some tests failed.\n")
+ summary = "Some tests failed"
else:
- print("SUMMARY: All tests successful.\n")
+ summary = "All tests successful"
+ print("Python version: %d.%d.%d." % sys.version_info[:3])
+ print("SUMMARY: %s\n" % summary)
self._close_log()
return failed
@@ -721,7 +767,7 @@ class TestHarness:
'Open the log file with the required MODE.'
if self.logfile:
self._close_log()
- self.log = codecs.open(self.logfile, mode, encoding="latin-1")
+ self.log = open_logfile(self.logfile, mode)
def _close_log(self):
'Close the log file.'
@@ -775,8 +821,8 @@ class TestHarness:
total = len(test_nums)
else:
total_cmdline = [cmdline[0], '--list']
- prog = subprocess.Popen(total_cmdline, stdout=subprocess.PIPE)
- lines = prog.stdout.readlines()
+ with Popen(total_cmdline, stdout=subprocess.PIPE) as prog:
+ lines = prog.stdout.readlines()
total = len(lines) - 2
# This has to be class-scoped for use in the progress_func()
@@ -792,23 +838,22 @@ class TestHarness:
self.dots_written = dots
tests_completed = 0
- prog = subprocess.Popen(cmdline, stdout=subprocess.PIPE,
- stderr=self.log)
- line = prog.stdout.readline()
- while line:
- line = ensure_str(line)
- if self._process_test_output_line(line):
- tests_completed += 1
- progress_func(tests_completed)
-
+ with Popen(cmdline, stdout=subprocess.PIPE, stderr=self.log) as prog:
line = prog.stdout.readline()
+ while line:
+ line = ensure_str(line)
+ if self._process_test_output_line(line):
+ tests_completed += 1
+ progress_func(tests_completed)
+
+ line = prog.stdout.readline()
+
+ # If we didn't run any tests, still print out the dots
+ if not tests_completed:
+ os.write(sys.stdout.fileno(), b'.' * dot_count)
- # If we didn't run any tests, still print out the dots
- if not tests_completed:
- os.write(sys.stdout.fileno(), b'.' * dot_count)
-
- prog.wait()
- return prog.returncode
+ prog.wait()
+ return prog.returncode
def _run_py_test(self, progabs, progdir, progbase, test_nums, dot_count):
'Run a python test, passing parameters as needed.'
@@ -816,24 +861,28 @@ class TestHarness:
if sys.version_info < (3, 0):
prog_mod = imp.load_module(progbase[:-3], open(progabs, 'r'), progabs,
('.py', 'U', imp.PY_SOURCE))
- else:
+ elif sys.version_info < (3, 5):
prog_mod = imp.load_module(progbase[:-3],
open(progabs, 'r', encoding="utf-8"),
progabs, ('.py', 'U', imp.PY_SOURCE))
+ else:
+ spec = importlib.util.spec_from_file_location(progbase[:-3], progabs)
+ prog_mod = importlib.util.module_from_spec(spec)
+ sys.modules[progbase[:-3]] = prog_mod
+ spec.loader.exec_module(prog_mod)
except:
print("\nError loading test (details in following traceback): " + progbase)
traceback.print_exc()
sys.exit(1)
# setup the output pipes
+ old_stdout = sys.stdout.fileno()
if self.log:
sys.stdout.flush()
sys.stderr.flush()
self.log.flush()
- old_stdout = os.dup(sys.stdout.fileno())
- old_stderr = os.dup(sys.stderr.fileno())
- os.dup2(self.log.fileno(), sys.stdout.fileno())
- os.dup2(self.log.fileno(), sys.stderr.fileno())
+ saved_stds = sys.stdout, sys.stderr
+ sys.stdout = sys.stderr = self.log
# These have to be class-scoped for use in the progress_func()
self.dots_written = 0
@@ -874,12 +923,8 @@ class TestHarness:
# restore some values
if self.log:
- sys.stdout.flush()
- sys.stderr.flush()
- os.dup2(old_stdout, sys.stdout.fileno())
- os.dup2(old_stderr, sys.stderr.fileno())
- os.close(old_stdout)
- os.close(old_stderr)
+ self.log.flush()
+ sys.stdout, sys.stderr = saved_stds
return failed
@@ -1033,6 +1078,8 @@ def create_parser():
help='Set compression type (for fsfs)')
parser.add_option('--fsfs-dir-deltification', action='store', type='str',
help='Set directory deltification option (for fsfs)')
+ parser.add_option('--allow-remote-http-connection', action='store_true',
+ help='Run tests that connect to remote HTTP(S) servers')
parser.set_defaults(set_log_level=None)
return parser