OLD | NEW |
---|---|
1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import copy | 5 import copy |
6 import gyp | 6 import gyp |
7 import gyp.common | 7 import gyp.common |
8 import gyp.msvs_emulation | 8 import gyp.msvs_emulation |
9 import gyp.MSVSVersion | 9 import gyp.MSVSVersion |
10 import gyp.system_test | 10 import gyp.system_test |
11 import gyp.xcode_emulation | 11 import gyp.xcode_emulation |
12 import hashlib | |
12 import os.path | 13 import os.path |
13 import re | 14 import re |
14 import subprocess | 15 import subprocess |
15 import sys | 16 import sys |
16 | 17 |
17 import gyp.ninja_syntax as ninja_syntax | 18 import gyp.ninja_syntax as ninja_syntax |
18 | 19 |
19 generator_default_variables = { | 20 generator_default_variables = { |
20 'EXECUTABLE_PREFIX': '', | 21 'EXECUTABLE_PREFIX': '', |
21 'EXECUTABLE_SUFFIX': '', | 22 'EXECUTABLE_SUFFIX': '', |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
536 | 537 |
537 self.ninja.newline() | 538 self.ninja.newline() |
538 | 539 |
539 return all_outputs | 540 return all_outputs |
540 | 541 |
541 def WriteRules(self, rules, extra_sources, prebuild, | 542 def WriteRules(self, rules, extra_sources, prebuild, |
542 extra_mac_bundle_resources): | 543 extra_mac_bundle_resources): |
543 all_outputs = [] | 544 all_outputs = [] |
544 for rule in rules: | 545 for rule in rules: |
545 # First write out a rule for the rule action. | 546 # First write out a rule for the rule action. |
546 name = '%s_%s' % (self.qualified_target, rule['rule_name']) | 547 name = '%s_%s' % (self.qualified_target, rule['rule_name']) |
Nico
2012/06/22 23:47:39
Could we use target_ + hash(qualified_target) here
scottmg
2012/06/22 23:51:09
sgtm, let me give it a test.
Nico
2012/06/22 23:52:16
Cool. For actions too, and if qualified_target is
| |
547 # Skip a rule with no action and no inputs. | 548 # Skip a rule with no action and no inputs. |
548 if 'action' not in rule and not rule.get('rule_sources', []): | 549 if 'action' not in rule and not rule.get('rule_sources', []): |
549 continue | 550 continue |
550 args = rule['action'] | 551 args = rule['action'] |
551 description = self.GenerateDescription( | 552 description = self.GenerateDescription( |
552 'RULE', | 553 'RULE', |
553 rule.get('message', None), | 554 rule.get('message', None), |
554 ('%s ' + generator_default_variables['RULE_INPUT_PATH']) % name) | 555 ('%s ' + generator_default_variables['RULE_INPUT_PATH']) % name) |
555 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(rule) | 556 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(rule) |
556 if self.flavor == 'win' else False) | 557 if self.flavor == 'win' else False) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
609 elif var == 'ext': | 610 elif var == 'ext': |
610 extra_bindings.append(('ext', ext)) | 611 extra_bindings.append(('ext', ext)) |
611 elif var == 'name': | 612 elif var == 'name': |
612 extra_bindings.append(('name', cygwin_munge(basename))) | 613 extra_bindings.append(('name', cygwin_munge(basename))) |
613 else: | 614 else: |
614 assert var == None, repr(var) | 615 assert var == None, repr(var) |
615 | 616 |
616 inputs = map(self.GypPathToNinja, inputs) | 617 inputs = map(self.GypPathToNinja, inputs) |
617 outputs = map(self.GypPathToNinja, outputs) | 618 outputs = map(self.GypPathToNinja, outputs) |
618 extra_bindings.append(('unique_name', | 619 extra_bindings.append(('unique_name', |
619 re.sub('[^a-zA-Z0-9_]', '_', outputs[0]))) | 620 hashlib.md5(re.sub('[^a-zA-Z0-9_]', '_', outputs[0])).hexdigest())) |
620 self.ninja.build(outputs, rule_name, self.GypPathToNinja(source), | 621 self.ninja.build(outputs, rule_name, self.GypPathToNinja(source), |
621 implicit=inputs, | 622 implicit=inputs, |
622 order_only=prebuild, | 623 order_only=prebuild, |
623 variables=extra_bindings) | 624 variables=extra_bindings) |
624 | 625 |
625 all_outputs.extend(outputs) | 626 all_outputs.extend(outputs) |
626 | 627 |
627 return all_outputs | 628 return all_outputs |
628 | 629 |
629 def WriteCopies(self, copies, prebuild): | 630 def WriteCopies(self, copies, prebuild): |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1094 | 1095 |
1095 Returns the name of the new rule.""" | 1096 Returns the name of the new rule.""" |
1096 | 1097 |
1097 # TODO: we shouldn't need to qualify names; we do it because | 1098 # TODO: we shouldn't need to qualify names; we do it because |
1098 # currently the ninja rule namespace is global, but it really | 1099 # currently the ninja rule namespace is global, but it really |
1099 # should be scoped to the subninja. | 1100 # should be scoped to the subninja. |
1100 rule_name = self.name | 1101 rule_name = self.name |
1101 if self.toolset == 'target': | 1102 if self.toolset == 'target': |
1102 rule_name += '.' + self.toolset | 1103 rule_name += '.' + self.toolset |
1103 rule_name += '.' + name | 1104 rule_name += '.' + name |
1104 rule_name = re.sub('[^a-zA-Z0-9_]', '_', rule_name) | 1105 rule_name = hashlib.md5(re.sub('[^a-zA-Z0-9_]', '_', rule_name)).hexdigest() |
1105 | 1106 |
1106 args = args[:] | 1107 args = args[:] |
1107 | 1108 |
1108 if self.flavor == 'win': | 1109 if self.flavor == 'win': |
1109 description = self.msvs_settings.ConvertVSMacros(description) | 1110 description = self.msvs_settings.ConvertVSMacros(description) |
1110 | 1111 |
1111 # gyp dictates that commands are run from the base directory. | 1112 # gyp dictates that commands are run from the base directory. |
1112 # cd into the directory before running, and adjust paths in | 1113 # cd into the directory before running, and adjust paths in |
1113 # the arguments to point to the proper locations. | 1114 # the arguments to point to the proper locations. |
1114 rspfile = None | 1115 rspfile = None |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1542 | 1543 |
1543 user_config = params.get('generator_flags', {}).get('config', None) | 1544 user_config = params.get('generator_flags', {}).get('config', None) |
1544 if user_config: | 1545 if user_config: |
1545 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1546 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1546 user_config) | 1547 user_config) |
1547 else: | 1548 else: |
1548 config_names = target_dicts[target_list[0]]['configurations'].keys() | 1549 config_names = target_dicts[target_list[0]]['configurations'].keys() |
1549 for config_name in config_names: | 1550 for config_name in config_names: |
1550 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1551 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1551 config_name) | 1552 config_name) |
OLD | NEW |