Author: brane
Date: Mon Feb 9 10:53:50 2015
New Revision: 1658357
URL: http://svn.apache.org/r1658357
Log:
Tweak the makefile generator to always generate the same
dependency path for relative dependencies.
This fixes occasional parallel build failures when amalgamated SQLite
is used that were caused by two different targets (and dependency paths)
being generated for sqlite3wrapper.lo, which confused make to attempt
compiling that file twice in paralell ... with predictable results.
* build/generator/gen_make.py
(_normstr): New; like str() but sends the result through os.path.normpath.
(Generator.write): For targets, along with generating the list of object
files, also generate the same list with normalized paths.
For object file rules, normalize the name and the paths to sources
and other dependencies.
Modified:
subversion/trunk/build/generator/gen_make.py
subversion/trunk/build/generator/templates/build-outputs.mk.ezt
Modified: subversion/trunk/build/generator/gen_make.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_make.py?rev=1658357&r1=1658356&r2=1658357&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_make.py (original)
+++ subversion/trunk/build/generator/gen_make.py Mon Feb 9 10:53:50 2015
@@ -53,6 +53,12 @@ from gen_base import build_path_join, bu
build_path_basename, build_path_dirname, build_path_retreat, unique
+def _normstr(x):
+ if os.sep == '/':
+ return os.path.normpath(str(x))
+ else:
+ return os.path.normpath(str(x).replace('/', os.sep)).replace(os.sep, '/')
+
class Generator(gen_base.GeneratorBase):
_extension_map = {
@@ -232,6 +238,7 @@ class Generator(gen_base.GeneratorBase):
# get the source items (.o and .la) for the link unit
objects = [ ]
+ objdeps = [ ]
object_srcs = [ ]
headers = [ ]
header_classes = [ ]
@@ -263,6 +270,7 @@ class Generator(gen_base.GeneratorBase):
elif isinstance(link_dep, gen_base.ObjectFile):
# link in the object file
objects.append(link_dep.filename)
+ objdeps.append(_normstr(link_dep.filename))
for dep in self.graph.get_sources(gen_base.DT_OBJECT, link_dep,
gen_base.SourceFile):
object_srcs.append(
build_path_join('$(abs_srcdir)', dep.filename))
@@ -291,6 +299,7 @@ class Generator(gen_base.GeneratorBase):
install=None,
add_deps=add_deps,
objects=objects,
+ objdeps=objdeps,
deps=deps,
when=target_ob.when,
)
@@ -467,11 +476,11 @@ class Generator(gen_base.GeneratorBase):
key=lambda t: t[0].filename)
for objname, sources in obj_deps:
- dep = _eztdata(name=str(objname),
+ dep = _eztdata(name=_normstr(objname),
when=objname.when,
- deps=list(map(str, sources)),
+ deps=list(map(_normstr, sources)),
cmd=objname.compile_cmd,
- source=str(sources[0]))
+ source=_normstr(sources[0]))
data.deps.append(dep)
dep.generated = ezt.boolean(getattr(objname, 'source_generated', 0))
Modified: subversion/trunk/build/generator/templates/build-outputs.mk.ezt
URL:
http://svn.apache.org/viewvc/subversion/trunk/build/generator/templates/build-outputs.mk.ezt?rev=1658357&r1=1658356&r2=1658357&view=diff
==============================================================================
--- subversion/trunk/build/generator/templates/build-outputs.mk.ezt (original)
+++ subversion/trunk/build/generator/templates/build-outputs.mk.ezt Mon Feb 9
10:53:50 2015
@@ -112,7 +112,7 @@ $([target.varname]_OBJECTS): $([target.v
$(JAR) cf [target.jar_path] -C [target.classes][for target.packages]
[target.packages][end][end][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 =[for target.add_deps] [target.add_deps][end][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.objdeps] [target.objdeps][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]