| Index: pylib/gyp/generator/msvs.py
|
| diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py
|
| index f529d39a98d37c76b5eda390199f454cdd465dd1..28957e556b2b8209252f72287028ce39d5a49ec6 100644
|
| --- a/pylib/gyp/generator/msvs.py
|
| +++ b/pylib/gyp/generator/msvs.py
|
| @@ -817,10 +817,10 @@ def _GenerateRulesForMSVS(p, output_dir, options, spec,
|
| if rules_external:
|
| _GenerateExternalRules(rules_external, output_dir, spec,
|
| sources, options, actions_to_add)
|
| - _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
|
| + _AdjustSourcesForRules(rules, sources, excluded_sources, False)
|
|
|
|
|
| -def _AdjustSourcesForRules(spec, rules, sources, excluded_sources):
|
| +def _AdjustSourcesForRules(rules, sources, excluded_sources, is_msbuild):
|
| # Add outputs generated by each rule (if applicable).
|
| for rule in rules:
|
| # Add in the outputs from this rule.
|
| @@ -837,7 +837,7 @@ def _AdjustSourcesForRules(spec, rules, sources, excluded_sources):
|
| outputs = OrderedSet(_FixPaths(outputs))
|
| inputs.remove(_FixPath(trigger_file))
|
| sources.update(inputs)
|
| - if not spec.get('msvs_external_builder'):
|
| + if not is_msbuild:
|
| excluded_sources.update(inputs)
|
| sources.update(outputs)
|
|
|
| @@ -2013,7 +2013,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
|
|
|
|
|
| def _GenerateMSBuildFiltersFile(filters_path, source_files,
|
| - extension_to_rule_name):
|
| + rule_dependencies, extension_to_rule_name):
|
| """Generate the filters file.
|
|
|
| This file is used by Visual Studio to organize the presentation of source
|
| @@ -2026,8 +2026,8 @@ def _GenerateMSBuildFiltersFile(filters_path, source_files,
|
| """
|
| filter_group = []
|
| source_group = []
|
| - _AppendFiltersForMSBuild('', source_files, extension_to_rule_name,
|
| - filter_group, source_group)
|
| + _AppendFiltersForMSBuild('', source_files, rule_dependencies,
|
| + extension_to_rule_name, filter_group, source_group)
|
| if filter_group:
|
| content = ['Project',
|
| {'ToolsVersion': '4.0',
|
| @@ -2042,7 +2042,7 @@ def _GenerateMSBuildFiltersFile(filters_path, source_files,
|
| os.unlink(filters_path)
|
|
|
|
|
| -def _AppendFiltersForMSBuild(parent_filter_name, sources,
|
| +def _AppendFiltersForMSBuild(parent_filter_name, sources, rule_dependencies,
|
| extension_to_rule_name,
|
| filter_group, source_group):
|
| """Creates the list of filters and sources to be added in the filter file.
|
| @@ -2068,11 +2068,12 @@ def _AppendFiltersForMSBuild(parent_filter_name, sources,
|
| ['UniqueIdentifier', MSVSNew.MakeGuid(source.name)]])
|
| # Recurse and add its dependents.
|
| _AppendFiltersForMSBuild(filter_name, source.contents,
|
| - extension_to_rule_name,
|
| + rule_dependencies, extension_to_rule_name,
|
| filter_group, source_group)
|
| else:
|
| # It's a source. Create a source entry.
|
| - _, element = _MapFileToMsBuildSourceType(source, extension_to_rule_name)
|
| + _, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
|
| + extension_to_rule_name)
|
| source_entry = [element, {'Include': source}]
|
| # Specify the filter it is part of, if any.
|
| if parent_filter_name:
|
| @@ -2080,7 +2081,8 @@ def _AppendFiltersForMSBuild(parent_filter_name, sources,
|
| source_group.append(source_entry)
|
|
|
|
|
| -def _MapFileToMsBuildSourceType(source, extension_to_rule_name):
|
| +def _MapFileToMsBuildSourceType(source, rule_dependencies,
|
| + extension_to_rule_name):
|
| """Returns the group and element type of the source file.
|
|
|
| Arguments:
|
| @@ -2106,6 +2108,9 @@ def _MapFileToMsBuildSourceType(source, extension_to_rule_name):
|
| elif ext == '.idl':
|
| group = 'midl'
|
| element = 'Midl'
|
| + elif source in rule_dependencies:
|
| + group = 'rule_dependency'
|
| + element = 'CustomBuild'
|
| else:
|
| group = 'none'
|
| element = 'None'
|
| @@ -2115,7 +2120,8 @@ def _MapFileToMsBuildSourceType(source, extension_to_rule_name):
|
| def _GenerateRulesForMSBuild(output_dir, options, spec,
|
| sources, excluded_sources,
|
| props_files_of_rules, targets_files_of_rules,
|
| - actions_to_add, extension_to_rule_name):
|
| + actions_to_add, rule_dependencies,
|
| + extension_to_rule_name):
|
| # MSBuild rules are implemented using three files: an XML file, a .targets
|
| # file and a .props file.
|
| # See http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx
|
| @@ -2131,6 +2137,7 @@ def _GenerateRulesForMSBuild(output_dir, options, spec,
|
| continue
|
| msbuild_rule = MSBuildRule(rule, spec)
|
| msbuild_rules.append(msbuild_rule)
|
| + rule_dependencies.update(msbuild_rule.additional_dependencies.split(';'))
|
| extension_to_rule_name[msbuild_rule.extension] = msbuild_rule.rule_name
|
| if msbuild_rules:
|
| base = spec['target_name'] + options.suffix
|
| @@ -2152,7 +2159,7 @@ def _GenerateRulesForMSBuild(output_dir, options, spec,
|
| if rules_external:
|
| _GenerateExternalRules(rules_external, output_dir, spec,
|
| sources, options, actions_to_add)
|
| - _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
|
| + _AdjustSourcesForRules(rules, sources, excluded_sources, True)
|
|
|
|
|
| class MSBuildRule(object):
|
| @@ -3073,15 +3080,18 @@ def _VerifySourcesExist(sources, root_dir):
|
| return missing_sources
|
|
|
|
|
| -def _GetMSBuildSources(spec, sources, exclusions, extension_to_rule_name,
|
| - actions_spec, sources_handled_by_action, list_excluded):
|
| - groups = ['none', 'midl', 'include', 'compile', 'resource', 'rule']
|
| +def _GetMSBuildSources(spec, sources, exclusions, rule_dependencies,
|
| + extension_to_rule_name, actions_spec,
|
| + sources_handled_by_action, list_excluded):
|
| + groups = ['none', 'midl', 'include', 'compile', 'resource', 'rule',
|
| + 'rule_dependency']
|
| grouped_sources = {}
|
| for g in groups:
|
| grouped_sources[g] = []
|
|
|
| _AddSources2(spec, sources, exclusions, grouped_sources,
|
| - extension_to_rule_name, sources_handled_by_action, list_excluded)
|
| + rule_dependencies, extension_to_rule_name,
|
| + sources_handled_by_action, list_excluded)
|
| sources = []
|
| for g in groups:
|
| if grouped_sources[g]:
|
| @@ -3092,13 +3102,15 @@ def _GetMSBuildSources(spec, sources, exclusions, extension_to_rule_name,
|
|
|
|
|
| def _AddSources2(spec, sources, exclusions, grouped_sources,
|
| - extension_to_rule_name, sources_handled_by_action,
|
| + rule_dependencies, extension_to_rule_name,
|
| + sources_handled_by_action,
|
| list_excluded):
|
| extensions_excluded_from_precompile = []
|
| for source in sources:
|
| if isinstance(source, MSVSProject.Filter):
|
| _AddSources2(spec, source.contents, exclusions, grouped_sources,
|
| - extension_to_rule_name, sources_handled_by_action,
|
| + rule_dependencies, extension_to_rule_name,
|
| + sources_handled_by_action,
|
| list_excluded)
|
| else:
|
| if not source in sources_handled_by_action:
|
| @@ -3141,7 +3153,7 @@ def _AddSources2(spec, sources, exclusions, grouped_sources,
|
| detail.append(['PrecompiledHeader', ''])
|
| detail.append(['ForcedIncludeFiles', ''])
|
|
|
| - group, element = _MapFileToMsBuildSourceType(source,
|
| + group, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
|
| extension_to_rule_name)
|
| grouped_sources[group].append([element, {'Include': source}] + detail)
|
|
|
| @@ -3185,6 +3197,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| actions_to_add = {}
|
| props_files_of_rules = set()
|
| targets_files_of_rules = set()
|
| + rule_dependencies = set()
|
| extension_to_rule_name = {}
|
| list_excluded = generator_flags.get('msvs_list_excluded_files', True)
|
|
|
| @@ -3193,10 +3206,11 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| _GenerateRulesForMSBuild(project_dir, options, spec,
|
| sources, excluded_sources,
|
| props_files_of_rules, targets_files_of_rules,
|
| - actions_to_add, extension_to_rule_name)
|
| + actions_to_add, rule_dependencies,
|
| + extension_to_rule_name)
|
| else:
|
| rules = spec.get('rules', [])
|
| - _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
|
| + _AdjustSourcesForRules(rules, sources, excluded_sources, True)
|
|
|
| sources, excluded_sources, excluded_idl = (
|
| _AdjustSourcesAndConvertToFilterHierarchy(spec, options,
|
| @@ -3219,6 +3233,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| spec, actions_to_add)
|
|
|
| _GenerateMSBuildFiltersFile(project.path + '.filters', sources,
|
| + rule_dependencies,
|
| extension_to_rule_name)
|
| missing_sources = _VerifySourcesExist(sources, project_dir)
|
|
|
| @@ -3258,8 +3273,8 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| project.build_file)
|
| content += _GetMSBuildToolSettingsSections(spec, configurations)
|
| content += _GetMSBuildSources(
|
| - spec, sources, exclusions, extension_to_rule_name, actions_spec,
|
| - sources_handled_by_action, list_excluded)
|
| + spec, sources, exclusions, rule_dependencies, extension_to_rule_name,
|
| + actions_spec, sources_handled_by_action, list_excluded)
|
| content += _GetMSBuildProjectReferences(project)
|
| content += import_cpp_targets_section
|
| content += _GetMSBuildExtensionTargets(targets_files_of_rules)
|
|
|