From 9d6566ee193e8996fb867cf776dc13f697400f24 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 27 Jul 2016 16:38:43 +0200 Subject: Improve path handling in gyp's ninja generator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensure we generate ninja files under the right folder, and handle absolute sources better, so they don't cause objects in the same folder. Change-Id: Ia020616c53c4fb43790345c6724b94120c18c6ac Reviewed-by: Michael BrĂ¼ning --- chromium/tools/gyp/pylib/gyp/generator/ninja.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/chromium/tools/gyp/pylib/gyp/generator/ninja.py b/chromium/tools/gyp/pylib/gyp/generator/ninja.py index 9eb311cdb2b..43e31acc527 100644 --- a/chromium/tools/gyp/pylib/gyp/generator/ninja.py +++ b/chromium/tools/gyp/pylib/gyp/generator/ninja.py @@ -336,6 +336,8 @@ class NinjaWriter(object): obj += '.' + self.toolset path_dir, path_basename = os.path.split(path) + if os.path.isabs(path_dir): + path_dir = gyp.common.RelativePath(path_dir, self.abs_build_dir) #assert not os.path.isabs(path_dir), ( #"'%s' can not be absolute path (see crbug.com/462153)." % path_dir) @@ -2343,10 +2345,16 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, hash_for_rules = hashlib.md5(qualified_target_for_hash).hexdigest() base_path = os.path.dirname(build_file) + output_file_path = base_path + if os.path.commonprefix([output_file_path, os.path.pardir]) == os.path.pardir: + # avoid escaping the build-dir due to generated files + # outside the source directory + output_file_path = output_file_path.replace('..', '.') + obj = 'obj' if toolset != 'target': obj += '.' + toolset - output_file = os.path.join(obj, base_path, name + '.ninja') + output_file = os.path.join(obj, output_file_path, name + '.ninja') ninja_output = StringIO() writer = NinjaWriter(hash_for_rules, target_outputs, base_path, build_dir, -- cgit v1.2.3