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 ntpath | 6 import ntpath |
7 import os | 7 import os |
8 import posixpath | 8 import posixpath |
9 import re | 9 import re |
10 import subprocess | 10 import subprocess |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 rules_filename = '%s%s.rules' % (spec['target_name'], | 482 rules_filename = '%s%s.rules' % (spec['target_name'], |
483 options.suffix) | 483 options.suffix) |
484 rules_file = MSVSToolFile.Writer(os.path.join(output_dir, rules_filename), | 484 rules_file = MSVSToolFile.Writer(os.path.join(output_dir, rules_filename), |
485 spec['target_name']) | 485 spec['target_name']) |
486 # Add each rule. | 486 # Add each rule. |
487 for r in rules: | 487 for r in rules: |
488 rule_name = r['rule_name'] | 488 rule_name = r['rule_name'] |
489 rule_ext = r['extension'] | 489 rule_ext = r['extension'] |
490 inputs = _FixPaths(r.get('inputs', [])) | 490 inputs = _FixPaths(r.get('inputs', [])) |
491 outputs = _FixPaths(r.get('outputs', [])) | 491 outputs = _FixPaths(r.get('outputs', [])) |
| 492 # Skip a rule with no action and no inputs. |
| 493 if 'action' not in r and not r.get('rule_sources', []): |
| 494 continue |
492 cmd = _BuildCommandLineForRule(spec, r, has_input_path=True, | 495 cmd = _BuildCommandLineForRule(spec, r, has_input_path=True, |
493 do_setup_env=True) | 496 do_setup_env=True) |
494 rules_file.AddCustomBuildRule(name=rule_name, | 497 rules_file.AddCustomBuildRule(name=rule_name, |
495 description=r.get('message', rule_name), | 498 description=r.get('message', rule_name), |
496 extensions=[rule_ext], | 499 extensions=[rule_ext], |
497 additional_dependencies=inputs, | 500 additional_dependencies=inputs, |
498 outputs=outputs, | 501 outputs=outputs, |
499 cmd=cmd) | 502 cmd=cmd) |
500 # Write out rules file. | 503 # Write out rules file. |
501 rules_file.WriteIfChanged() | 504 rules_file.WriteIfChanged() |
(...skipping 1433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1935 # MSBuild rules are implemented using three files: an XML file, a .targets | 1938 # MSBuild rules are implemented using three files: an XML file, a .targets |
1936 # file and a .props file. | 1939 # file and a .props file. |
1937 # See http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-c
ustom-build-rule.aspx | 1940 # See http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-c
ustom-build-rule.aspx |
1938 # for more details. | 1941 # for more details. |
1939 rules = spec.get('rules', []) | 1942 rules = spec.get('rules', []) |
1940 rules_native = [r for r in rules if not int(r.get('msvs_external_rule', 0))] | 1943 rules_native = [r for r in rules if not int(r.get('msvs_external_rule', 0))] |
1941 rules_external = [r for r in rules if int(r.get('msvs_external_rule', 0))] | 1944 rules_external = [r for r in rules if int(r.get('msvs_external_rule', 0))] |
1942 | 1945 |
1943 msbuild_rules = [] | 1946 msbuild_rules = [] |
1944 for rule in rules_native: | 1947 for rule in rules_native: |
| 1948 # Skip a rule with no action and no inputs. |
| 1949 if 'action' not in rule and not rule.get('rule_sources', []): |
| 1950 continue |
1945 msbuild_rule = MSBuildRule(rule, spec) | 1951 msbuild_rule = MSBuildRule(rule, spec) |
1946 msbuild_rules.append(msbuild_rule) | 1952 msbuild_rules.append(msbuild_rule) |
1947 extension_to_rule_name[msbuild_rule.extension] = msbuild_rule.rule_name | 1953 extension_to_rule_name[msbuild_rule.extension] = msbuild_rule.rule_name |
1948 if msbuild_rules: | 1954 if msbuild_rules: |
1949 base = spec['target_name'] + options.suffix | 1955 base = spec['target_name'] + options.suffix |
1950 props_name = base + '.props' | 1956 props_name = base + '.props' |
1951 targets_name = base + '.targets' | 1957 targets_name = base + '.targets' |
1952 xml_name = base + '.xml' | 1958 xml_name = base + '.xml' |
1953 | 1959 |
1954 props_files_of_rules.add(props_name) | 1960 props_files_of_rules.add(props_name) |
(...skipping 1155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3110 action_spec.extend( | 3116 action_spec.extend( |
3111 # TODO(jeanluc) 'Document' for all or just if as_sources? | 3117 # TODO(jeanluc) 'Document' for all or just if as_sources? |
3112 [['FileType', 'Document'], | 3118 [['FileType', 'Document'], |
3113 ['Command', command], | 3119 ['Command', command], |
3114 ['Message', description], | 3120 ['Message', description], |
3115 ['Outputs', outputs] | 3121 ['Outputs', outputs] |
3116 ]) | 3122 ]) |
3117 if additional_inputs: | 3123 if additional_inputs: |
3118 action_spec.append(['AdditionalInputs', additional_inputs]) | 3124 action_spec.append(['AdditionalInputs', additional_inputs]) |
3119 actions_spec.append(action_spec) | 3125 actions_spec.append(action_spec) |
OLD | NEW |