Chromium Code Reviews| Index: pylib/gyp/generator/ninja.py |
| diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py |
| index e3a5945f67e1f40e8438a1e1d2d911002be2fa8e..f6e06a7c1bd82e410fba7d257d8183beb9625596 100644 |
| --- a/pylib/gyp/generator/ninja.py |
| +++ b/pylib/gyp/generator/ninja.py |
| @@ -200,6 +200,11 @@ class NinjaWriter: |
| # Relative path from base dir to build dir. |
| self.base_to_build = os.path.join(InvertRelativePath(base_dir), build_dir) |
| + def _WinCase(self, path): |
|
Nico
2012/04/25 23:18:23
Method name is improvable, also docstring
scottmg
2012/04/26 03:06:46
Turns out it already exists as os.path.normcase!
|
| + if self.flavor == 'win': |
| + path = path.lower() |
|
Nico
2012/04/25 23:18:23
Maybe kernel32.GetLongPathName(kernel32.GetShortPa
|
| + return path |
| + |
| def ExpandSpecial(self, path, product_dir=None): |
| """Expand specials like $!PRODUCT_DIR in |path|. |
| @@ -250,10 +255,11 @@ class NinjaWriter: |
| if path.startswith('$!'): |
| expanded = self.ExpandSpecial(path) |
| if self.flavor == 'win': |
| - expanded = os.path.normpath(expanded) |
| + expanded = self._WinCase(os.path.normpath(expanded)) |
| return expanded |
| assert '$' not in path, path |
| - return os.path.normpath(os.path.join(self.build_to_base, path)) |
| + return self._WinCase( |
| + os.path.normpath(os.path.join(self.build_to_base, path))) |
| def GypPathToUniqueOutput(self, path, qualified=True): |
| """Translate a gyp path to a ninja path for writing output. |
| @@ -285,8 +291,9 @@ class NinjaWriter: |
| path_dir, path_basename = os.path.split(path) |
| if qualified: |
| path_basename = self.name + '.' + path_basename |
| - return os.path.normpath(os.path.join(obj, self.base_dir, path_dir, |
| - path_basename)) |
| + return self._WinCase( |
| + os.path.normpath(os.path.join(obj, self.base_dir, path_dir, |
| + path_basename))) |
| def WriteCollapsedDependencies(self, name, targets): |
| """Given a list of targets, return a path for a single file |
| @@ -416,7 +423,7 @@ class NinjaWriter: |
| path, root, dirname, source, ext, basename) |
| if rel: |
| path = os.path.relpath(path, rel) |
| - return path |
| + return self._WinCase(path) |
| vars = [(name, fix_path(value, outdir)) for name, value in vars] |
| output = [fix_path(p) for p in output] |
| vars.append(('outdir', outdir)) |
| @@ -497,12 +504,17 @@ class NinjaWriter: |
| rule_name = self.WriteNewNinjaRule(name, action['action'], description, |
| is_cygwin, env=env) |
| - inputs = [self.GypPathToNinja(i, env) for i in action['inputs']] |
| + def reldir(path): |
| + qualified = os.path.join(self.build_dir, path) |
| + return self._WinCase( |
| + os.path.normpath(os.path.relpath(qualified, self.build_dir))) |
|
Nico
2012/04/25 23:18:23
What does this do?
scottmg
2012/04/26 03:06:46
Makes one's head hurt. :/
It was trying to be a b
|
| + |
| + inputs = [reldir(self.GypPathToNinja(i, env)) for i in action['inputs']] |
| if int(action.get('process_outputs_as_sources', False)): |
| extra_sources += action['outputs'] |
| if int(action.get('process_outputs_as_mac_bundle_resources', False)): |
| extra_mac_bundle_resources += action['outputs'] |
| - outputs = [self.GypPathToNinja(o, env) for o in action['outputs']] |
| + outputs = [reldir(self.GypPathToNinja(o, env)) for o in action['outputs']] |
| # Then write out an edge using the rule. |
| self.ninja.build(outputs, rule_name, inputs, |
| @@ -666,7 +678,7 @@ class NinjaWriter: |
| cflags_c = self.msvs_settings.GetCflagsC(config_name) |
| cflags_cc = self.msvs_settings.GetCflagsCC(config_name) |
| extra_defines = self.msvs_settings.GetComputedDefines(config_name) |
| - self.WriteVariableList('pdbname', [self.name + '.pdb']) |
| + self.WriteVariableList('pdbname', [self.name.lower() + '.pdb']) |
| else: |
| cflags = config.get('cflags', []) |
| cflags_c = config.get('cflags_c', []) |
| @@ -998,6 +1010,7 @@ class NinjaWriter: |
| if prefix == 'lib': |
| # Snip out an extra 'lib' from libs if appropriate. |
| target = StripPrefix(target, 'lib') |
| + target = self._WinCase(target) |
| if type in ('static_library', 'loadable_module', 'shared_library', |
| 'executable'): |
| @@ -1017,7 +1030,8 @@ class NinjaWriter: |
| if self.flavor == 'win': |
| overridden_name = self.msvs_settings.GetOutputName(spec, self.config_name) |
| if overridden_name: |
| - return self.ExpandSpecial(overridden_name, self.base_to_build) |
| + return self._WinCase( |
| + self.ExpandSpecial(overridden_name, self.base_to_build)) |
| if self.flavor == 'mac' and type in ( |
| 'static_library', 'executable', 'shared_library', 'loadable_module'): |
| @@ -1198,12 +1212,17 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
| flavor = gyp.common.GetFlavor(params) |
| generator_flags = params.get('generator_flags', {}) |
| + def wincase(path): |
|
Nico
2012/04/25 23:18:23
Make the function at the top global, then you don'
|
| + if flavor == 'win': |
| + path = path.lower() |
| + return path |
| + |
| # build_dir: relative path from source root to our output files. |
| # e.g. "out/Debug" |
| build_dir = os.path.join(generator_flags.get('output_dir', 'out'), |
| config_name) |
| - toplevel_build = os.path.join(options.toplevel_dir, build_dir) |
| + toplevel_build = wincase(os.path.join(options.toplevel_dir, build_dir)) |
| master_ninja = ninja_syntax.Writer( |
| OpenOutput(os.path.join(toplevel_build, 'build.ninja')), |
| @@ -1277,7 +1296,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
| command=('cmd /s /c "$cc /nologo /showIncludes ' |
| '@$out.rsp ' |
| '$cflags_pch_c /c $in /Fo$out /Fd$pdbname ' |
| - '| ninja-deplist-helper -q -f cl -o $out.dl"'), |
| + '| ninja-deplist-helper -r . -q -f cl -o $out.dl"'), |
| deplist='$out.dl', |
| rspfile='$out.rsp', |
| rspfile_content='$defines $includes $cflags $cflags_c') |
| @@ -1287,7 +1306,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
| command=('cmd /s /c "$cxx /nologo /showIncludes ' |
| '@$out.rsp ' |
| '$cflags_pch_cc /c $in /Fo$out /Fd$pdbname ' |
| - '| ninja-deplist-helper -q -f cl -o $out.dl"'), |
| + '| ninja-deplist-helper -r . -q -f cl -o $out.dl"'), |
| deplist='$out.dl', |
| rspfile='$out.rsp', |
| rspfile_content='$defines $includes $cflags $cflags_cc') |
| @@ -1447,7 +1466,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
| obj = 'obj' |
| if toolset != 'target': |
| obj += '.' + toolset |
| - output_file = os.path.join(obj, base_path, name + '.ninja') |
| + output_file = wincase(os.path.join(obj, base_path, name + '.ninja')) |
| abs_build_dir = os.path.abspath(toplevel_build) |
| writer = NinjaWriter(target_outputs, base_path, build_dir, |