OLD | NEW |
---|---|
1 # Copyright (c) 2013 Google Inc. All rights reserved. | 1 # Copyright (c) 2013 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 collections | 5 import collections |
6 import copy | 6 import copy |
7 import hashlib | 7 import hashlib |
8 import json | 8 import json |
9 import multiprocessing | 9 import multiprocessing |
10 import os.path | 10 import os.path |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
592 for action in actions: | 592 for action in actions: |
593 # First write out a rule for the action. | 593 # First write out a rule for the action. |
594 name = '%s_%s' % (action['action_name'], | 594 name = '%s_%s' % (action['action_name'], |
595 hashlib.md5(self.qualified_target).hexdigest()) | 595 hashlib.md5(self.qualified_target).hexdigest()) |
596 description = self.GenerateDescription('ACTION', | 596 description = self.GenerateDescription('ACTION', |
597 action.get('message', None), | 597 action.get('message', None), |
598 name) | 598 name) |
599 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(action) | 599 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(action) |
600 if self.flavor == 'win' else False) | 600 if self.flavor == 'win' else False) |
601 args = action['action'] | 601 args = action['action'] |
602 pool = 'console' if int(action.get('ninja_use_console', 0)) == 1 else None | |
Nico
2014/07/24 20:33:02
nit: You don't need the `== 1`, ints are true exac
| |
602 rule_name, _ = self.WriteNewNinjaRule(name, args, description, | 603 rule_name, _ = self.WriteNewNinjaRule(name, args, description, |
603 is_cygwin, env=env) | 604 is_cygwin, env, pool) |
604 | 605 |
605 inputs = [self.GypPathToNinja(i, env) for i in action['inputs']] | 606 inputs = [self.GypPathToNinja(i, env) for i in action['inputs']] |
606 if int(action.get('process_outputs_as_sources', False)): | 607 if int(action.get('process_outputs_as_sources', False)): |
607 extra_sources += action['outputs'] | 608 extra_sources += action['outputs'] |
608 if int(action.get('process_outputs_as_mac_bundle_resources', False)): | 609 if int(action.get('process_outputs_as_mac_bundle_resources', False)): |
609 extra_mac_bundle_resources += action['outputs'] | 610 extra_mac_bundle_resources += action['outputs'] |
610 outputs = [self.GypPathToNinja(o, env) for o in action['outputs']] | 611 outputs = [self.GypPathToNinja(o, env) for o in action['outputs']] |
611 | 612 |
612 # Then write out an edge using the rule. | 613 # Then write out an edge using the rule. |
613 self.ninja.build(outputs, rule_name, inputs, | 614 self.ninja.build(outputs, rule_name, inputs, |
(...skipping 17 matching lines...) Expand all Loading... | |
631 name = '%s_%s' % (rule['rule_name'], | 632 name = '%s_%s' % (rule['rule_name'], |
632 hashlib.md5(self.qualified_target).hexdigest()) | 633 hashlib.md5(self.qualified_target).hexdigest()) |
633 | 634 |
634 args = rule['action'] | 635 args = rule['action'] |
635 description = self.GenerateDescription( | 636 description = self.GenerateDescription( |
636 'RULE', | 637 'RULE', |
637 rule.get('message', None), | 638 rule.get('message', None), |
638 ('%s ' + generator_default_variables['RULE_INPUT_PATH']) % name) | 639 ('%s ' + generator_default_variables['RULE_INPUT_PATH']) % name) |
639 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(rule) | 640 is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(rule) |
640 if self.flavor == 'win' else False) | 641 if self.flavor == 'win' else False) |
642 pool = 'console' if int(rule.get('ninja_use_console', 0)) == 1 else None | |
641 rule_name, args = self.WriteNewNinjaRule( | 643 rule_name, args = self.WriteNewNinjaRule( |
642 name, args, description, is_cygwin, env=env) | 644 name, args, description, is_cygwin, env, pool) |
643 | 645 |
644 # TODO: if the command references the outputs directly, we should | 646 # TODO: if the command references the outputs directly, we should |
645 # simplify it to just use $out. | 647 # simplify it to just use $out. |
646 | 648 |
647 # Rules can potentially make use of some special variables which | 649 # Rules can potentially make use of some special variables which |
648 # must vary per source file. | 650 # must vary per source file. |
649 # Compute the list of variables we'll need to provide. | 651 # Compute the list of variables we'll need to provide. |
650 special_locals = ('source', 'root', 'dirname', 'ext', 'name') | 652 special_locals = ('source', 'root', 'dirname', 'ext', 'name') |
651 needed_variables = set(['source']) | 653 needed_variables = set(['source']) |
652 for argument in args: | 654 for argument in args: |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1420 return os.path.join(libdir, filename) | 1422 return os.path.join(libdir, filename) |
1421 else: | 1423 else: |
1422 return self.GypPathToUniqueOutput(filename, qualified=False) | 1424 return self.GypPathToUniqueOutput(filename, qualified=False) |
1423 | 1425 |
1424 def WriteVariableList(self, ninja_file, var, values): | 1426 def WriteVariableList(self, ninja_file, var, values): |
1425 assert not isinstance(values, str) | 1427 assert not isinstance(values, str) |
1426 if values is None: | 1428 if values is None: |
1427 values = [] | 1429 values = [] |
1428 ninja_file.variable(var, ' '.join(values)) | 1430 ninja_file.variable(var, ' '.join(values)) |
1429 | 1431 |
1430 def WriteNewNinjaRule(self, name, args, description, is_cygwin, env): | 1432 def WriteNewNinjaRule(self, name, args, description, is_cygwin, env, pool): |
1431 """Write out a new ninja "rule" statement for a given command. | 1433 """Write out a new ninja "rule" statement for a given command. |
1432 | 1434 |
1433 Returns the name of the new rule, and a copy of |args| with variables | 1435 Returns the name of the new rule, and a copy of |args| with variables |
1434 expanded.""" | 1436 expanded.""" |
1435 | 1437 |
1436 if self.flavor == 'win': | 1438 if self.flavor == 'win': |
1437 args = [self.msvs_settings.ConvertVSMacros( | 1439 args = [self.msvs_settings.ConvertVSMacros( |
1438 arg, self.base_to_build, config=self.config_name) | 1440 arg, self.base_to_build, config=self.config_name) |
1439 for arg in args] | 1441 for arg in args] |
1440 description = self.msvs_settings.ConvertVSMacros( | 1442 description = self.msvs_settings.ConvertVSMacros( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1478 command = ('%s gyp-win-tool action-wrapper $arch ' % sys.executable + | 1480 command = ('%s gyp-win-tool action-wrapper $arch ' % sys.executable + |
1479 rspfile + run_in) | 1481 rspfile + run_in) |
1480 else: | 1482 else: |
1481 env = self.ComputeExportEnvString(env) | 1483 env = self.ComputeExportEnvString(env) |
1482 command = gyp.common.EncodePOSIXShellList(args) | 1484 command = gyp.common.EncodePOSIXShellList(args) |
1483 command = 'cd %s; ' % self.build_to_base + env + command | 1485 command = 'cd %s; ' % self.build_to_base + env + command |
1484 | 1486 |
1485 # GYP rules/actions express being no-ops by not touching their outputs. | 1487 # GYP rules/actions express being no-ops by not touching their outputs. |
1486 # Avoid executing downstream dependencies in this case by specifying | 1488 # Avoid executing downstream dependencies in this case by specifying |
1487 # restat=1 to ninja. | 1489 # restat=1 to ninja. |
1488 self.ninja.rule(rule_name, command, description, restat=True, | 1490 self.ninja.rule(rule_name, command, description, restat=True, pool=pool, |
1489 rspfile=rspfile, rspfile_content=rspfile_content) | 1491 rspfile=rspfile, rspfile_content=rspfile_content) |
1490 self.ninja.newline() | 1492 self.ninja.newline() |
1491 | 1493 |
1492 return rule_name, args | 1494 return rule_name, args |
1493 | 1495 |
1494 | 1496 |
1495 def CalculateVariables(default_variables, params): | 1497 def CalculateVariables(default_variables, params): |
1496 """Calculate additional variables for use in the build (called by gyp).""" | 1498 """Calculate additional variables for use in the build (called by gyp).""" |
1497 global generator_additional_non_configuration_keys | 1499 global generator_additional_non_configuration_keys |
1498 global generator_additional_path_sections | 1500 global generator_additional_path_sections |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2228 arglists.append( | 2230 arglists.append( |
2229 (target_list, target_dicts, data, params, config_name)) | 2231 (target_list, target_dicts, data, params, config_name)) |
2230 pool.map(CallGenerateOutputForConfig, arglists) | 2232 pool.map(CallGenerateOutputForConfig, arglists) |
2231 except KeyboardInterrupt, e: | 2233 except KeyboardInterrupt, e: |
2232 pool.terminate() | 2234 pool.terminate() |
2233 raise e | 2235 raise e |
2234 else: | 2236 else: |
2235 for config_name in config_names: | 2237 for config_name in config_names: |
2236 GenerateOutputForConfig(target_list, target_dicts, data, params, | 2238 GenerateOutputForConfig(target_list, target_dicts, data, params, |
2237 config_name) | 2239 config_name) |
OLD | NEW |