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 all_outputs = [] | 592 all_outputs = [] |
593 for action in actions: | 593 for action in actions: |
594 # First write out a rule for the action. | 594 # First write out a rule for the action. |
595 name = '%s_%s' % (action['action_name'], self.hash_for_rules) | 595 name = '%s_%s' % (action['action_name'], self.hash_for_rules) |
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 depfile = action.get('depfile', None) |
| 603 if depfile: |
| 604 depfile = self.ExpandSpecial(depfile, self.base_to_build) |
602 pool = 'console' if int(action.get('ninja_use_console', 0)) else None | 605 pool = 'console' if int(action.get('ninja_use_console', 0)) else None |
603 rule_name, _ = self.WriteNewNinjaRule(name, args, description, | 606 rule_name, _ = self.WriteNewNinjaRule(name, args, description, |
604 is_cygwin, env, pool) | 607 is_cygwin, env, pool, |
| 608 depfile=depfile) |
605 | 609 |
606 inputs = [self.GypPathToNinja(i, env) for i in action['inputs']] | 610 inputs = [self.GypPathToNinja(i, env) for i in action['inputs']] |
607 if int(action.get('process_outputs_as_sources', False)): | 611 if int(action.get('process_outputs_as_sources', False)): |
608 extra_sources += action['outputs'] | 612 extra_sources += action['outputs'] |
609 if int(action.get('process_outputs_as_mac_bundle_resources', False)): | 613 if int(action.get('process_outputs_as_mac_bundle_resources', False)): |
610 extra_mac_bundle_resources += action['outputs'] | 614 extra_mac_bundle_resources += action['outputs'] |
611 outputs = [self.GypPathToNinja(o, env) for o in action['outputs']] | 615 outputs = [self.GypPathToNinja(o, env) for o in action['outputs']] |
612 | 616 |
613 # Then write out an edge using the rule. | 617 # Then write out an edge using the rule. |
614 self.ninja.build(outputs, rule_name, inputs, | 618 self.ninja.build(outputs, rule_name, inputs, |
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1499 return os.path.join(libdir, filename) | 1503 return os.path.join(libdir, filename) |
1500 else: | 1504 else: |
1501 return self.GypPathToUniqueOutput(filename, qualified=False) | 1505 return self.GypPathToUniqueOutput(filename, qualified=False) |
1502 | 1506 |
1503 def WriteVariableList(self, ninja_file, var, values): | 1507 def WriteVariableList(self, ninja_file, var, values): |
1504 assert not isinstance(values, str) | 1508 assert not isinstance(values, str) |
1505 if values is None: | 1509 if values is None: |
1506 values = [] | 1510 values = [] |
1507 ninja_file.variable(var, ' '.join(values)) | 1511 ninja_file.variable(var, ' '.join(values)) |
1508 | 1512 |
1509 def WriteNewNinjaRule(self, name, args, description, is_cygwin, env, pool): | 1513 def WriteNewNinjaRule(self, name, args, description, is_cygwin, env, pool, |
| 1514 depfile=None): |
1510 """Write out a new ninja "rule" statement for a given command. | 1515 """Write out a new ninja "rule" statement for a given command. |
1511 | 1516 |
1512 Returns the name of the new rule, and a copy of |args| with variables | 1517 Returns the name of the new rule, and a copy of |args| with variables |
1513 expanded.""" | 1518 expanded.""" |
1514 | 1519 |
1515 if self.flavor == 'win': | 1520 if self.flavor == 'win': |
1516 args = [self.msvs_settings.ConvertVSMacros( | 1521 args = [self.msvs_settings.ConvertVSMacros( |
1517 arg, self.base_to_build, config=self.config_name) | 1522 arg, self.base_to_build, config=self.config_name) |
1518 for arg in args] | 1523 for arg in args] |
1519 description = self.msvs_settings.ConvertVSMacros( | 1524 description = self.msvs_settings.ConvertVSMacros( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 command = ('%s gyp-win-tool action-wrapper $arch ' % sys.executable + | 1562 command = ('%s gyp-win-tool action-wrapper $arch ' % sys.executable + |
1558 rspfile + run_in) | 1563 rspfile + run_in) |
1559 else: | 1564 else: |
1560 env = self.ComputeExportEnvString(env) | 1565 env = self.ComputeExportEnvString(env) |
1561 command = gyp.common.EncodePOSIXShellList(args) | 1566 command = gyp.common.EncodePOSIXShellList(args) |
1562 command = 'cd %s; ' % self.build_to_base + env + command | 1567 command = 'cd %s; ' % self.build_to_base + env + command |
1563 | 1568 |
1564 # GYP rules/actions express being no-ops by not touching their outputs. | 1569 # GYP rules/actions express being no-ops by not touching their outputs. |
1565 # Avoid executing downstream dependencies in this case by specifying | 1570 # Avoid executing downstream dependencies in this case by specifying |
1566 # restat=1 to ninja. | 1571 # restat=1 to ninja. |
1567 self.ninja.rule(rule_name, command, description, restat=True, pool=pool, | 1572 self.ninja.rule(rule_name, command, description, depfile=depfile, |
| 1573 restat=True, pool=pool, |
1568 rspfile=rspfile, rspfile_content=rspfile_content) | 1574 rspfile=rspfile, rspfile_content=rspfile_content) |
1569 self.ninja.newline() | 1575 self.ninja.newline() |
1570 | 1576 |
1571 return rule_name, args | 1577 return rule_name, args |
1572 | 1578 |
1573 | 1579 |
1574 def CalculateVariables(default_variables, params): | 1580 def CalculateVariables(default_variables, params): |
1575 """Calculate additional variables for use in the build (called by gyp).""" | 1581 """Calculate additional variables for use in the build (called by gyp).""" |
1576 global generator_additional_non_configuration_keys | 1582 global generator_additional_non_configuration_keys |
1577 global generator_additional_path_sections | 1583 global generator_additional_path_sections |
(...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2374 arglists.append( | 2380 arglists.append( |
2375 (target_list, target_dicts, data, params, config_name)) | 2381 (target_list, target_dicts, data, params, config_name)) |
2376 pool.map(CallGenerateOutputForConfig, arglists) | 2382 pool.map(CallGenerateOutputForConfig, arglists) |
2377 except KeyboardInterrupt, e: | 2383 except KeyboardInterrupt, e: |
2378 pool.terminate() | 2384 pool.terminate() |
2379 raise e | 2385 raise e |
2380 else: | 2386 else: |
2381 for config_name in config_names: | 2387 for config_name in config_names: |
2382 GenerateOutputForConfig(target_list, target_dicts, data, params, | 2388 GenerateOutputForConfig(target_list, target_dicts, data, params, |
2383 config_name) | 2389 config_name) |
OLD | NEW |