| Index: pylib/gyp/generator/msvs.py
|
| diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py
|
| index 2607f9270a6bb73ff47753c32c1e30cf3db13a1f..3b036d262d1ea2270620a753c64b66ff0d5e7889 100644
|
| --- a/pylib/gyp/generator/msvs.py
|
| +++ b/pylib/gyp/generator/msvs.py
|
| @@ -918,7 +918,7 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
|
| sources, excluded_sources,
|
| actions_to_add)
|
| list_excluded = generator_flags.get('msvs_list_excluded_files', True)
|
| - sources, excluded_sources, excluded_idl = (
|
| + sources, excluded_sources, excluded_custom_files = (
|
| _AdjustSourcesAndConvertToFilterHierarchy(
|
| spec, options, project_dir, sources, excluded_sources, list_excluded))
|
|
|
| @@ -936,7 +936,7 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
|
| # Don't excluded sources with actions attached, or they won't run.
|
| excluded_sources = _FilterActionsFromExcluded(
|
| excluded_sources, actions_to_add)
|
| - _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,
|
| + _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_custom_files,
|
| list_excluded)
|
| _AddAccumulatedActionsToMSVS(p, spec, actions_to_add)
|
|
|
| @@ -1025,7 +1025,7 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config):
|
| for this configuration.
|
| """
|
| # Get the information for this configuration
|
| - include_dirs, resource_include_dirs = _GetIncludeDirs(config)
|
| + include_dirs, resource_include_dirs, _ = _GetIncludeDirs(config)
|
| libraries = _GetLibraries(spec)
|
| out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False)
|
| defines = _GetDefines(config)
|
| @@ -1094,7 +1094,8 @@ def _GetIncludeDirs(config):
|
| config: The dictionnary that defines the special processing to be done
|
| for this configuration.
|
| Returns:
|
| - The list of directory paths.
|
| + A triple of (C++ include directory paths, Resource Compiler include
|
| + directory paths, MASM include directory paths)
|
| """
|
| # TODO(bradnelson): include_dirs should really be flexible enough not to
|
| # require this sort of thing.
|
| @@ -1102,9 +1103,11 @@ def _GetIncludeDirs(config):
|
| config.get('include_dirs', []) +
|
| config.get('msvs_system_include_dirs', []))
|
| resource_include_dirs = config.get('resource_include_dirs', include_dirs)
|
| + masm_include_dirs = config.get('masm_include_dirs', include_dirs)
|
| include_dirs = _FixPaths(include_dirs)
|
| resource_include_dirs = _FixPaths(resource_include_dirs)
|
| - return include_dirs, resource_include_dirs
|
| + masm_include_dirs = _FixPaths(masm_include_dirs)
|
| + return include_dirs, resource_include_dirs, masm_include_dirs
|
|
|
|
|
| def _GetLibraries(spec):
|
| @@ -1337,7 +1340,7 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
|
| excluded_sources: A set of sources to be excluded for this project.
|
| Returns:
|
| A trio of (list of sources, list of excluded sources,
|
| - path of excluded IDL file)
|
| + path of excluded files being handled by non-MSVS-native rules)
|
| """
|
| # Exclude excluded sources coming into the generator.
|
| excluded_sources.update(set(spec.get('sources_excluded', [])))
|
| @@ -1350,7 +1353,7 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
|
| # Convert to proper windows form.
|
| excluded_sources = _FixPaths(excluded_sources)
|
|
|
| - excluded_idl = _IdlFilesHandledNonNatively(spec, sources)
|
| + excluded_custom_files = _FilesHandledNonNatively(spec, sources)
|
|
|
| precompiled_related = _GetPrecompileRelatedFiles(spec)
|
| # Find the excluded ones, minus the precompiled header related ones.
|
| @@ -1361,22 +1364,24 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
|
| sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded,
|
| list_excluded=list_excluded)
|
|
|
| - return sources, excluded_sources, excluded_idl
|
| + return sources, excluded_sources, excluded_custom_files
|
|
|
|
|
| -def _IdlFilesHandledNonNatively(spec, sources):
|
| - # If any non-native rules use 'idl' as an extension exclude idl files.
|
| +def _FilesHandledNonNatively(spec, sources):
|
| + # If any non-native rules exist for extensions normally handled by MSVS, such
|
| + # as .idl or .asm, then exclude files with those extensions.
|
| # Gather a list here to use later.
|
| - using_idl = False
|
| - for rule in spec.get('rules', []):
|
| - if rule['extension'] == 'idl' and int(rule.get('msvs_external_rule', 0)):
|
| - using_idl = True
|
| - break
|
| - if using_idl:
|
| - excluded_idl = [i for i in sources if i.endswith('.idl')]
|
| - else:
|
| - excluded_idl = []
|
| - return excluded_idl
|
| + excluded_files = []
|
| + for extension in ['idl', 'asm']:
|
| + using_custom_rule = False
|
| + for rule in spec.get('rules', []):
|
| + if (rule['extension'] == extension and
|
| + int(rule.get('msvs_external_rule', 0))):
|
| + using_custom_rule = True
|
| + break
|
| + if using_custom_rule:
|
| + excluded_files.extend([i for i in sources if i.endswith('.' + extension)])
|
| + return excluded_files
|
|
|
|
|
| def _GetPrecompileRelatedFiles(spec):
|
| @@ -1390,9 +1395,10 @@ def _GetPrecompileRelatedFiles(spec):
|
| return precompiled_related
|
|
|
|
|
| -def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,
|
| - list_excluded):
|
| - exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl)
|
| +def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources,
|
| + excluded_custom_files, list_excluded):
|
| + exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources,
|
| + excluded_custom_files)
|
| for file_name, excluded_configs in exclusions.iteritems():
|
| if (not list_excluded and
|
| len(excluded_configs) == len(spec['configurations'])):
|
| @@ -1405,7 +1411,7 @@ def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,
|
| {'ExcludedFromBuild': 'true'})
|
|
|
|
|
| -def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
|
| +def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_custom_files):
|
| exclusions = {}
|
| # Exclude excluded sources from being built.
|
| for f in excluded_sources:
|
| @@ -1418,7 +1424,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
|
| exclusions[f] = excluded_configs
|
| # If any non-native rules use 'idl' as an extension exclude idl files.
|
| # Exclude them now.
|
| - for f in excluded_idl:
|
| + for f in excluded_custom_files:
|
| excluded_configs = []
|
| for config_name, config in spec['configurations'].iteritems():
|
| excluded_configs.append((config_name, config))
|
| @@ -1971,6 +1977,9 @@ def _MapFileToMsBuildSourceType(source, extension_to_rule_name):
|
| elif ext == '.idl':
|
| group = 'midl'
|
| element = 'Midl'
|
| + elif ext == '.asm':
|
| + group = 'masm'
|
| + element = 'MASM'
|
| else:
|
| group = 'none'
|
| element = 'None'
|
| @@ -2778,7 +2787,8 @@ def _FinalizeMSBuildSettings(spec, configuration):
|
| converted = True
|
| msvs_settings = configuration.get('msvs_settings', {})
|
| msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings)
|
| - include_dirs, resource_include_dirs = _GetIncludeDirs(configuration)
|
| + include_dirs, resource_include_dirs, masm_include_dirs = \
|
| + _GetIncludeDirs(configuration)
|
| libraries = _GetLibraries(spec)
|
| out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True)
|
| defines = _GetDefines(configuration)
|
| @@ -2809,6 +2819,8 @@ def _FinalizeMSBuildSettings(spec, configuration):
|
| 'AdditionalIncludeDirectories', include_dirs)
|
| _ToolAppend(msbuild_settings, 'ResourceCompile',
|
| 'AdditionalIncludeDirectories', resource_include_dirs)
|
| + _ToolAppend(msbuild_settings, 'MASM',
|
| + 'AdditionalIncludeDirectories', masm_include_dirs)
|
| # Add in libraries.
|
| _ToolAppend(msbuild_settings, 'Link', 'AdditionalDependencies', libraries)
|
| if out_file:
|
| @@ -2819,6 +2831,8 @@ def _FinalizeMSBuildSettings(spec, configuration):
|
| 'PreprocessorDefinitions', defines)
|
| _ToolAppend(msbuild_settings, 'ResourceCompile',
|
| 'PreprocessorDefinitions', defines)
|
| + _ToolAppend(msbuild_settings, 'MASM',
|
| + 'PreprocessorDefinitions', defines)
|
| # Add disabled warnings.
|
| _ToolAppend(msbuild_settings, 'ClCompile',
|
| 'DisableSpecificWarnings', disabled_warnings)
|
| @@ -2896,7 +2910,7 @@ def _VerifySourcesExist(sources, root_dir):
|
|
|
| def _GetMSBuildSources(spec, sources, exclusions, extension_to_rule_name,
|
| actions_spec, sources_handled_by_action, list_excluded):
|
| - groups = ['none', 'midl', 'include', 'compile', 'resource', 'rule']
|
| + groups = ['none', 'midl', 'masm', 'include', 'compile', 'resource', 'rule']
|
| grouped_sources = {}
|
| for g in groups:
|
| grouped_sources[g] = []
|
| @@ -3014,7 +3028,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| sources, excluded_sources,
|
| props_files_of_rules, targets_files_of_rules,
|
| actions_to_add, extension_to_rule_name)
|
| - sources, excluded_sources, excluded_idl = (
|
| + sources, excluded_sources, excluded_custom_files = (
|
| _AdjustSourcesAndConvertToFilterHierarchy(spec, options,
|
| project_dir, sources,
|
| excluded_sources,
|
| @@ -3027,7 +3041,8 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
|
| excluded_sources = _FilterActionsFromExcluded(
|
| excluded_sources, actions_to_add)
|
|
|
| - exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl)
|
| + exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources,
|
| + excluded_custom_files)
|
| actions_spec, sources_handled_by_action = _GenerateActionsForMSBuild(
|
| spec, actions_to_add)
|
|
|
| @@ -3086,6 +3101,9 @@ def _GetMSBuildExtensions(props_files_of_rules):
|
| extensions = ['ImportGroup', {'Label': 'ExtensionSettings'}]
|
| for props_file in props_files_of_rules:
|
| extensions.append(['Import', {'Project': props_file}])
|
| + extensions.append(
|
| + ['Import', {'Project':
|
| + r'$(VCTargetsPath)\BuildCustomizations\masm.props'}])
|
| return [extensions]
|
|
|
|
|
| @@ -3093,6 +3111,9 @@ def _GetMSBuildExtensionTargets(targets_files_of_rules):
|
| targets_node = ['ImportGroup', {'Label': 'ExtensionTargets'}]
|
| for targets_file in sorted(targets_files_of_rules):
|
| targets_node.append(['Import', {'Project': targets_file}])
|
| + targets_node.append(
|
| + ['Import', {'Project':
|
| + r'$(VCTargetsPath)\BuildCustomizations\masm.targets'}])
|
| return [targets_node]
|
|
|
|
|
|
|