(
output_dir,
options,
spec,
sources,
excluded_sources,
props_files_of_rules,
targets_files_of_rules,
actions_to_add,
rule_dependencies,
extension_to_rule_name,
)
| 2314 | |
| 2315 | |
| 2316 | def _GenerateRulesForMSBuild( |
| 2317 | output_dir, |
| 2318 | options, |
| 2319 | spec, |
| 2320 | sources, |
| 2321 | excluded_sources, |
| 2322 | props_files_of_rules, |
| 2323 | targets_files_of_rules, |
| 2324 | actions_to_add, |
| 2325 | rule_dependencies, |
| 2326 | extension_to_rule_name, |
| 2327 | ): |
| 2328 | # MSBuild rules are implemented using three files: an XML file, a .targets |
| 2329 | # file and a .props file. |
| 2330 | # For more details see: |
| 2331 | # https://devblogs.microsoft.com/cppblog/quick-help-on-vs2010-custom-build-rule/ |
| 2332 | rules = spec.get("rules", []) |
| 2333 | rules_native = [r for r in rules if not int(r.get("msvs_external_rule", 0))] |
| 2334 | rules_external = [r for r in rules if int(r.get("msvs_external_rule", 0))] |
| 2335 | |
| 2336 | msbuild_rules = [] |
| 2337 | for rule in rules_native: |
| 2338 | # Skip a rule with no action and no inputs. |
| 2339 | if "action" not in rule and not rule.get("rule_sources", []): |
| 2340 | continue |
| 2341 | msbuild_rule = MSBuildRule(rule, spec) |
| 2342 | msbuild_rules.append(msbuild_rule) |
| 2343 | rule_dependencies.update(msbuild_rule.additional_dependencies.split(";")) |
| 2344 | extension_to_rule_name[msbuild_rule.extension] = msbuild_rule.rule_name |
| 2345 | if msbuild_rules: |
| 2346 | base = spec["target_name"] + options.suffix |
| 2347 | props_name = base + ".props" |
| 2348 | targets_name = base + ".targets" |
| 2349 | xml_name = base + ".xml" |
| 2350 | |
| 2351 | props_files_of_rules.add(props_name) |
| 2352 | targets_files_of_rules.add(targets_name) |
| 2353 | |
| 2354 | props_path = os.path.join(output_dir, props_name) |
| 2355 | targets_path = os.path.join(output_dir, targets_name) |
| 2356 | xml_path = os.path.join(output_dir, xml_name) |
| 2357 | |
| 2358 | _GenerateMSBuildRulePropsFile(props_path, msbuild_rules) |
| 2359 | _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules) |
| 2360 | _GenerateMSBuildRuleXmlFile(xml_path, msbuild_rules) |
| 2361 | |
| 2362 | if rules_external: |
| 2363 | _GenerateExternalRules( |
| 2364 | rules_external, output_dir, spec, sources, options, actions_to_add |
| 2365 | ) |
| 2366 | _AdjustSourcesForRules(rules, sources, excluded_sources, True) |
| 2367 | |
| 2368 | |
| 2369 | class MSBuildRule: |
no test coverage detected