| Index: pylib/gyp/generator/ninja.py
|
| diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py
|
| index b13affe0a172392ae115201874d5f44223b38c38..6726dd35e15790ea372475a258882196c644664e 100644
|
| --- a/pylib/gyp/generator/ninja.py
|
| +++ b/pylib/gyp/generator/ninja.py
|
| @@ -15,6 +15,8 @@ import sys
|
| import gyp
|
| import gyp.common
|
| from gyp.common import OrderedSet
|
| +from gyp.common import OrderDeterministically
|
| +
|
| import gyp.msvs_emulation
|
| import gyp.MSVSUtil as MSVSUtil
|
| import gyp.xcode_emulation
|
| @@ -656,6 +658,7 @@ class NinjaWriter(object):
|
| for var in special_locals:
|
| if '${%s}' % var in argument:
|
| needed_variables.add(var)
|
| + needed_variables = OrderDeterministically(needed_variables)
|
|
|
| def cygwin_munge(path):
|
| # pylint: disable=cell-var-from-loop
|
| @@ -687,10 +690,8 @@ class NinjaWriter(object):
|
| outputs = [self.ExpandRuleVariables(o, root, dirname,
|
| source, ext, basename)
|
| for o in rule['outputs']]
|
| -
|
| if int(rule.get('process_outputs_as_sources', False)):
|
| extra_sources += outputs
|
| -
|
| was_mac_bundle_resource = source in mac_bundle_resources
|
| if was_mac_bundle_resource or \
|
| int(rule.get('process_outputs_as_mac_bundle_resources', False)):
|
| @@ -700,7 +701,6 @@ class NinjaWriter(object):
|
| # a performance issue.
|
| if was_mac_bundle_resource:
|
| mac_bundle_resources.remove(source)
|
| -
|
| extra_bindings = []
|
| for var in needed_variables:
|
| if var == 'root':
|
| @@ -729,6 +729,7 @@ class NinjaWriter(object):
|
| # WriteNewNinjaRule uses unique_name for creating an rsp file on win.
|
| extra_bindings.append(('unique_name',
|
| hashlib.md5(outputs[0]).hexdigest()))
|
| +
|
| self.ninja.build(outputs, rule_name, self.GypPathToNinja(source),
|
| implicit=inputs,
|
| order_only=prebuild,
|
| @@ -1252,11 +1253,12 @@ class NinjaWriter(object):
|
|
|
|
|
| if len(solibs):
|
| - extra_bindings.append(('solibs', gyp.common.EncodePOSIXShellList(solibs)))
|
| + extra_bindings.append(('solibs',
|
| + gyp.common.EncodePOSIXShellList(OrderDeterministically(solibs))))
|
|
|
| ninja_file.build(output, command + command_suffix, link_deps,
|
| - implicit=list(implicit_deps),
|
| - order_only=list(order_deps),
|
| + implicit=OrderDeterministically(implicit_deps),
|
| + order_only=order_deps,
|
| variables=extra_bindings)
|
| return linked_binary
|
|
|
| @@ -2337,9 +2339,9 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
|
| # able to run actions and build libraries by their short name.
|
| master_ninja.newline()
|
| master_ninja.comment('Short names for targets.')
|
| - for short_name in target_short_names:
|
| - master_ninja.build(short_name, 'phony', [x.FinalOutput() for x in
|
| - target_short_names[short_name]])
|
| + for short_name in OrderDeterministically(target_short_names):
|
| + master_ninja.build(short_name, 'phony', ([x.FinalOutput() for x in
|
| + target_short_names[short_name]]))
|
|
|
| # Write phony targets for any empty targets that weren't written yet. As
|
| # short names are not necessarily unique only do this for short names that
|
| @@ -2348,12 +2350,12 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
|
| if empty_target_names:
|
| master_ninja.newline()
|
| master_ninja.comment('Empty targets (output for completeness).')
|
| - for name in sorted(empty_target_names):
|
| + for name in OrderDeterministically(empty_target_names):
|
| master_ninja.build(name, 'phony')
|
|
|
| if all_outputs:
|
| master_ninja.newline()
|
| - master_ninja.build('all', 'phony', list(all_outputs))
|
| + master_ninja.build('all', 'phony', OrderDeterministically(all_outputs))
|
| master_ninja.default(generator_flags.get('default_target', 'all'))
|
|
|
| master_ninja_file.close()
|
|
|