You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/10/15 10:52:18 UTC
svn commit: r1532250 [3/37] - in /subversion/branches/cache-server: ./
build/ build/ac-macros/ build/generator/ build/generator/swig/
build/generator/templates/ contrib/client-side/emacs/ contrib/hook-scripts/
contrib/server-side/fsfsfixer/ contrib/ser...
Modified: subversion/branches/cache-server/build/generator/gen_msvc_dsp.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/gen_msvc_dsp.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/gen_msvc_dsp.py (original)
+++ subversion/branches/cache-server/build/generator/gen_msvc_dsp.py Tue Oct 15 08:52:06 2013
@@ -82,7 +82,6 @@ class Generator(gen_win.WinGeneratorBase
'rootpath' : self.rootpath,
'platforms' : self.platforms,
'configs' : configs,
- 'includes' : self.get_win_includes(target),
'sources' : sources,
'default_platform' : self.platforms[0],
'default_config' : configs[0].name,
Modified: subversion/branches/cache-server/build/generator/gen_vcnet_vcproj.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/gen_vcnet_vcproj.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/gen_vcnet_vcproj.py (original)
+++ subversion/branches/cache-server/build/generator/gen_vcnet_vcproj.py Tue Oct 15 08:52:06 2013
@@ -38,6 +38,23 @@ class Generator(gen_win.WinGeneratorBase
def quote(self, str):
return '"%s"' % str
+ def gen_proj_names(self, install_targets):
+ "Generate project file names for the targets"
+
+ if float(self.vcproj_version) < 11.0:
+ gen_win.WinGeneratorBase.gen_proj_names(self, install_targets)
+ return
+
+ # With VS2012 we can assume that even the light versions
+ # support proper project nesting in the UI
+
+ for target in install_targets:
+ if target.msvc_name:
+ target.proj_name = target.msvc_name
+ continue
+
+ target.proj_name = target.name
+
def get_external_project(self, target, proj_ext):
"Link project files: prefer vcproj's, but if don't exist, try dsp's."
vcproj = gen_win.WinGeneratorBase.get_external_project(self, target,
@@ -100,7 +117,6 @@ class Generator(gen_win.WinGeneratorBase
'platforms' : self.platforms,
'config_type' : config_type,
'configs' : configs,
- 'includes' : self.get_win_includes(target),
'sources' : sources,
'default_platform' : self.platforms[0],
'default_config' : configs[0].name,
Modified: subversion/branches/cache-server/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/gen_win.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/gen_win.py (original)
+++ subversion/branches/cache-server/build/generator/gen_win.py Tue Oct 15 08:52:06 2013
@@ -38,6 +38,7 @@ import string
import generator.swig.header_wrappers
import generator.swig.checkout_swig_header
import generator.swig.external_runtime
+import gen_win_dependencies
if sys.version_info[0] >= 3:
# Python >=3.0
@@ -52,176 +53,7 @@ else:
import gen_base
import ezt
-
-class GeneratorBase(gen_base.GeneratorBase):
- """This intermediate base class exists to be instantiated by win-tests.py,
- in order to obtain information from build.conf and library paths without
- actually doing any generation."""
- _extension_map = {
- ('exe', 'target'): '.exe',
- ('exe', 'object'): '.obj',
- ('lib', 'target'): '.dll',
- ('lib', 'object'): '.obj',
- ('pyd', 'target'): '.pyd',
- ('pyd', 'object'): '.obj',
- }
-
- def parse_options(self, options):
- self.apr_path = 'apr'
- self.apr_util_path = 'apr-util'
- self.apr_iconv_path = 'apr-iconv'
- self.serf_path = None
- self.serf_lib = None
- self.bdb_path = 'db4-win32'
- self.httpd_path = None
- self.libintl_path = None
- self.zlib_path = 'zlib'
- self.openssl_path = None
- self.jdk_path = None
- self.junit_path = None
- self.swig_path = None
- self.vs_version = '2002'
- self.sln_version = '7.00'
- self.vcproj_version = '7.00'
- self.vcproj_extension = '.vcproj'
- self.sqlite_path = 'sqlite-amalgamation'
- self.skip_sections = { 'mod_dav_svn': None,
- 'mod_authz_svn': None,
- 'mod_dontdothat' : None,
- 'libsvn_auth_kwallet': None,
- 'libsvn_auth_gnome_keyring': None }
-
- # Instrumentation options
- self.disable_shared = None
- self.static_apr = None
- self.static_openssl = None
- self.instrument_apr_pools = None
- self.instrument_purify_quantify = None
- self.configure_apr_util = None
- self.sasl_path = None
-
- # NLS options
- self.enable_nls = None
-
- # ML (assembler) is disabled by default; use --enable-ml to detect
- self.enable_ml = None
-
- for opt, val in options:
- if opt == '--with-berkeley-db':
- self.bdb_path = val
- elif opt == '--with-apr':
- self.apr_path = val
- elif opt == '--with-apr-util':
- self.apr_util_path = val
- elif opt == '--with-apr-iconv':
- self.apr_iconv_path = val
- elif opt == '--with-serf':
- self.serf_path = val
- elif opt == '--with-httpd':
- self.httpd_path = val
- del self.skip_sections['mod_dav_svn']
- del self.skip_sections['mod_authz_svn']
- del self.skip_sections['mod_dontdothat']
- elif opt == '--with-libintl':
- self.libintl_path = val
- self.enable_nls = 1
- elif opt == '--with-jdk':
- self.jdk_path = val
- elif opt == '--with-junit':
- self.junit_path = val
- elif opt == '--with-zlib':
- self.zlib_path = val
- elif opt == '--with-swig':
- self.swig_path = val
- elif opt == '--with-sqlite':
- self.sqlite_path = val
- elif opt == '--with-sasl':
- self.sasl_path = val
- elif opt == '--with-openssl':
- self.openssl_path = val
- elif opt == '--enable-purify':
- self.instrument_purify_quantify = 1
- self.instrument_apr_pools = 1
- elif opt == '--enable-quantify':
- self.instrument_purify_quantify = 1
- elif opt == '--enable-pool-debug':
- self.instrument_apr_pools = 1
- elif opt == '--enable-nls':
- self.enable_nls = 1
- elif opt == '--enable-bdb-in-apr-util':
- self.configure_apr_util = 1
- elif opt == '--enable-ml':
- self.enable_ml = 1
- elif opt == '--disable-shared':
- self.disable_shared = 1
- elif opt == '--with-static-apr':
- self.static_apr = 1
- elif opt == '--with-static-openssl':
- self.static_openssl = 1
- elif opt == '--vsnet-version':
- if val == '2002' or re.match('7(\.\d+)?$', val):
- self.vs_version = '2002'
- self.sln_version = '7.00'
- self.vcproj_version = '7.00'
- self.vcproj_extension = '.vcproj'
- elif val == '2003' or re.match('8(\.\d+)?$', val):
- self.vs_version = '2003'
- self.sln_version = '8.00'
- self.vcproj_version = '7.10'
- self.vcproj_extension = '.vcproj'
- elif val == '2005' or re.match('9(\.\d+)?$', val):
- self.vs_version = '2005'
- self.sln_version = '9.00'
- self.vcproj_version = '8.00'
- self.vcproj_extension = '.vcproj'
- elif val == '2008' or re.match('10(\.\d+)?$', val):
- self.vs_version = '2008'
- self.sln_version = '10.00'
- self.vcproj_version = '9.00'
- self.vcproj_extension = '.vcproj'
- elif val == '2010':
- self.vs_version = '2010'
- self.sln_version = '11.00'
- self.vcproj_version = '10.0'
- self.vcproj_extension = '.vcxproj'
- elif val == '2012' or val == '11':
- self.vs_version = '2012'
- self.sln_version = '12.00'
- self.vcproj_version = '11.0'
- self.vcproj_extension = '.vcxproj'
- elif re.match('^1\d+$', val):
- self.vsversion = val
- self.sln_version = '12.00'
- self.vcproj_version = val + '.0'
- self.vcproj_extension = '.vcxproj'
- else:
- print('WARNING: Unknown VS.NET version "%s",'
- ' assuming "%s"\n' % (val, '7.00'))
-
-
- def __init__(self, fname, verfname, options):
-
- # parse (and save) the options that were passed to us
- self.parse_options(options)
-
- # Initialize parent
- gen_base.GeneratorBase.__init__(self, fname, verfname, options)
-
- # Find Berkeley DB
- self._find_bdb()
-
- def _find_bdb(self):
- "Find the Berkeley DB library and version"
- for ver in ("48", "47", "46", "45", "44", "43", "42", "41", "40"):
- lib = "libdb" + ver
- path = os.path.join(self.bdb_path, "lib")
- if os.path.exists(os.path.join(path, lib + ".lib")):
- self.bdb_lib = lib
- break
- else:
- self.bdb_lib = None
-
-class WinGeneratorBase(GeneratorBase):
+class WinGeneratorBase(gen_win_dependencies.GenDependenciesBase):
"Base class for all Windows project files generators"
def __init__(self, fname, verfname, options, subdir):
@@ -233,47 +65,33 @@ class WinGeneratorBase(GeneratorBase):
"""
# Initialize parent
- GeneratorBase.__init__(self, fname, verfname, options)
+ gen_win_dependencies.GenDependenciesBase.__init__(self, fname, verfname,
+ options, find_libs=False)
- if self.bdb_lib is not None:
- print("Found %s.lib in %s\n" % (self.bdb_lib, self.bdb_path))
- else:
- print("BDB not found, BDB fs will not be built\n")
+ # On Windows we create svn_private_config.h in the output directory since
+ # r1370526.
+ #
+ # Without this replacement all projects include a not-existing file,
+ # which makes the MSBuild calculation to see whether a project is changed
+ # far more expensive than necessary.
+ self.private_built_includes.append('$(Configuration)/svn_private_config.h')
+ self.private_built_includes.remove('subversion/svn_private_config.h')
if subdir == 'vcnet-vcproj':
print('Generating for Visual Studio %s\n' % self.vs_version)
- # Find the right Ruby include and libraries dirs and
- # library name to link SWIG bindings with
- self._find_ruby()
-
- # Find the right Perl library name to link SWIG bindings with
- self._find_perl()
-
- # Find the right Python include and libraries dirs for SWIG bindings
- self._find_python()
-
- # Find the installed SWIG version to adjust swig options
- self._find_swig()
+ self.find_libraries(True)
- # Find the installed Java Development Kit
- self._find_jdk()
+ # Print list of identified libraries
+ printed = []
+ for lib in sorted(self._libraries.values(), key = lambda s: s.name):
+ if lib.name in printed:
+ continue
+ printed.append(lib.name)
+ print('Found %s %s' % (lib.name, lib.version))
- # Find APR and APR-util version
- self._find_apr()
- self._find_apr_util()
-
- # Find Sqlite
- self._find_sqlite()
-
- # Look for ZLib and ML
- if self.zlib_path:
- self._find_zlib()
- self._find_ml()
-
- # Find serf and its dependencies
- if self.serf_path:
- self._find_serf()
+ if 'db' not in self._libraries:
+ print('BDB not found, BDB fs will not be built')
#Make some files for the installer so that we don't need to
#require sed or some other command to do it
@@ -297,7 +115,7 @@ class WinGeneratorBase(GeneratorBase):
os.makedirs(self.projfilesdir)
# Generate the build_zlib.bat file
- if self.zlib_path:
+ if self._libraries['zlib'].is_src:
data = {'zlib_path': os.path.relpath(self.zlib_path, self.projfilesdir),
'zlib_version': self.zlib_version,
'use_ml': self.have_ml and 1 or None}
@@ -305,16 +123,16 @@ class WinGeneratorBase(GeneratorBase):
self.write_with_template(bat, 'templates/build_zlib.ezt', data)
# Generate the build_locale.bat file
- pofiles = []
if self.enable_nls:
+ pofiles = []
for po in os.listdir(os.path.join('subversion', 'po')):
if fnmatch.fnmatch(po, '*.po'):
pofiles.append(POFile(po[:-3]))
- data = {'pofiles': pofiles}
- self.write_with_template(os.path.join(self.projfilesdir,
- 'build_locale.bat'),
- 'templates/build_locale.ezt', data)
+ data = {'pofiles': pofiles}
+ self.write_with_template(os.path.join(self.projfilesdir,
+ 'build_locale.bat'),
+ 'templates/build_locale.ezt', data)
#Here we can add additional platforms to compile for
self.platforms = ['Win32']
@@ -327,7 +145,7 @@ class WinGeneratorBase(GeneratorBase):
#Here we can add additional modes to compile for
self.configs = ['Debug','Release']
- if self.swig_libdir:
+ if 'swig' in self._libraries:
# Generate SWIG header wrappers and external runtime
for swig in (generator.swig.header_wrappers,
generator.swig.checkout_swig_header,
@@ -336,6 +154,11 @@ class WinGeneratorBase(GeneratorBase):
else:
print("%s not found; skipping SWIG file generation..." % self.swig_exe)
+ def errno_filter(self, codes):
+ "Callback for gen_base.write_errno_table()."
+ # Filter out python's SOC* codes, which alias the windows API names.
+ return set(filter(lambda code: not (10000 <= code <= 10100), codes))
+
def find_rootpath(self):
"Gets the root path as understand by the project system"
return os.path.relpath('.', self.projfilesdir) + "\\"
@@ -375,29 +198,38 @@ class WinGeneratorBase(GeneratorBase):
install_targets = self.graph.get_all_sources(gen_base.DT_INSTALL) \
+ self.projects
+ install_targets = [x for x in install_targets if not x.when or
+ x.when in self._windows_when]
+
# Don't create projects for scripts
install_targets = [x for x in install_targets if not isinstance(x, gen_base.TargetScript)]
+ if not self.enable_nls:
+ install_targets = [x for x in install_targets if x.name != 'locale']
+
# Drop the libsvn_fs_base target and tests if we don't have BDB
- if not self.bdb_lib:
+ if 'db' not in self._libraries:
install_targets = [x for x in install_targets if x.name != 'libsvn_fs_base']
install_targets = [x for x in install_targets if not (isinstance(x, gen_base.TargetExe)
and x.install == 'bdb-test')]
- # Drop the serf target if we don't have both serf and openssl
- if not self.serf_lib:
- install_targets = [x for x in install_targets if x.name != 'serf']
+ # Drop the ra_serf target if we don't have serf
+ if 'serf' not in self._libraries:
install_targets = [x for x in install_targets if x.name != 'libsvn_ra_serf']
+ # Drop the serf target if we don't build serf ourselves
+ if 'serf' not in self._libraries or not self._libraries['serf'].is_src:
+ install_targets = [x for x in install_targets if x.name != 'serf']
- # Drop the swig targets if we don't have swig
- if not self.swig_path and not self.swig_libdir:
- install_targets = [x for x in install_targets
- if not (isinstance(x, gen_base.TargetSWIG)
- or isinstance(x, gen_base.TargetSWIGLib)
- or isinstance(x, gen_base.TargetSWIGProject))]
+ # Drop the swig targets if we don't have swig or language support
+ install_targets = [x for x in install_targets
+ if (not (isinstance(x, gen_base.TargetSWIG)
+ or isinstance(x, gen_base.TargetSWIGLib)
+ or isinstance(x, gen_base.TargetSWIGProject))
+ or (x.lang in self._libraries
+ and 'swig' in self._libraries))]
# Drop the Java targets if we don't have a JDK
- if not self.jdk_path:
+ if 'java_sdk' not in self._libraries:
install_targets = [x for x in install_targets
if not (isinstance(x, gen_base.TargetJava)
or isinstance(x, gen_base.TargetJavaHeaders)
@@ -405,6 +237,12 @@ class WinGeneratorBase(GeneratorBase):
or x.name == '__JAVAHL_TESTS__'
or x.name == 'libsvnjavahl')]
+ # If we don't build 'ZLib' ourself, remove this target and all the dependencies on it
+ if not self._libraries['zlib'].is_src:
+ install_targets = [x for x in install_targets if x.name != 'zlib']
+ # TODO: Fixup dependencies
+
+ # Create DLL targets for libraries
dll_targets = []
for target in install_targets:
if isinstance(target, gen_base.TargetLib):
@@ -412,11 +250,26 @@ class WinGeneratorBase(GeneratorBase):
install_targets.append(self.create_fake_target(target))
if target.msvc_export:
if self.disable_shared:
- target.msvc_static = True
+ target.disable_shared()
else:
dll_targets.append(self.create_dll_target(target))
install_targets.extend(dll_targets)
+ # Fix up targets that can't be linked to libraries
+ if not self.disable_shared:
+ for target in install_targets:
+ if isinstance(target, gen_base.TargetExe) and target.msvc_force_static:
+
+ # Make direct dependencies of all the indirect dependencies
+ linked_deps = {}
+ self.get_linked_win_depends(target, linked_deps)
+
+ for lk in linked_deps.keys():
+ if not isinstance(lk, gen_base.TargetLib) or not lk.msvc_export:
+ self.graph.add(gen_base.DT_LINK, target.name, lk)
+ else:
+ self.graph.remove(gen_base.DT_LINK, target.name, lk)
+
for target in install_targets:
target.project_guid = self.makeguid(target.name)
@@ -467,9 +320,7 @@ class WinGeneratorBase(GeneratorBase):
# against the static libraries because they sometimes access internal
# library functions.
- # ### The magic behavior for 'test' in a name and 'entries-dump' should
- # ### move to another option in build.conf
- if dep in deps[key] and key.find("test") == -1 and key != 'entries-dump':
+ if dep in deps[key]:
deps[key].remove(dep)
deps[key].append(target)
@@ -488,6 +339,9 @@ class WinGeneratorBase(GeneratorBase):
defines=self.get_win_defines(target, cfg),
libdirs=self.get_win_lib_dirs(target, cfg),
libs=self.get_win_libs(target, cfg),
+ includes=self.get_win_includes(target, cfg),
+ forced_include_files
+ =self.get_win_forced_includes(target, cfg),
))
return configs
@@ -508,6 +362,7 @@ class WinGeneratorBase(GeneratorBase):
cbuild = None
ctarget = None
cdesc = None
+ cignore = None
if isinstance(target, gen_base.TargetJavaHeaders):
classes = self.path(target.classes)
if self.junit_path is not None:
@@ -542,9 +397,18 @@ class WinGeneratorBase(GeneratorBase):
if quote_path and '-' in rsrc:
rsrc = '"%s"' % rsrc
+ if (not isinstance(source, gen_base.SourceFile)
+ and cbuild is None and ctarget is None and cdesc is None
+ and source in self._excluded_from_build):
+ # Make sure include dependencies are excluded from the build.
+ # This is an 'orrible 'ack that relies on the source being a
+ # string if it's an include dependency, or a SourceFile object
+ # otherwise.
+ cignore = 'yes'
+
sources.append(ProjectItem(path=rsrc, reldir=reldir, user_deps=[],
custom_build=cbuild, custom_target=ctarget,
- custom_desc=cdesc,
+ custom_desc=cdesc, ignored = cignore,
extension=os.path.splitext(rsrc)[1]))
if isinstance(target, gen_base.TargetJavaClasses) and target.jar:
@@ -665,8 +529,7 @@ class WinGeneratorBase(GeneratorBase):
return self.get_output_dir(target)
def get_def_file(self, target):
- if isinstance(target, gen_base.TargetLib) and target.msvc_export \
- and not self.disable_shared:
+ if isinstance(target, gen_base.TargetLib) and target.msvc_export:
return target.name + ".def"
return None
@@ -696,7 +559,7 @@ class WinGeneratorBase(GeneratorBase):
and target.external_project):
return None
- if target.external_project[:5] == 'serf/' and self.serf_lib:
+ if target.external_project[:5] == 'serf/' and 'serf' in self._libraries:
path = self.serf_path + target.external_project[4:]
elif target.external_project.find('/') != -1:
path = target.external_project
@@ -719,8 +582,8 @@ class WinGeneratorBase(GeneratorBase):
if self.enable_nls and name == '__ALL__':
depends.extend(self.sections['locale'].get_targets())
- # Build ZLib as a dependency of Serf if we have it
- if self.zlib_path and name == 'serf':
+ # Make ZLib a dependency of serf if we build the zlib src
+ if name == 'serf' and self._libraries['zlib'].is_src:
depends.extend(self.sections['zlib'].get_targets())
# To set the correct build order of the JavaHL targets, the javahl-javah
@@ -742,7 +605,9 @@ class WinGeneratorBase(GeneratorBase):
dep_dict = {}
- if isinstance(target, gen_base.TargetLib) and target.msvc_static:
+ if mode == FILTER_EXTERNALLIBS:
+ self.get_externallib_depends(target, dep_dict)
+ elif isinstance(target, gen_base.TargetLib) and target.msvc_static:
self.get_static_win_depends(target, dep_dict)
else:
self.get_linked_win_depends(target, dep_dict)
@@ -757,6 +622,10 @@ class WinGeneratorBase(GeneratorBase):
for dep, (is_proj, is_lib, is_static) in dep_dict.items():
if is_static or (is_lib and not is_proj):
deps.append(dep)
+ elif mode == FILTER_EXTERNALLIBS:
+ for dep, (is_proj, is_lib, is_static) in dep_dict.items():
+ if is_static or (is_lib and not is_proj):
+ deps.append(dep)
else:
raise NotImplementedError
@@ -822,7 +691,7 @@ class WinGeneratorBase(GeneratorBase):
# every dll dependency we first check to see if its corresponding
# static library is already in the list of dependencies. If it is,
# we don't add the dll to the list.
- if is_lib and dep.msvc_export and not self.disable_shared:
+ if is_lib and dep.msvc_export:
static_dep = self.graph.get_sources(gen_base.DT_LINK, dep.name)[0]
if static_dep in deps:
continue
@@ -840,6 +709,21 @@ class WinGeneratorBase(GeneratorBase):
elif is_static:
self.get_linked_win_depends(dep, deps, 1)
+ # and recurse over the external library dependencies for swig libraries,
+ # to include the language runtime
+ elif isinstance(dep, gen_base.TargetSWIGLib):
+ self.get_externallib_depends(dep, deps)
+
+ def get_externallib_depends(self, target, deps):
+ """Find externallib dependencies for a project"""
+
+ direct_deps = self.get_direct_depends(target)
+ for dep, dep_kind in direct_deps:
+ self.get_externallib_depends(dep, deps)
+
+ if isinstance(target, gen_base.TargetLinked) and dep.external_lib:
+ deps[dep] = dep_kind
+
def get_win_defines(self, target, cfg):
"Return the list of defines for target"
@@ -848,190 +732,133 @@ class WinGeneratorBase(GeneratorBase):
"_CRT_NONSTDC_NO_DEPRECATE=",
"_CRT_SECURE_NO_WARNINGS="]
- if self.sqlite_inline:
- fakedefines.append("SVN_SQLITE_INLINE")
+ if cfg == 'Debug':
+ fakedefines.extend(["_DEBUG","SVN_DEBUG"])
+ elif cfg == 'Release':
+ fakedefines.append("NDEBUG")
if isinstance(target, gen_base.TargetApacheMod):
if target.name == 'mod_dav_svn':
fakedefines.extend(["AP_DECLARE_EXPORT"])
- if target.name.find('ruby') == -1:
- fakedefines.append("snprintf=_snprintf")
-
if isinstance(target, gen_base.TargetSWIG):
fakedefines.append("SWIG_GLOBAL")
- # Expect rb_errinfo() to be avilable in Ruby 1.9+,
- # rather than ruby_errinfo.
- if (self.ruby_major_version > 1 or self.ruby_minor_version > 8):
- fakedefines.extend(["HAVE_RB_ERRINFO"])
-
- if cfg == 'Debug':
- fakedefines.extend(["_DEBUG","SVN_DEBUG"])
- elif cfg == 'Release':
- fakedefines.append("NDEBUG")
+ for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
- if self.static_apr:
- fakedefines.extend(["APR_DECLARE_STATIC", "APU_DECLARE_STATIC"])
+ if external_lib in self._libraries:
+ lib = self._libraries[external_lib]
- # XXX: Check if db is present, and if so, let apr-util know
- # XXX: This is a hack until the apr build system is improved to
- # XXX: know these things for itself.
- if self.bdb_lib:
- fakedefines.append("APU_HAVE_DB=1")
- fakedefines.append("SVN_LIBSVN_FS_LINKS_FS_BASE=1")
+ if lib.defines:
+ fakedefines.extend(lib.defines)
# check if they wanted nls
if self.enable_nls:
fakedefines.append("ENABLE_NLS")
- if self.serf_lib:
- fakedefines.append("SVN_HAVE_SERF")
- fakedefines.append("SVN_LIBSVN_CLIENT_LINKS_RA_SERF")
-
# check we have sasl
- if self.sasl_path:
- fakedefines.append("SVN_HAVE_SASL")
-
if target.name.endswith('svn_subr'):
fakedefines.append("SVN_USE_WIN32_CRASHHANDLER")
- # use static linking to Expat
- fakedefines.append("XML_STATIC")
-
return fakedefines
- def get_win_includes(self, target):
+ def get_win_includes(self, target, cfg='Release'):
"Return the list of include directories for target"
- fakeincludes = [ self.path("subversion/include"),
- self.path("subversion"),
- self.apath(self.apr_path, "include"),
- self.apath(self.apr_util_path, "include") ]
+ fakeincludes = [ "subversion/include",
+ "subversion" ]
+
+ for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
+
+ if external_lib in self._libraries:
+ lib = self._libraries[external_lib]
+
+ fakeincludes.extend(lib.include_dirs)
if target.name == 'mod_authz_svn':
- fakeincludes.extend([ self.apath(self.httpd_path, "modules/aaa") ])
+ fakeincludes.extend([ os.path.join(self.httpd_path, "modules/aaa") ])
if isinstance(target, gen_base.TargetApacheMod):
- fakeincludes.extend([ self.apath(self.apr_util_path, "xml/expat/lib"),
- self.apath(self.httpd_path, "include"),
- self.apath(self.bdb_path, "include") ])
- elif isinstance(target, gen_base.TargetSWIG):
+ fakeincludes.extend([ os.path.join(self.httpd_path, "include") ])
+ elif (isinstance(target, gen_base.TargetSWIG)
+ or isinstance(target, gen_base.TargetSWIGLib)):
util_includes = "subversion/bindings/swig/%s/libsvn_swig_%s" \
% (target.lang,
gen_base.lang_utillib_suffix[target.lang])
- fakeincludes.extend([ self.path("subversion/bindings/swig"),
- self.path("subversion/bindings/swig/proxy"),
- self.path("subversion/bindings/swig/include"),
- self.path(util_includes) ])
- else:
- fakeincludes.extend([ self.apath(self.apr_util_path, "xml/expat/lib"),
- self.path("subversion/bindings/swig/proxy"),
- self.apath(self.bdb_path, "include") ])
-
- if self.libintl_path:
- fakeincludes.append(self.apath(self.libintl_path, 'inc'))
-
- if self.serf_lib:
- fakeincludes.append(self.apath(self.serf_path))
-
- if self.swig_libdir \
- and (isinstance(target, gen_base.TargetSWIG)
- or isinstance(target, gen_base.TargetSWIGLib)):
- if self.swig_vernum >= 103028:
- fakeincludes.append(self.apath(self.swig_libdir, target.lang))
- if target.lang == 'perl':
- # At least swigwin 1.3.38+ uses perl5 as directory name. Just add it
- # to the list to make sure we don't break old versions
- fakeincludes.append(self.apath(self.swig_libdir, 'perl5'))
- else:
- fakeincludes.append(self.swig_libdir)
- if target.lang == "perl":
- fakeincludes.extend(self.perl_includes)
- if target.lang == "python":
- fakeincludes.extend(self.python_includes)
- if target.lang == "ruby":
- fakeincludes.extend(self.ruby_includes)
+ fakeincludes.append(util_includes)
- fakeincludes.append(self.apath(self.zlib_path))
+ if (isinstance(target, gen_base.TargetSWIG)
+ or isinstance(target, gen_base.TargetSWIGLib)):
- if self.sqlite_inline:
- fakeincludes.append(self.apath(self.sqlite_path))
- else:
- fakeincludes.append(self.apath(self.sqlite_path, 'inc'))
+ # Projects aren't generated unless we have swig
+ assert self.swig_libdir
- if self.sasl_path:
- fakeincludes.append(self.apath(self.sasl_path, 'include'))
+ if target.lang == "perl" and self.swig_version >= (1, 3, 28):
+ # At least swigwin 1.3.38+ uses perl5 as directory name.
+ lang_subdir = 'perl5'
+ else:
+ lang_subdir = target.lang
- if target.name == "libsvnjavahl" and self.jdk_path:
- fakeincludes.append(os.path.join(self.jdk_path, 'include'))
- fakeincludes.append(os.path.join(self.jdk_path, 'include', 'win32'))
+ # 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 target.name.find('cxxhl') != -1:
- fakeincludes.append(self.path("subversion/bindings/cxxhl/include"))
+ if 'cxxhl' in target.name:
+ fakeincludes.append("subversion/bindings/cxxhl/include")
- return fakeincludes
+ return gen_base.unique(map(self.apath, fakeincludes))
def get_win_lib_dirs(self, target, cfg):
"Return the list of library directories for target"
- expatlibcfg = cfg.replace("Debug", "LibD").replace("Release", "LibR")
- if self.static_apr:
- libcfg = expatlibcfg
- else:
- libcfg = cfg
+ debug = (cfg == 'Debug')
+
+ if not isinstance(target, gen_base.TargetLinked):
+ return []
+
+ if isinstance(target, gen_base.TargetLib) and target.msvc_static:
+ return []
- fakelibdirs = [ self.apath(self.bdb_path, "lib"),
- self.apath(self.zlib_path),
- ]
-
- if not self.sqlite_inline:
- fakelibdirs.append(self.apath(self.sqlite_path, "lib"))
-
- if self.sasl_path:
- fakelibdirs.append(self.apath(self.sasl_path, "lib"))
- if self.serf_lib:
- fakelibdirs.append(self.apath(msvc_path_join(self.serf_path, cfg)))
-
- fakelibdirs.append(self.apath(self.apr_path, libcfg))
- fakelibdirs.append(self.apath(self.apr_util_path, libcfg))
- fakelibdirs.append(self.apath(self.apr_util_path, 'xml', 'expat',
- 'lib', expatlibcfg))
+ fakelibdirs = []
+
+ for dep in self.get_win_depends(target, FILTER_LIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
+
+ if external_lib not in self._libraries:
+ continue
+
+ lib = self._libraries[external_lib]
+
+ if debug and lib.debug_lib_dir:
+ lib_dir = self.apath(lib.debug_lib_dir)
+ elif lib.lib_dir:
+ lib_dir = self.apath(lib.lib_dir)
+ else:
+ continue # Dependency without library (E.g. JDK)
+
+ fakelibdirs.append(lib_dir)
if isinstance(target, gen_base.TargetApacheMod):
fakelibdirs.append(self.apath(self.httpd_path, cfg))
if target.name == 'mod_dav_svn':
fakelibdirs.append(self.apath(self.httpd_path, "modules/dav/main",
cfg))
- if self.swig_libdir \
- and (isinstance(target, gen_base.TargetSWIG)
- or isinstance(target, gen_base.TargetSWIGLib)):
- if target.lang == "perl" and self.perl_libdir:
- fakelibdirs.append(self.perl_libdir)
- if target.lang == "python" and self.python_libdir:
- fakelibdirs.append(self.python_libdir)
- if target.lang == "ruby" and self.ruby_libdir:
- fakelibdirs.append(self.ruby_libdir)
- return fakelibdirs
+ return gen_base.unique(fakelibdirs)
def get_win_libs(self, target, cfg):
"Return the list of external libraries needed for target"
- dblib = None
- if self.bdb_lib:
- dblib = self.bdb_lib+(cfg == 'Debug' and 'd.lib' or '.lib')
-
- if self.serf_lib:
- if self.serf_ver_maj != 0:
- serflib = 'serf-%d.lib' % self.serf_ver_maj
- else:
- serflib = 'serf.lib'
-
- zlib = (cfg == 'Debug' and 'zlibstatD.lib' or 'zlibstat.lib')
- sasllib = None
- if self.sasl_path:
- sasllib = 'libsasl.lib'
+ debug = (cfg == 'Debug')
if not isinstance(target, gen_base.TargetLinked):
return []
@@ -1040,50 +867,30 @@ class WinGeneratorBase(GeneratorBase):
return []
nondeplibs = target.msvc_libs[:]
- nondeplibs.append(zlib)
- if self.enable_nls:
- if self.libintl_path:
- nondeplibs.append(self.apath(self.libintl_path,
- 'lib', 'intl3_svn.lib'))
- else:
- nondeplibs.append('intl3_svn.lib')
if isinstance(target, gen_base.TargetExe):
nondeplibs.append('setargv.obj')
- if ((isinstance(target, gen_base.TargetSWIG)
- or isinstance(target, gen_base.TargetSWIGLib))
- and target.lang == 'perl'):
- nondeplibs.append(self.perl_lib)
-
- if ((isinstance(target, gen_base.TargetSWIG)
- or isinstance(target, gen_base.TargetSWIGLib))
- and target.lang == 'ruby'):
- nondeplibs.append(self.ruby_lib)
-
for dep in self.get_win_depends(target, FILTER_LIBS):
nondeplibs.extend(dep.msvc_libs)
- if dep.external_lib == '$(SVN_DB_LIBS)':
- nondeplibs.append(dblib)
-
- if dep.external_lib == '$(SVN_SQLITE_LIBS)' and not self.sqlite_inline:
- nondeplibs.append('sqlite3.lib')
-
- if self.serf_lib and dep.external_lib == '$(SVN_SERF_LIBS)':
- nondeplibs.append(serflib)
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
- if dep.external_lib == '$(SVN_SASL_LIBS)':
- nondeplibs.append(sasllib)
+ external_lib = elib.lower()
- if dep.external_lib == '$(SVN_APR_LIBS)':
- nondeplibs.append(self.apr_lib)
+ if external_lib not in self._libraries:
+ if external_lib not in self._optional_libraries:
+ print('Warning: Using undeclared dependency \'$(SVN_%s_LIBS)\'.'
+ % (elib,))
+ continue
- if dep.external_lib == '$(SVN_APRUTIL_LIBS)':
- nondeplibs.append(self.aprutil_lib)
+ lib = self._libraries[external_lib]
- if dep.external_lib == '$(SVN_XML_LIBS)':
- nondeplibs.append('xml.lib')
+ if debug:
+ nondeplibs.append(lib.debug_lib_name)
+ else:
+ nondeplibs.append(lib.lib_name)
return gen_base.unique(nondeplibs)
@@ -1111,21 +918,23 @@ class WinGeneratorBase(GeneratorBase):
return list(sources.values())
- def write_file_if_changed(self, fname, new_contents):
- """Rewrite the file if new_contents are different than its current content.
+ def get_win_forced_includes(self, target, cfg):
+ """Return a list of include files that need to be included before any
+ other header in every c/c++ file"""
- If you have your windows projects open and generate the projects
- it's not a small thing for windows to re-read all projects so
- only update those that have changed.
- """
+ fakeincludes = []
+
+ for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
+
+ if external_lib in self._libraries:
+ lib = self._libraries[external_lib]
- try:
- old_contents = open(fname, 'rb').read()
- except IOError:
- old_contents = None
- if old_contents != new_contents:
- open(fname, 'wb').write(new_contents)
- print("Wrote: %s" % fname)
+ fakeincludes.extend(lib.forced_includes)
+
+ return gen_base.unique(fakeincludes)
def write_with_template(self, fname, tname, data):
fout = StringIO()
@@ -1136,7 +945,7 @@ class WinGeneratorBase(GeneratorBase):
self.write_file_if_changed(fname, fout.getvalue())
def write_zlib_project_file(self, name):
- if not self.zlib_path:
+ if not self._libraries['zlib'].is_src:
return
zlib_path = os.path.abspath(self.zlib_path)
zlib_sources = map(lambda x : os.path.relpath(x, self.projfilesdir),
@@ -1159,8 +968,13 @@ class WinGeneratorBase(GeneratorBase):
))
def write_serf_project_file(self, name):
- if not self.serf_lib:
+ if 'serf' not in self._libraries:
return
+
+ serf = self._libraries['serf']
+
+ if not serf.is_src:
+ return # Using an installed library
serf_path = os.path.abspath(self.serf_path)
serf_sources = map(lambda x : os.path.relpath(x, self.serf_path),
@@ -1172,10 +986,6 @@ class WinGeneratorBase(GeneratorBase):
glob.glob(os.path.join(serf_path, '*.h'))
+ glob.glob(os.path.join(serf_path, 'auth', '*.h'))
+ glob.glob(os.path.join(serf_path, 'buckets', '*.h')))
- if self.serf_ver_maj != 0:
- serflib = 'serf-%d.lib' % self.serf_ver_maj
- else:
- serflib = 'serf.lib'
apr_static = self.static_apr and 'APR_STATIC=1' or ''
openssl_static = self.static_openssl and 'OPENSSL_STATIC=1' or ''
@@ -1193,7 +1003,7 @@ class WinGeneratorBase(GeneratorBase):
('project_guid', self.makeguid('serf')),
('apr_static', apr_static),
('openssl_static', openssl_static),
- ('serf_lib', serflib),
+ ('serf_lib', serf.lib_name),
))
def move_proj_file(self, path, name, params=()):
@@ -1217,451 +1027,17 @@ class WinGeneratorBase(GeneratorBase):
raise NotImplementedError
- def _find_perl(self):
- "Find the right perl library name to link swig bindings with"
- self.perl_includes = []
- self.perl_libdir = None
- fp = os.popen('perl -MConfig -e ' + escape_shell_arg(
- 'print "$Config{PERL_REVISION}$Config{PERL_VERSION}"'), 'r')
- try:
- line = fp.readline()
- if line:
- msg = 'Found installed perl version number.'
- self.perl_lib = 'perl' + line.rstrip() + '.lib'
- else:
- msg = 'Could not detect perl version.'
- self.perl_lib = 'perl56.lib'
- print('%s\n Perl bindings will be linked with %s\n'
- % (msg, self.perl_lib))
- finally:
- fp.close()
-
- fp = os.popen('perl -MConfig -e ' + escape_shell_arg(
- 'print $Config{archlib}'), 'r')
- try:
- line = fp.readline()
- if line:
- self.perl_libdir = os.path.join(line, 'CORE')
- self.perl_includes = [os.path.join(line, 'CORE')]
- finally:
- fp.close()
-
- def _find_ruby(self):
- "Find the right Ruby library name to link swig bindings with"
- self.ruby_includes = []
- self.ruby_libdir = None
- self.ruby_version = None
- self.ruby_major_version = None
- self.ruby_minor_version = None
- proc = os.popen('ruby -rrbconfig -e ' + escape_shell_arg(
- "puts Config::CONFIG['ruby_version'];"
- "puts Config::CONFIG['LIBRUBY'];"
- "puts Config::CONFIG['archdir'];"
- "puts Config::CONFIG['libdir'];"), 'r')
- try:
- rubyver = proc.readline()[:-1]
- if rubyver:
- self.ruby_version = rubyver
- self.ruby_major_version = string.atoi(self.ruby_version[0])
- self.ruby_minor_version = string.atoi(self.ruby_version[2])
- libruby = proc.readline()[:-1]
- if libruby:
- msg = 'Found installed ruby %s' % rubyver
- self.ruby_lib = libruby
- self.ruby_includes.append(proc.readline()[:-1])
- self.ruby_libdir = proc.readline()[:-1]
- else:
- msg = 'Could not detect Ruby version, assuming 1.8.'
- self.ruby_version = "1.8"
- self.ruby_major_version = 1
- self.ruby_minor_version = 8
- self.ruby_lib = 'msvcrt-ruby18.lib'
- print('%s\n Ruby bindings will be linked with %s\n'
- % (msg, self.ruby_lib))
- finally:
- proc.close()
-
- def _find_python(self):
- "Find the appropriate options for creating SWIG-based Python modules"
- self.python_includes = []
- self.python_libdir = ""
- try:
- from distutils import sysconfig
- inc = sysconfig.get_python_inc()
- plat = sysconfig.get_python_inc(plat_specific=1)
- self.python_includes.append(inc)
- if inc != plat:
- self.python_includes.append(plat)
- self.python_libdir = self.apath(sysconfig.PREFIX, "libs")
- except ImportError:
- pass
-
- def _find_jdk(self):
- if not self.jdk_path:
- jdk_ver = None
- try:
- try:
- # Python >=3.0
- import winreg
- except ImportError:
- # Python <3.0
- import _winreg as winreg
- key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
- r"SOFTWARE\JavaSoft\Java Development Kit")
- # Find the newest JDK version.
- num_values = winreg.QueryInfoKey(key)[1]
- for i in range(num_values):
- (name, value, key_type) = winreg.EnumValue(key, i)
- if name == "CurrentVersion":
- jdk_ver = value
- break
-
- # Find the JDK path.
- if jdk_ver is not None:
- key = winreg.OpenKey(key, jdk_ver)
- num_values = winreg.QueryInfoKey(key)[1]
- for i in range(num_values):
- (name, value, key_type) = winreg.EnumValue(key, i)
- if name == "JavaHome":
- self.jdk_path = value
- break
- winreg.CloseKey(key)
- except (ImportError, EnvironmentError):
- pass
- if self.jdk_path:
- print("Found JDK version %s in %s\n" % (jdk_ver, self.jdk_path))
- else:
- print("Using JDK in %s\n" % (self.jdk_path))
-
- def _find_swig(self):
- # Require 1.3.24. If not found, assume 1.3.25.
- default_version = '1.3.25'
- minimum_version = '1.3.24'
- vernum = 103025
- minimum_vernum = 103024
- libdir = ''
-
- if self.swig_path is not None:
- self.swig_exe = os.path.abspath(os.path.join(self.swig_path, 'swig'))
- else:
- self.swig_exe = 'swig'
-
- try:
- outfp = subprocess.Popen([self.swig_exe, '-version'], stdout=subprocess.PIPE, universal_newlines=True).stdout
- txt = outfp.read()
- if txt:
- vermatch = re.compile(r'^SWIG\ Version\ (\d+)\.(\d+)\.(\d+)$', re.M) \
- .search(txt)
- else:
- vermatch = None
-
- if vermatch:
- version = tuple(map(int, vermatch.groups()))
- # build/ac-macros/swig.m4 explains the next incantation
- vernum = int('%d%02d%03d' % version)
- print('Found installed SWIG version %d.%d.%d\n' % version)
- if vernum < minimum_vernum:
- print('WARNING: Subversion requires version %s\n'
- % minimum_version)
-
- libdir = self._find_swig_libdir()
- else:
- print('Could not find installed SWIG,'
- ' assuming version %s\n' % default_version)
- self.swig_libdir = ''
- outfp.close()
- except OSError:
- print('Could not find installed SWIG,'
- ' assuming version %s\n' % default_version)
- self.swig_libdir = ''
-
- self.swig_vernum = vernum
- self.swig_libdir = libdir
-
- def _find_swig_libdir(self):
- fp = os.popen(self.swig_exe + ' -swiglib', 'r')
- try:
- libdir = fp.readline().rstrip()
- if libdir:
- print('Using SWIG library directory %s\n' % libdir)
- return libdir
- else:
- print('WARNING: could not find SWIG library directory\n')
- finally:
- fp.close()
- return ''
-
- def _find_ml(self):
- "Check if the ML assembler is in the path"
- if not self.enable_ml:
- self.have_ml = 0
- return
- fp = os.popen('ml /help', 'r')
- try:
- line = fp.readline()
- if line:
- msg = 'Found ML, ZLib build will use ASM sources'
- self.have_ml = 1
- else:
- msg = 'Could not find ML, ZLib build will not use ASM sources'
- self.have_ml = 0
- print('%s\n' % (msg,))
- finally:
- fp.close()
-
- def _get_serf_version(self):
- "Retrieves the serf version from serf.h"
-
- # shouldn't be called unless serf is there
- assert self.serf_path and os.path.exists(self.serf_path)
-
- self.serf_ver_maj = None
- self.serf_ver_min = None
- self.serf_ver_patch = None
-
- # serf.h should be present
- if not os.path.exists(os.path.join(self.serf_path, 'serf.h')):
- return None, None, None
-
- txt = open(os.path.join(self.serf_path, 'serf.h')).read()
-
- maj_match = re.search(r'SERF_MAJOR_VERSION\s+(\d+)', txt)
- min_match = re.search(r'SERF_MINOR_VERSION\s+(\d+)', txt)
- patch_match = re.search(r'SERF_PATCH_VERSION\s+(\d+)', txt)
- if maj_match:
- self.serf_ver_maj = int(maj_match.group(1))
- if min_match:
- self.serf_ver_min = int(min_match.group(1))
- if patch_match:
- self.serf_ver_patch = int(patch_match.group(1))
-
- return self.serf_ver_maj, self.serf_ver_min, self.serf_ver_patch
-
- def _find_serf(self):
- "Check if serf and its dependencies are available"
-
- minimal_serf_version = (1, 2, 0)
- self.serf_lib = None
- if self.serf_path and os.path.exists(self.serf_path):
- if self.openssl_path and os.path.exists(self.openssl_path):
- self.serf_lib = 'serf'
- version = self._get_serf_version()
- if None in version:
- msg = 'Unknown serf version found; but, will try to build ' \
- 'ra_serf.'
- else:
- self.serf_ver = '.'.join(str(v) for v in version)
- if version < minimal_serf_version:
- self.serf_lib = None
- msg = 'Found serf %s, but >= %s is required. ra_serf will not be built.\n' % \
- (self.serf_ver, '.'.join(str(v) for v in minimal_serf_version))
- else:
- msg = 'Found serf %s' % self.serf_ver
- print(msg)
- else:
- print('openssl not found, ra_serf will not be built\n')
- else:
- print('serf not found, ra_serf will not be built\n')
-
- def _find_apr(self):
- "Find the APR library and version"
-
- minimal_apr_version = (0, 9, 0)
-
- version_file_path = os.path.join(self.apr_path, 'include',
- 'apr_version.h')
-
- if not os.path.exists(version_file_path):
- sys.stderr.write("ERROR: '%s' not found.\n" % version_file_path);
- sys.stderr.write("Use '--with-apr' option to configure APR location.\n");
- sys.exit(1)
-
- fp = open(version_file_path)
- txt = fp.read()
- fp.close()
-
- vermatch = re.search(r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)', txt, re.M)
- major = int(vermatch.group(1))
-
- vermatch = re.search(r'^\s*#define\s+APR_MINOR_VERSION\s+(\d+)', txt, re.M)
- minor = int(vermatch.group(1))
-
- vermatch = re.search(r'^\s*#define\s+APR_PATCH_VERSION\s+(\d+)', txt, re.M)
- patch = int(vermatch.group(1))
-
- version = (major, minor, patch)
- self.apr_version = '%d.%d.%d' % version
-
- suffix = ''
- if major > 0:
- suffix = '-%d' % major
-
- if self.static_apr:
- self.apr_lib = 'apr%s.lib' % suffix
- else:
- self.apr_lib = 'libapr%s.lib' % suffix
-
- if version < minimal_apr_version:
- sys.stderr.write("ERROR: apr %s or higher is required "
- "(%s found)\n" % (
- '.'.join(str(v) for v in minimal_apr_version),
- self.apr_version))
- sys.exit(1)
- else:
- print('Found apr %s' % self.apr_version)
-
- def _find_apr_util(self):
- "Find the APR-util library and version"
-
- minimal_aprutil_version = (0, 9, 0)
- version_file_path = os.path.join(self.apr_util_path, 'include',
- 'apu_version.h')
-
- if not os.path.exists(version_file_path):
- sys.stderr.write("ERROR: '%s' not found.\n" % version_file_path);
- sys.stderr.write("Use '--with-apr-util' option to configure APR-Util location.\n");
- sys.exit(1)
-
- fp = open(version_file_path)
- txt = fp.read()
- fp.close()
-
- vermatch = re.search(r'^\s*#define\s+APU_MAJOR_VERSION\s+(\d+)', txt, re.M)
- major = int(vermatch.group(1))
-
- vermatch = re.search(r'^\s*#define\s+APU_MINOR_VERSION\s+(\d+)', txt, re.M)
- minor = int(vermatch.group(1))
-
- vermatch = re.search(r'^\s*#define\s+APU_PATCH_VERSION\s+(\d+)', txt, re.M)
- patch = int(vermatch.group(1))
-
- version = (major, minor, patch)
- self.aprutil_version = '%d.%d.%d' % version
-
- suffix = ''
- if major > 0:
- suffix = '-%d' % major
-
- if self.static_apr:
- self.aprutil_lib = 'aprutil%s.lib' % suffix
- else:
- self.aprutil_lib = 'libaprutil%s.lib' % suffix
-
- if version < minimal_aprutil_version:
- sys.stderr.write("ERROR: aprutil %s or higher is required "
- "(%s found)\n" % (
- '.'.join(str(v) for v in minimal_aprutil_version),
- self.aprutil_version))
- sys.exit(1)
- else:
- print('Found aprutil %s' % self.aprutil_version)
-
- def _find_sqlite(self):
- "Find the Sqlite library and version"
-
- minimal_sqlite_version = (3, 7, 12)
-
- header_file = os.path.join(self.sqlite_path, 'inc', 'sqlite3.h')
-
- # First check for compiled version of SQLite.
- if os.path.exists(header_file):
- # Compiled SQLite seems found, check for sqlite3.lib file.
- lib_file = os.path.join(self.sqlite_path, 'lib', 'sqlite3.lib')
- if not os.path.exists(lib_file):
- sys.stderr.write("ERROR: '%s' not found.\n" % lib_file)
- sys.stderr.write("Use '--with-sqlite' option to configure sqlite location.\n");
- sys.exit(1)
- self.sqlite_inline = False
- else:
- # Compiled SQLite not found. Try amalgamation version.
- amalg_file = os.path.join(self.sqlite_path, 'sqlite3.c')
- if not os.path.exists(amalg_file):
- sys.stderr.write("ERROR: SQLite not found in '%s' directory.\n" % self.sqlite_path)
- sys.stderr.write("Use '--with-sqlite' option to configure sqlite location.\n");
- sys.exit(1)
- header_file = os.path.join(self.sqlite_path, 'sqlite3.h')
- self.sqlite_inline = True
-
- fp = open(header_file)
- txt = fp.read()
- fp.close()
- vermatch = re.search(r'^\s*#define\s+SQLITE_VERSION\s+"(\d+)\.(\d+)\.(\d+)(?:\.(\d))?"', txt, re.M)
-
- version = vermatch.groups()
-
- # Sqlite doesn't add patch numbers for their ordinary releases
- if not version[3]:
- version = version[0:3]
-
- version = tuple(map(int, version))
-
- self.sqlite_version = '.'.join(str(v) for v in version)
-
- if version < minimal_sqlite_version:
- sys.stderr.write("ERROR: sqlite %s or higher is required "
- "(%s found)\n" % (
- '.'.join(str(v) for v in minimal_sqlite_version),
- self.sqlite_version))
- sys.exit(1)
- else:
- print('Found SQLite %s' % self.sqlite_version)
-
- def _find_zlib(self):
- "Find the ZLib library and version"
-
- if not self.zlib_path:
- self.zlib_version = '1'
- return
-
- header_file = os.path.join(self.zlib_path, 'zlib.h')
-
- if not os.path.exists(header_file):
- self.zlib_version = '1'
- return
-
- fp = open(header_file)
- txt = fp.read()
- fp.close()
- vermatch = re.search(r'^\s*#define\s+ZLIB_VERSION\s+"(\d+)\.(\d+)\.(\d+)(?:\.\d)?"', txt, re.M)
-
- version = tuple(map(int, vermatch.groups()))
-
- self.zlib_version = '%d.%d.%d' % version
-
- print('Found ZLib %s' % self.zlib_version)
-
class ProjectItem:
"A generic item class for holding sources info, config info, etc for a project"
def __init__(self, **kw):
+ self.ignored = None
vars(self).update(kw)
# ============================================================================
-# This is a cut-down and modified version of code from:
-# subversion/subversion/bindings/swig/python/svn/core.py
-#
-if sys.platform == "win32":
- _escape_shell_arg_re = re.compile(r'(\\+)(\"|$)')
-
- def escape_shell_arg(arg):
- # The (very strange) parsing rules used by the C runtime library are
- # described at:
- # http://msdn.microsoft.com/library/en-us/vclang/html/_pluslang_Parsing_C.2b2b_.Command.2d.Line_Arguments.asp
-
- # double up slashes, but only if they are followed by a quote character
- arg = re.sub(_escape_shell_arg_re, r'\1\1\2', arg)
-
- # surround by quotes and escape quotes inside
- arg = '"' + arg.replace('"', '"^""') + '"'
- return arg
-
-else:
- def escape_shell_arg(str):
- return "'" + str.replace("'", "'\\''") + "'"
-
-# ============================================================================
FILTER_LIBS = 1
FILTER_PROJECTS = 2
+FILTER_EXTERNALLIBS = 3
class POFile:
"Item class for holding po file info"
Modified: subversion/branches/cache-server/build/generator/swig/__init__.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/swig/__init__.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/swig/__init__.py (original)
+++ subversion/branches/cache-server/build/generator/swig/__init__.py Tue Oct 15 08:52:06 2013
@@ -61,10 +61,17 @@ class Generator:
self.swig_path = swig_path
self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
+ _swigVersion = None
def version(self):
"""Get the version number of SWIG"""
- swig_version = _exec.output([self.swig_path, "-version"])
- m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
- if m:
- return (m.group(1), m.group(2), m.group(3))
- return (0, 0, 0)
+
+ if not self._swigVersion:
+ swig_version = _exec.output([self.swig_path, "-version"])
+ m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
+ if m:
+ self._swigVersion = tuple(map(int, m.groups()))
+ else:
+ self._swigVersion = (0, 0, 0)
+
+ # Copy value to avoid changes
+ return tuple(list(self._swigVersion))
Modified: subversion/branches/cache-server/build/generator/swig/external_runtime.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/swig/external_runtime.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/swig/external_runtime.py (original)
+++ subversion/branches/cache-server/build/generator/swig/external_runtime.py Tue Oct 15 08:52:06 2013
@@ -24,7 +24,12 @@
# external_runtime.py: Generate external runtime files for SWIG
#
-import sys, os, re, fileinput
+import sys
+import os
+import re
+import fileinput
+import filecmp
+
if __name__ == "__main__":
parent_dir = os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))
sys.path[0:0] = [ parent_dir, os.path.dirname(parent_dir) ]
@@ -63,8 +68,10 @@ class Generator(generator.swig.Generator
"python": "pyrun.swg", "perl":"perlrun.swg", "ruby":"rubydef.swg"
}
- # Build runtime files
- out = self._output_file(lang)
+ # Build runtime files to temporary location
+ dest = self._output_file(lang)
+ out = dest + '.tmp'
+
if self.version() == (1, 3, 24):
out_file = open(out, "w")
out_file.write(open("%s/swigrun.swg" % self.proxy_dir).read())
@@ -99,6 +106,26 @@ class Generator(generator.swig.Generator
sys.stdout.write(
re.sub(r"SWIG_GetModule\(\)", "SWIG_GetModule(NULL)", line)
)
+
+ # Did the output change?
+ try:
+ if filecmp.cmp(dest, out):
+ identical = True
+ else:
+ identical = False
+ except:
+ identical = False
+
+ # Only overwrite file if changed
+ if identical:
+ os.remove(out)
+ else:
+ try:
+ os.remove(dest)
+ except: pass
+ os.rename(out, dest)
+ print('Wrote %s' % (dest,))
+
def _output_file(self, lang):
"""Return the output filename of the runtime for the given language"""
return '%s/swig_%s_external_runtime.swg' % (self.proxy_dir, lang)
Modified: subversion/branches/cache-server/build/generator/templates/build-outputs.mk.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/templates/build-outputs.mk.ezt?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/templates/build-outputs.mk.ezt (original)
+++ subversion/branches/cache-server/build/generator/templates/build-outputs.mk.ezt Tue Oct 15 08:52:06 2013
@@ -45,6 +45,7 @@ MANPAGES =[for manpages] [manpages][end]
CLEAN_FILES =[for cfiles] [cfiles][end]
EXTRACLEAN_FILES =[for sql] [sql.header][end] \
+ $(abs_builddir)/subversion/libsvn_subr/errorcode.inc \
$(abs_srcdir)/compile_commands.json
SWIG_INCLUDES = -I$(abs_builddir)/subversion \
@@ -98,7 +99,7 @@ autogen-swig: autogen-swig-[swig_langs.s
install-[target.install]: [target.install_deps][end]
[is target.type "java"][target.varname]_HEADERS = [for target.headers][if-index target.headers first][else] [end][target.headers][end]
[target.varname]_OBJECTS = [for target.objects][if-index target.objects first][else] [end][target.objects][end]
-[target.varname]_DEPS = $([target.varname]_HEADERS) $([target.varname]_OBJECTS) [target.add_deps] [for target.deps][if-index target.deps first][else] [end][target.deps][end]
+[target.varname]_DEPS = $([target.varname]_HEADERS) $([target.varname]_OBJECTS)[for target.add_deps] [target.add_deps][end][for target.deps][if-index target.deps first][else] [end][target.deps][end]
[target.name]: $([target.varname]_DEPS)
[if-any target.headers][target.varname]_CLASS_FILENAMES =[for target.header_class_filenames] [target.header_class_filenames][end]
[target.varname]_CLASSES =[for target.header_classes] [target.header_classes][end]
@@ -109,9 +110,9 @@ $([target.varname]_OBJECTS): $([target.v
[target.link_cmd] -d [target.output_dir] -classpath [target.classes]:$([target.varname]_CLASSPATH) $([target.varname]_SRC)
[if-any target.jar]
$(JAR) cf [target.jar_path] -C [target.classes][for target.packages] [target.packages][end][end][end]
-[else][is target.type "i18n"][target.varname]_DEPS = [target.add_deps][for target.objects] [target.objects][end][for target.deps] [target.deps][end]
+[else][is target.type "i18n"][target.varname]_DEPS =[for target.add_deps] [target.add_deps][end][for target.objects] [target.objects][end][for target.deps] [target.deps][end]
[target.name]: $([target.varname]_DEPS)
-[else][target.varname]_DEPS = [target.add_deps][for target.objects] [target.objects][end][for target.deps] [target.deps][end]
+[else][target.varname]_DEPS =[for target.add_deps] [target.add_deps][end][for target.objects] [target.objects][end][for target.deps] [target.deps][end]
[target.varname]_OBJECTS =[for target.objnames] [target.objnames][end]
[target.filename]: $([target.varname]_DEPS)
[if-any target.when]if $([target.when]) ; then [else][end]cd [target.path] && [target.link_cmd] $([target.varname]_LDFLAGS) -o [target.basename] [target.undefined_flag] $([target.varname]_OBJECTS)[for target.libs] [target.libs][end] $(LIBS)[if-any target.when] ; else echo "fake" > [target.filename] ; fi[else][end]
Modified: subversion/branches/cache-server/build/generator/templates/build_locale.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/templates/build_locale.ezt?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/templates/build_locale.ezt (original)
+++ subversion/branches/cache-server/build/generator/templates/build_locale.ezt Tue Oct 15 08:52:06 2013
@@ -19,7 +19,7 @@
@echo off
@rem **************************************************************************
cd ..\..\..\subversion\po
-mkdir ..\..\%1\mo
+if not exist ..\..\%1\mo mkdir ..\..\%1\mo
set exitcode=0
[for pofiles]echo Running msgfmt on [pofiles.po]...
msgfmt.exe -c -o ..\..\%1\mo\[pofiles.mo] [pofiles.po]
Modified: subversion/branches/cache-server/build/generator/templates/msvc_dsp.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/templates/msvc_dsp.ezt?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/templates/msvc_dsp.ezt (original)
+++ subversion/branches/cache-server/build/generator/templates/msvc_dsp.ezt Tue Oct 15 08:52:06 2013
@@ -42,8 +42,8 @@ RSC=rc.exe
# PROP Target_Dir ""
[if-any is_utility][else]LIB32=link.exe -lib
# ADD LIB32 /out:"[rootpath]\[configs.name]\[target.output_dir]\[target.output_name]"
-# ADD CPP /nologo /W3 /FD /Fd"[rootpath]\[configs.name]\[target.output_dir]\[target.output_pdb]" /c [is configs.name "Debug"]/MDd /Gm /Gi /GX /ZI /Od /GZ[else]/MD /GX /O2 /Zi[end][for configs.defines] /D "[configs.defines]"[end][if-any instrument_apr_pools] /D "APR_POOL_DEBUG=[instrument_apr_pools]"[end][for includes] /I "[includes]"[end]
-# ADD RSC /l [if-any is_exe]0x409[else]0x424[end][is configs.name "Debug"] /d "_DEBUG"[end][for includes] /I "[includes]"[end]
+# ADD CPP /nologo /W3 /FD /Fd"[rootpath]\[configs.name]\[target.output_dir]\[target.output_pdb]" /c [is configs.name "Debug"]/MDd /Gm /Gi /GX /ZI /Od /GZ[else]/MD /GX /O2 /Zi[end][for configs.defines] /D "[configs.defines]"[end][if-any instrument_apr_pools] /D "APR_POOL_DEBUG=[instrument_apr_pools]"[end][for configs.includes] /I "[configs.includes]"[end]
+# ADD RSC /l [if-any is_exe]0x409[else]0x424[end][is configs.name "Debug"] /d "_DEBUG"[end][for configs.includes] /I "[configs.includes]"[end]
BSC32=bscmake.exe
LINK32=link.exe
[if-any is_exe is_dll]# ADD LINK32 /nologo[if-any is_exe] /subsystem:console[end][if-any is_dll] /dll[end] /debug /machine:IX86[for configs.libs] [configs.libs][end][for configs.libdirs] /libpath:"[configs.libdirs]"[end] /out:"[rootpath]\[configs.name]\[target.output_dir]\[target.output_name]"[if-any instrument_purify_quantify] /fixed:no[end]
Modified: subversion/branches/cache-server/build/generator/templates/vcnet_vcproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/templates/vcnet_vcproj.ezt?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/templates/vcnet_vcproj.ezt (original)
+++ subversion/branches/cache-server/build/generator/templates/vcnet_vcproj.ezt Tue Oct 15 08:52:06 2013
@@ -45,7 +45,7 @@
EnableIntrinsicFunctions="TRUE"
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
-[end] AdditionalIncludeDirectories="..\..\..\[configs.name];[for includes][includes][if-index includes last][else];[end][end]"
+[end] AdditionalIncludeDirectories="..\..\..\[configs.name];[for configs.includes][configs.includes][if-index configs.includes last][else];[end][end]"
PreprocessorDefinitions="[if-any instrument_apr_pools]APR_POOL_DEBUG=[instrument_apr_pools];[end][is platforms "x64"]WIN64;[end][for configs.defines][configs.defines][if-index configs.defines last][else];[end][end];_CRT_SECURE_NO_WARNINGS"
[is configs.name "Debug"] MinimalRebuild="TRUE"
RuntimeLibrary="3"
@@ -62,7 +62,8 @@
/we4002 /we4003 /we4013 /we4020 /we4022 /we4024 /we4028 /we4029 /we4030 /we4031 /we4033 /we4047 /we4089 /we4113 /we4115 /we4204 /we4715"
DebugInformationFormat="3"
ProgramDataBaseFileName="$(IntDir)\[target.output_pdb]"
- CompileAsManaged="0"
+ [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]"
+ [end]CompileAsManaged="0"
CompileAs="0"[if-any is_exe][is configs.name "Release"]
OptimizeForWindowsApplication="TRUE"[end][end]/>
<Tool
@@ -114,16 +115,22 @@
Name="[configs.name]|[platforms]">
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="[for includes][includes][if-index includes last][else];[end][end]"
+ AdditionalIncludeDirectories="[for configs.includes][configs.includes][if-index configs.includes last][else];[end][end]"
PreprocessorDefinitions="SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is configs.name "Debug"]_DEBUG[else]NDEBUG[end]"/>
</FileConfiguration>[end][end]
</File>[end]
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
-[for sources][is sources.extension ".h"][else] <File
+[for sources][is sources.extension ".h"][else][is sources.extension ".hpp"][else] <File
RelativePath="[sources.path]">
-[if-any sources.custom_build][for platforms][for configs]
+[if-any sources.ignored][for platforms][for configs] <FileConfiguration
+ Name="[configs.name]|[platforms]"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+[end][end][else][if-any sources.custom_build][for platforms][for configs]
<FileConfiguration
Name="[configs.name]|[platforms]">
<Tool
@@ -142,9 +149,9 @@
ObjectFile="$(IntDir)/[sources.reldir]/"
ProgramDataBaseFileName="$(IntDir)/[sources.reldir]/[target.proj_name]-[sources.reldir].pdb"/>
</FileConfiguration>
-[end][end][end]
+[end][end][end][end]
</File>
-[end][end]
+[end][end][end]
[is target_type "2"] <File RelativePath="..\empty.c"/>[end]
</Filter>
<Filter
@@ -153,7 +160,10 @@
[for sources][is sources.extension ".h"]
<File
RelativePath="[sources.path]" />
-[end][end]
+[else][is sources.extension ".hpp"]
+ <File
+ RelativePath="[sources.path]" />
+[end][end][end]
</Filter>
</Files>
<Globals>
Modified: subversion/branches/cache-server/build/generator/templates/vcnet_vcxproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/generator/templates/vcnet_vcxproj.ezt?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/generator/templates/vcnet_vcxproj.ezt (original)
+++ subversion/branches/cache-server/build/generator/templates/vcnet_vcxproj.ezt Tue Oct 15 08:52:06 2013
@@ -57,7 +57,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
-[end] <AdditionalIncludeDirectories>$(SolutionDir)[configs.name];[for includes][includes];[end];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+[end] <AdditionalIncludeDirectories>$(SolutionDir)[configs.name];[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<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>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
@@ -65,7 +65,8 @@
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>4100;4127;4206;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<TreatSpecificWarningsAsErrors>4002;4003;4013;4020;4022;4024;4028;4029;4030;4031;4033;4047;4089;4113;4115;4204;4715;%(TreatSpecificWarningsAsErrors)</TreatSpecificWarningsAsErrors>
- </ClCompile>
+[if-any configs.forced_include_files] <ForcedIncludeFiles>[for configs.forced_include_files][configs.forced_include_files];[end]%(ForcedIncludeFiles)</ForcedIncludeFiles>
+[end] </ClCompile>
[is config_type "Application"] <Link>
<AdditionalDependencies>[for configs.libs][configs.libs];[end]%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>[for configs.libdirs][configs.libdirs];[end]%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -79,8 +80,8 @@
<AdditionalDependencies>[for configs.libs][configs.libs];[end]%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>[for configs.libdirs][configs.libdirs];[end]%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
-[is configs.name "Debug"] <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
-[end][if-any def_file] <ModuleDefinitionFile>[def_file]</ModuleDefinitionFile>
+ <IgnoreSpecificDefaultLibraries>[is configs.name "Debug"]msvcrt.lib[end][is configs.name "Release"]msvcrtd.lib[end]</IgnoreSpecificDefaultLibraries>
+[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>
@@ -89,25 +90,26 @@
[end][end][end] </ItemDefinitionGroup>
[end][end][if-any target.desc] <ItemGroup>
<ResourceCompile Include="..\svn.rc">
-[for configs][for platforms] <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[for includes][includes];[end];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+[for configs][for platforms] <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is configs.name "Debug"]_DEBUG[else]NDEBUG[end];%(PreprocessorDefinitions)</PreprocessorDefinitions>
[end][end] </ResourceCompile>
</ItemGroup>
[end] <ItemGroup>
-[for sources][is sources.extension ".h"][else][if-any sources.custom_build] <CustomBuild Include="[sources.path]">
+[for sources][is sources.extension ".h"][else][is sources.extension ".hpp"][else][if-any sources.custom_build] <CustomBuild Include="[sources.path]">
<FileType>Document</FileType>
[for configs][for platforms] <Command Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[sources.custom_build]</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[for sources.user_deps][sources.user_deps];[end]%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[sources.custom_target];%(Outputs)</Outputs>
[if-any sources.custom_desc]<Message Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[sources.custom_desc]</Message>
[end][end][end] </CustomBuild>
-[else][is sources.extension ".c"] <ClCompile Include="[sources.path]" />
-[else][is sources.extension ".cpp"] <ClCompile Include="[sources.path]" />
+[else][is sources.extension ".c"][if-any sources.ignored] <None Include="[sources.path]" />[else] <ClCompile Include="[sources.path]" />[end]
+[else][is sources.extension ".cpp"][if-any sources.ignored] <None Include="[sources.path]" />[else] <ClCompile Include="[sources.path]" />[end]
[else] <None Include="[sources.path]" />
-[end][end][end][end][end] </ItemGroup>
+[end][end][end][end][end][end] </ItemGroup>
<ItemGroup>
[for sources][is sources.extension ".h"] <ClInclude Include="[sources.path]" />
-[end][end] </ItemGroup>
+[else][is sources.extension ".hpp"] <ClInclude Include="[sources.path]" />
+[end][end][end] </ItemGroup>
<ItemGroup>
[for depends] <ProjectReference Include="[depends.path]">
<Project>[depends.guid]</Project>
Modified: subversion/branches/cache-server/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/build/run_tests.py?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/build/run_tests.py (original)
+++ subversion/branches/cache-server/build/run_tests.py Tue Oct 15 08:52:06 2013
@@ -30,6 +30,7 @@
[--list] [--milestone-filter=<regex>] [--mode-filter=<type>]
[--server-minor-version=<version>] [--http-proxy=<host>:<port>]
[--config-file=<file>] [--ssl-cert=<file>]
+ [--exclusive-wc-locks]
<abs_srcdir> <abs_builddir>
<prog ...>
@@ -125,7 +126,8 @@ class TestHarness:
fsfs_sharding=None, fsfs_packing=None,
list_tests=None, svn_bin=None, mode_filter=None,
milestone_filter=None, set_log_level=None, ssl_cert=None,
- http_proxy=None):
+ http_proxy=None, http_proxy_username=None,
+ http_proxy_password=None, exclusive_wc_locks=None):
'''Construct a TestHarness instance.
ABS_SRCDIR and ABS_BUILDDIR are the source and build directories.
@@ -143,6 +145,8 @@ class TestHarness:
in conjunction with LIST_TESTS, the only tests that are listed are
those with an associated issue in the tracker which has a target
milestone that matches the regex.
+ HTTP_PROXY (hostname:port), HTTP_PROXY_USERNAME and HTTP_PROXY_PASSWORD
+ define the params to run the tests over a proxy server.
'''
self.srcdir = abs_srcdir
self.builddir = abs_builddir
@@ -178,6 +182,9 @@ class TestHarness:
self.log = None
self.ssl_cert = ssl_cert
self.http_proxy = http_proxy
+ self.http_proxy_username = http_proxy_username
+ self.http_proxy_password = http_proxy_password
+ self.exclusive_wc_locks = exclusive_wc_locks
if not sys.stdout.isatty() or sys.platform == 'win32':
TextColors.disable()
@@ -186,6 +193,7 @@ class TestHarness:
there is a log file. Return zero iff all test programs passed.'''
self._open_log('w')
failed = 0
+
for cnt, prog in enumerate(list):
failed = self._run_test(prog, cnt, len(list)) or failed
@@ -481,6 +489,12 @@ class TestHarness:
svntest.main.options.ssl_cert = self.ssl_cert
if self.http_proxy is not None:
svntest.main.options.http_proxy = self.http_proxy
+ if self.http_proxy_username is not None:
+ svntest.main.options.http_proxy_username = self.http_proxy_username
+ if self.http_proxy_password is not None:
+ svntest.main.options.http_proxy_password = self.http_proxy_password
+ if self.exclusive_wc_locks is not None:
+ svntest.main.options.exclusive_wc_locks = self.exclusive_wc_locks
svntest.main.options.srcdir = self.srcdir
@@ -645,7 +659,8 @@ def main():
'enable-sasl', 'parallel', 'config-file=',
'log-to-stdout', 'list', 'milestone-filter=',
'mode-filter=', 'set-log-level=', 'ssl-cert=',
- 'http-proxy='])
+ 'http-proxy=', 'http-proxy-username=',
+ 'http-proxy-password=','exclusive-wc-locks'])
except getopt.GetoptError:
args = []
@@ -656,9 +671,10 @@ def main():
base_url, fs_type, verbose, cleanup, enable_sasl, http_library, \
server_minor_version, fsfs_sharding, fsfs_packing, parallel, \
config_file, log_to_stdout, list_tests, mode_filter, milestone_filter, \
- set_log_level, ssl_cert, http_proxy = \
+ set_log_level, ssl_cert, http_proxy, http_proxy_username, \
+ http_proxy_password, exclusive_wc_locks = \
None, None, None, None, None, None, None, None, None, None, None, \
- None, None, None, None, None, None, None
+ None, None, None, None, None, None, None, None, None, None
for opt, val in opts:
if opt in ['-u', '--url']:
base_url = val
@@ -696,6 +712,12 @@ def main():
ssl_cert = val
elif opt in ['--http-proxy']:
http_proxy = val
+ elif opt in ['--http-proxy-username']:
+ http_proxy_username = val
+ elif opt in ['--http-proxy-password']:
+ http_proxy_password = val
+ elif opt in ['--exclusive-wc-locks']:
+ exclusive_wc_locks = 1
else:
raise getopt.GetoptError
@@ -712,7 +734,10 @@ def main():
fsfs_sharding, fsfs_packing, list_tests,
mode_filter=mode_filter, milestone_filter=milestone_filter,
set_log_level=set_log_level, ssl_cert=ssl_cert,
- http_proxy=http_proxy)
+ http_proxy=http_proxy,
+ http_proxy_username=http_proxy_username,
+ http_proxy_password=http_proxy_password,
+ exclusive_wc_locks=exclusive_wc_locks)
failed = th.run(args[2:])
if failed:
Modified: subversion/branches/cache-server/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/configure.ac?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/configure.ac (original)
+++ subversion/branches/cache-server/configure.ac Tue Oct 15 08:52:06 2013
@@ -49,13 +49,11 @@ SVN_CONFIG_NICE(config.nice)
# ==== Check for programs ====================================================
# Look for a C compiler (before anything can set CFLAGS)
-CMAINTAINERFLAGS="$CUSERFLAGS"
CUSERFLAGS="$CFLAGS"
AC_PROG_CC
SVN_CC_MODE_SETUP
# Look for a C++ compiler (before anything can set CXXFLAGS)
-CXXMAINTAINERFLAGS="$CXXUSERFLAGS"
CXXUSERFLAGS="$CXXFLAGS"
AC_PROG_CXX
SVN_CXX_MODE_SETUP
@@ -125,7 +123,7 @@ dnl Search for pkg-config
AC_PATH_PROG(PKG_CONFIG, pkg-config)
dnl Search for serf
-SVN_LIB_SERF(1,2,0)
+SVN_LIB_SERF(1,2,1)
if test "$svn_lib_serf" = "yes"; then
AC_DEFINE([SVN_HAVE_SERF], 1,
@@ -167,7 +165,6 @@ if test -n "$sqlite_compat_ver" && test
fi
SVN_CHECK_FOR_ATOMIC_BUILTINS
-
if test "$svn_cv_atomic_builtins" = "yes"; then
AC_DEFINE(SVN_HAS_ATOMIC_BUILTINS, 1, [Define if compiler provides atomic builtins])
fi
@@ -460,6 +457,7 @@ powerpc-apple-darwin*)
SVN_FS_WANT_DB_PATCH=14
;;
esac
+db_alt_version="5.x"
# 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])
@@ -627,6 +625,28 @@ fi
AC_SUBST(SVN_GNOME_KEYRING_INCLUDES)
AC_SUBST(SVN_GNOME_KEYRING_LIBS)
+dnl Googlemock -----------------
+AC_ARG_ENABLE([gmock],
+ AS_HELP_STRING([--disable-gmock],
+ [Do not use the Googlemock testing framework]),
+ [],
+ [enable_gmock=yes])
+
+AC_SUBST([GMOCK_SRCDIR], [$abs_srcdir/gmock-fused])
+AC_MSG_CHECKING([whether use Googlemock])
+if test "$enable_gmock" != "no"; then
+ if test -d "$GMOCK_SRCDIR"; then
+ AC_MSG_RESULT([yes])
+ SVN_USE_GMOCK=true
+ else
+ AC_MSG_RESULT([no])
+ SVN_USE_GMOCK=false
+ fi
+else
+ AC_MSG_RESULT([no])
+ SVN_USE_GMOCK_SOURCES=false
+fi
+AC_SUBST([SVN_USE_GMOCK])
dnl Ev2 experimental features ----------------------
dnl Note: The Ev2 implementations will be built unconditionally, but by
@@ -710,6 +730,26 @@ AH_BOTTOM([
#define gettext(x) (x)
#define dgettext(domain, x) (x)
#endif
+
+/* compiler hints */
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+# define SVN__PREDICT_FALSE(x) (__builtin_expect(x, 0))
+# define SVN__PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
+#else
+# define SVN__PREDICT_FALSE(x) (x)
+# define SVN__PREDICT_TRUE(x) (x)
+#endif
+
+#if defined(SVN_DEBUG)
+# define SVN__FORCE_INLINE
+# define SVN__PREVENT_INLINE
+#elif defined(__GNUC__)
+# define SVN__FORCE_INLINE __attribute__ ((always_inline))
+# define SVN__PREVENT_INLINE __attribute__ ((noinline))
+#else
+# define SVN__FORCE_INLINE
+# define SVN__PREVENT_INLINE
+#endif
])
dnl Used to simulate makefile conditionals.
@@ -988,7 +1028,7 @@ AS_HELP_STRING([--enable-maintainer-mode
dnl but throw too many warnings in svn code, of too little importance,
dnl to keep these enabled. Remove the "dnl" to do a run with these
dnl switches enabled.
- dnl ./configure CUSERFLAGS="-Wswitch-enum -Wswitch-default"
+ dnl ./configure CFLAGS="-Wswitch-enum -Wswitch-default"
dnl Add each of the following flags only if the C compiler accepts it.
CFLAGS_KEEP="$CFLAGS"
@@ -1002,8 +1042,9 @@ AS_HELP_STRING([--enable-maintainer-mode
SVN_CFLAGS_ADD_IFELSE([-Wold-style-definition])
SVN_CFLAGS_ADD_IFELSE([-Wno-system-headers])
SVN_CFLAGS_ADD_IFELSE([-Wno-format-nonliteral])
+ SVN_CFLAGS_ADD_IFELSE([-Wno-string-plus-int])
- CMAINTAINERFLAGS="$CFLAGS $CMAINTAINERFLAGS"
+ CMAINTAINERFLAGS="$CFLAGS"
CFLAGS="$CFLAGS_KEEP"
dnl Add flags that all versions of GCC (should) support
@@ -1021,7 +1062,7 @@ AS_HELP_STRING([--enable-maintainer-mode
SVN_CXXFLAGS_ADD_IFELSE([-Wshorten-64-to-32])
SVN_CXXFLAGS_ADD_IFELSE([-Wno-system-headers])
- CXXMAINTAINERFLAGS="$CXXFLAGS $CXXMAINTAINERFLAGS"
+ CXXMAINTAINERFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS_KEEP"
dnl Add flags that all versions of G++ (should) support
@@ -1086,7 +1127,8 @@ if test "$enable_optimization" = "yes";
SVN_CFLAGS_ADD_IFELSE([-O2],[],[
SVN_CFLAGS_ADD_IFELSE([-O1],[],[
SVN_CFLAGS_ADD_IFELSE([-O])])])])
- SVN_CFLAGS_ADD_IFELSE([-flto -Wno-clobbered])
+ SVN_CFLAGS_ADD_IFELSE([-Wno-clobbered])
+ SVN_CFLAGS_ADD_IFELSE([-flto])
SVN_CFLAGS_ADD_IFELSE([-fwhole-program])
fi
fi
@@ -1102,7 +1144,8 @@ if test "$enable_optimization" = "yes";
SVN_CXXFLAGS_ADD_IFELSE([-O2],[],[
SVN_CXXFLAGS_ADD_IFELSE([-O1],[],[
SVN_CXXFLAGS_ADD_IFELSE([-O])])])])
- SVN_CXXFLAGS_ADD_IFELSE([-flto -Wno-clobbered])
+ SVN_CXXFLAGS_ADD_IFELSE([-Wno-clobbered])
+ SVN_CXXFLAGS_ADD_IFELSE([-flto])
SVN_CXXFLAGS_ADD_IFELSE([-fwhole-program])
fi
fi
@@ -1115,6 +1158,13 @@ elif test "$enable_optimization" = "no";
# # do nothing
fi
+dnl Dump the current compiler options
+AC_MSG_NOTICE([C compiler flags: $CFLAGS])
+AC_MSG_NOTICE([ user-defined: $CUSERFLAGS])
+AC_MSG_NOTICE([ maintainer-mode: $CMAINTAINERFLAGS])
+AC_MSG_NOTICE([C++ compiler flags: $CXXFLAGS])
+AC_MSG_NOTICE([ user-defined: $CXXUSERFLAGS])
+AC_MSG_NOTICE([ maintainer-mode: $CXXMAINTAINERFLAGS])
AC_ARG_ENABLE(full-version-match,
AS_HELP_STRING([--disable-full-version-match],
@@ -1337,6 +1387,13 @@ if test "$svn_enable_shared" = "no" || t
svn_fs_lib_install_deps="install-fsmod-lib"
svn_fs_lib_link="\$(FS_FS_LINK)"
+ AC_DEFINE(SVN_LIBSVN_FS_LINKS_FS_X, 1,
+ [Defined if libsvn_fs should link against libsvn_fs_x])
+ svn_fs_lib_deps="$svn_fs_lib_deps \$(FS_X_DEPS)"
+ svn_fs_lib_link="$svn_fs_lib_link \$(FS_X_LINK)"
+dnl FSFS already installs fsmod
+dnl svn_fs_lib_install_deps="$svn_fs_lib_install_deps install-fsmod-lib"
+
if test "$svn_lib_berkeley_db" = "yes"; then
AC_DEFINE(SVN_LIBSVN_FS_LINKS_FS_BASE, 1,
[Defined if libsvn_fs should link against libsvn_fs_base])
@@ -1502,18 +1559,28 @@ dnl Configure is long - users tend to mi
dnl Hence, print a warnings about what we did and didn't configure at the
dnl end, where people will actually see them.
-if test "$svn_lib_berkeley_db" = "no" && test "$with_berkeley_db" != "no"; then
- db_version="$SVN_FS_WANT_DB_MAJOR.$SVN_FS_WANT_DB_MINOR.$SVN_FS_WANT_DB_PATCH"
- AC_MSG_WARN([we have configured without BDB filesystem support
+if test "$svn_have_berkeley_db" = "no6" && test "$enable_bdb6" != "no"; then
+ AC_MSG_WARN([We have configured without BDB filesystem support
+
+
+Berkeley DB 6 was found, but not used. Please re-run configure (see
+./config.nice) with the '--enable-bdb6' flag to use it,
+or explicitly specify '--disable-bdb6' or '--without-berkeley-db'
+to silence this warning.
+Please note that some versions of Berkeley DB 6+ are under the GNU Affero
+General Public License, version 3:
+https://oss.oracle.com/pipermail/bdb/2013-June/000056.html
-You don't seem to have Berkeley DB version $db_version or newer
-installed and linked to APR-UTIL. We have created a Makefile which will build
-Subversion without support for the Berkeley DB back-end. You can find the
-latest version of Berkeley DB here:
+The AGPL-3.0 licence may impose special requirements for making available
+source code of server-side software. The text of the licence is:
+https://www.gnu.org/licenses/agpl-3.0.html
+http://opensource.org/licenses/AGPL-3.0
- http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html
+The Berkeley DB backend to Subversion is deprecated; see
+http://subversion.apache.org/docs/release-notes/1.8#bdb-deprecated
-or explicitly specify --without-berkeley-db to silence this warning.
+The Subversion developers have not tested Subversion with Berkeley DB 6 for
+technical problems or bugs.
])
fi
Modified: subversion/branches/cache-server/contrib/client-side/emacs/vc-svn.el
URL: http://svn.apache.org/viewvc/subversion/branches/cache-server/contrib/client-side/emacs/vc-svn.el?rev=1532250&r1=1532249&r2=1532250&view=diff
==============================================================================
--- subversion/branches/cache-server/contrib/client-side/emacs/vc-svn.el (original)
+++ subversion/branches/cache-server/contrib/client-side/emacs/vc-svn.el Tue Oct 15 08:52:06 2013
@@ -125,10 +125,7 @@
(defun vc-svn-registered (file)
"Return true if FILE is registered under Subversion."
- ;; First, a quick false positive test: is there a `.svn/entries' file?
- (and (file-exists-p (expand-file-name ".svn/entries"
- (file-name-directory file)))
- (not (null (vc-svn-run-status file)))))
+ (not (null (vc-svn-run-status file))))
(put 'vc-svn-with-output-buffer 'lisp-indent-function 0)
@@ -165,7 +162,7 @@ See `vc-svn-parse-status' for a descript
(let ((status (apply 'call-process vc-svn-program-name nil t nil
(append '("status" "-v")
(if update '("-u") '())
- (list file)))))
+ (list (concat file "@"))))))
(goto-char (point-min))
(if (not (equal 0 status)) ; not zerop; status can be a string
;; If you ask for the status of a file that isn't even in a
@@ -208,7 +205,8 @@ If the file is newly added, LOCAL is \"0
(match-string 3)))
((looking-at "^I +") nil) ;; An ignored file
((looking-at " \\{40\\}") nil) ;; A file that is not in the wc nor svn?
- (t (error "Couldn't parse output from `svn status -v'")))))
+ ;; Since svn status is run on every file, don't complain if it fails.
+ (t nil))))
(defun vc-svn-parse-state-only ()