Index: pylib/gyp/generator/msvs.py |
diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py |
index bc4dfc31247b735f853eed881c858913169a328e..12f3548308c7d629e981127c0d03bf7d52f9681e 100644 |
--- a/pylib/gyp/generator/msvs.py |
+++ b/pylib/gyp/generator/msvs.py |
@@ -2,6 +2,9 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+from __future__ import print_function |
+ |
+import collections |
import copy |
import ntpath |
import os |
@@ -23,16 +26,6 @@ import gyp.MSVSVersion as MSVSVersion |
from gyp.common import GypError |
from gyp.common import OrderedSet |
-# TODO: Remove once bots are on 2.7, http://crbug.com/241769 |
-def _import_OrderedDict(): |
- import collections |
- try: |
- return collections.OrderedDict |
- except AttributeError: |
- import gyp.ordered_dict |
- return gyp.ordered_dict.OrderedDict |
-OrderedDict = _import_OrderedDict() |
- |
# Regular expression for validating Visual Studio GUIDs. If the GUID |
# contains lowercase hex letters, MSVS will be fine. However, |
@@ -200,7 +193,7 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None, |
if not prefix: prefix = [] |
result = [] |
excluded_result = [] |
- folders = OrderedDict() |
+ folders = collections.OrderedDict() |
# Gather files into the final result, excluded, or folders. |
for s in sources: |
if len(s) == 1: |
@@ -434,7 +427,7 @@ def _AddCustomBuildToolForMSVS(p, spec, primary_input, |
'CommandLine': cmd, |
}) |
# Add to the properties of primary input for each config. |
- for config_name, c_data in spec['configurations'].iteritems(): |
+ for config_name, c_data in spec['configurations'].items(): |
p.AddFileConfig(_FixPath(primary_input), |
_ConfigFullName(config_name, c_data), tools=[tool]) |
@@ -740,8 +733,8 @@ def _EscapeVCProjCommandLineArgListItem(s): |
# the VCProj but cause the same problem on the final command-line. Moving |
# the item to the end of the list does works, but that's only possible if |
# there's only one such item. Let's just warn the user. |
- print >> sys.stderr, ('Warning: MSVS may misinterpret the odd number of ' + |
- 'quotes in ' + s) |
+ print(('Warning: MSVS may misinterpret the odd number of ' + |
+ 'quotes in ' + s), file=sys.stderr) |
return s |
@@ -954,7 +947,7 @@ def _ValidateSourcesForMSVSProject(spec, version): |
basenames.setdefault(basename, []).append(source) |
error = '' |
- for basename, files in basenames.iteritems(): |
+ for basename, files in basenames.items(): |
if len(files) > 1: |
error += ' %s: %s\n' % (basename, ' '.join(files)) |
@@ -986,7 +979,7 @@ def _GenerateMSVSProject(project, options, version, generator_flags): |
relative_path_of_gyp_file = gyp.common.RelativePath(gyp_path, project_dir) |
config_type = _GetMSVSConfigurationType(spec, project.build_file) |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
_AddConfigurationToMSVSProject(p, spec, config_type, config_name, config) |
# MSVC08 and prior version cannot handle duplicate basenames in the same |
@@ -1352,10 +1345,10 @@ def _ConvertToolsToExpectedForm(tools): |
A list of Tool objects. |
""" |
tool_list = [] |
- for tool, settings in tools.iteritems(): |
+ for tool, settings in tools.items(): |
# Collapse settings with lists. |
settings_fixed = {} |
- for setting, value in settings.iteritems(): |
+ for setting, value in settings.items(): |
if type(value) == list: |
if ((tool == 'VCLinkerTool' and |
setting == 'AdditionalDependencies') or |
@@ -1530,7 +1523,7 @@ def _IdlFilesHandledNonNatively(spec, sources): |
def _GetPrecompileRelatedFiles(spec): |
# Gather a list of precompiled header related sources. |
precompiled_related = [] |
- for _, config in spec['configurations'].iteritems(): |
+ for _, config in spec['configurations'].items(): |
for k in precomp_keys: |
f = config.get(k) |
if f: |
@@ -1541,7 +1534,7 @@ def _GetPrecompileRelatedFiles(spec): |
def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl, |
list_excluded): |
exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl) |
- for file_name, excluded_configs in exclusions.iteritems(): |
+ for file_name, excluded_configs in exclusions.items(): |
if (not list_excluded and |
len(excluded_configs) == len(spec['configurations'])): |
# If we're not listing excluded files, then they won't appear in the |
@@ -1558,7 +1551,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl): |
# Exclude excluded sources from being built. |
for f in excluded_sources: |
excluded_configs = [] |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
precomped = [_FixPath(config.get(i, '')) for i in precomp_keys] |
# Don't do this for ones that are precompiled header related. |
if f not in precomped: |
@@ -1568,7 +1561,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl): |
# Exclude them now. |
for f in excluded_idl: |
excluded_configs = [] |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
excluded_configs.append((config_name, config)) |
exclusions[f] = excluded_configs |
return exclusions |
@@ -1577,7 +1570,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl): |
def _AddToolFilesToMSVS(p, spec): |
# Add in tool files (rules). |
tool_files = OrderedSet() |
- for _, config in spec['configurations'].iteritems(): |
+ for _, config in spec['configurations'].items(): |
for f in config.get('msvs_tool_files', []): |
tool_files.add(f) |
for f in tool_files: |
@@ -1590,7 +1583,7 @@ def _HandlePreCompiledHeaders(p, sources, spec): |
# kind (i.e. C vs. C++) as the precompiled header source stub needs |
# to have use of precompiled headers disabled. |
extensions_excluded_from_precompile = [] |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
source = config.get('msvs_precompiled_source') |
if source: |
source = _FixPath(source) |
@@ -1611,7 +1604,7 @@ def _HandlePreCompiledHeaders(p, sources, spec): |
else: |
basename, extension = os.path.splitext(source) |
if extension in extensions_excluded_from_precompile: |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
tool = MSVSProject.Tool('VCCLCompilerTool', |
{'UsePrecompiledHeader': '0', |
'ForcedIncludeFiles': '$(NOINHERIT)'}) |
@@ -1662,7 +1655,7 @@ def _WriteMSVSUserFile(project_path, version, spec): |
return # Nothing to add |
# Write out the user file. |
user_file = _CreateMSVSUserFile(project_path, version, spec) |
- for config_name, c_data in spec['configurations'].iteritems(): |
+ for config_name, c_data in spec['configurations'].items(): |
user_file.AddDebugSettings(_ConfigFullName(config_name, c_data), |
action, environment, working_directory) |
user_file.WriteIfChanged() |
@@ -1713,7 +1706,7 @@ def _GetPathDict(root, path): |
def _DictsToFolders(base_path, bucket, flat): |
# Convert to folders recursively. |
children = [] |
- for folder, contents in bucket.iteritems(): |
+ for folder, contents in bucket.items(): |
if type(contents) == dict: |
folder_children = _DictsToFolders(os.path.join(base_path, folder), |
contents, flat) |
@@ -1735,8 +1728,8 @@ def _CollapseSingles(parent, node): |
# such projects up one level. |
if (type(node) == dict and |
len(node) == 1 and |
- node.keys()[0] == parent + '.vcproj'): |
- return node[node.keys()[0]] |
+ next(iter(node)) == parent + '.vcproj'): |
+ return node[next(iter(node))] |
if type(node) != dict: |
return node |
for child in node: |
@@ -1755,8 +1748,8 @@ def _GatherSolutionFolders(sln_projects, project_objects, flat): |
# Walk down from the top until we hit a folder that has more than one entry. |
# In practice, this strips the top-level "src/" dir from the hierarchy in |
# the solution. |
- while len(root) == 1 and type(root[root.keys()[0]]) == dict: |
- root = root[root.keys()[0]] |
+ while len(root) == 1 and type(root[next(iter(root))]) == dict: |
+ root = root[next(iter(root))] |
# Collapse singles. |
root = _CollapseSingles('', root) |
# Merge buckets until everything is a root entry. |
@@ -1785,7 +1778,7 @@ def _GetPlatformOverridesOfProject(spec): |
# Prepare a dict indicating which project configurations are used for which |
# solution configurations for this target. |
config_platform_overrides = {} |
- for config_name, c in spec['configurations'].iteritems(): |
+ for config_name, c in spec['configurations'].items(): |
config_fullname = _ConfigFullName(config_name, c) |
platform = c.get('msvs_target_platform', _ConfigPlatform(c)) |
fixed_config_fullname = '%s|%s' % ( |
@@ -1924,7 +1917,7 @@ def PerformBuild(data, configurations, params): |
msvs_version = params['msvs_version'] |
devenv = os.path.join(msvs_version.path, 'Common7', 'IDE', 'devenv.com') |
- for build_file, build_file_dict in data.iteritems(): |
+ for build_file, build_file_dict in data.items(): |
(build_file_root, build_file_ext) = os.path.splitext(build_file) |
if build_file_ext != '.gyp': |
continue |
@@ -1934,7 +1927,7 @@ def PerformBuild(data, configurations, params): |
for config in configurations: |
arguments = [devenv, sln_path, '/Build', config] |
- print 'Building [%s]: %s' % (config, arguments) |
+ print('Building [%s]: %s' % (config, arguments)) |
rtn = subprocess.check_call(arguments) |
@@ -1986,7 +1979,7 @@ def GenerateOutput(target_list, target_dicts, data, params): |
configs = set() |
for qualified_target in target_list: |
spec = target_dicts[qualified_target] |
- for config_name, config in spec['configurations'].iteritems(): |
+ for config_name, config in spec['configurations'].items(): |
configs.add(_ConfigFullName(config_name, config)) |
configs = list(configs) |
@@ -2029,7 +2022,7 @@ def GenerateOutput(target_list, target_dicts, data, params): |
if generator_flags.get('msvs_error_on_missing_sources', False): |
raise GypError(error_message) |
else: |
- print >> sys.stdout, "Warning: " + error_message |
+ print("Warning: " + error_message, file=sys.stdout) |
def _GenerateMSBuildFiltersFile(filters_path, source_files, |
@@ -2626,7 +2619,7 @@ def _GetConfigurationCondition(name, settings): |
def _GetMSBuildProjectConfigurations(configurations): |
group = ['ItemGroup', {'Label': 'ProjectConfigurations'}] |
- for (name, settings) in sorted(configurations.iteritems()): |
+ for (name, settings) in sorted(configurations.items()): |
configuration, platform = _GetConfigurationAndPlatform(name, settings) |
designation = '%s|%s' % (configuration, platform) |
group.append( |
@@ -2680,7 +2673,7 @@ def _GetMSBuildGlobalProperties(spec, guid, gyp_file_name): |
def _GetMSBuildConfigurationDetails(spec, build_file): |
properties = {} |
- for name, settings in spec['configurations'].iteritems(): |
+ for name, settings in spec['configurations'].items(): |
msbuild_attributes = _GetMSBuildAttributes(spec, settings, build_file) |
condition = _GetConfigurationCondition(name, settings) |
character_set = msbuild_attributes.get('CharacterSet') |
@@ -2709,9 +2702,9 @@ def _GetMSBuildPropertySheets(configurations): |
user_props = r'$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props' |
additional_props = {} |
props_specified = False |
- for name, settings in sorted(configurations.iteritems()): |
+ for name, settings in sorted(configurations.items()): |
configuration = _GetConfigurationCondition(name, settings) |
- if settings.has_key('msbuild_props'): |
+ if 'msbuild_props' in settings: |
additional_props[configuration] = _FixPaths(settings['msbuild_props']) |
props_specified = True |
else: |
@@ -2731,7 +2724,7 @@ def _GetMSBuildPropertySheets(configurations): |
] |
else: |
sheets = [] |
- for condition, props in additional_props.iteritems(): |
+ for condition, props in additional_props.items(): |
import_group = [ |
'ImportGroup', |
{'Label': 'PropertySheets', |
@@ -2764,7 +2757,7 @@ def _ConvertMSVSBuildAttributes(spec, config, build_file): |
elif a == 'ConfigurationType': |
msbuild_attributes[a] = _ConvertMSVSConfigurationType(msvs_attributes[a]) |
else: |
- print 'Warning: Do not know how to convert MSVS attribute ' + a |
+ print('Warning: Do not know how to convert MSVS attribute ' + a) |
return msbuild_attributes |
@@ -2855,7 +2848,7 @@ def _GetMSBuildConfigurationGlobalProperties(spec, configurations, build_file): |
new_paths = '$(ExecutablePath);' + ';'.join(new_paths) |
properties = {} |
- for (name, configuration) in sorted(configurations.iteritems()): |
+ for (name, configuration) in sorted(configurations.items()): |
condition = _GetConfigurationCondition(name, configuration) |
attributes = _GetMSBuildAttributes(spec, configuration, build_file) |
msbuild_settings = configuration['finalized_msbuild_settings'] |
@@ -2877,7 +2870,7 @@ def _GetMSBuildConfigurationGlobalProperties(spec, configurations, build_file): |
_AddConditionalProperty(properties, condition, 'ExecutablePath', |
new_paths) |
tool_settings = msbuild_settings.get('', {}) |
- for name, value in sorted(tool_settings.iteritems()): |
+ for name, value in sorted(tool_settings.items()): |
formatted_value = _GetValueFormattedForMSBuild('', name, value) |
_AddConditionalProperty(properties, condition, name, formatted_value) |
return _GetMSBuildPropertyGroup(spec, None, properties) |
@@ -2946,7 +2939,7 @@ def _GetMSBuildPropertyGroup(spec, label, properties): |
# NOTE: reverse(topsort(DAG)) = topsort(reverse_edges(DAG)) |
for name in reversed(properties_ordered): |
values = properties[name] |
- for value, conditions in sorted(values.iteritems()): |
+ for value, conditions in sorted(values.items()): |
if len(conditions) == num_configurations: |
# If the value is the same all configurations, |
# just add one unconditional entry. |
@@ -2959,18 +2952,18 @@ def _GetMSBuildPropertyGroup(spec, label, properties): |
def _GetMSBuildToolSettingsSections(spec, configurations): |
groups = [] |
- for (name, configuration) in sorted(configurations.iteritems()): |
+ for (name, configuration) in sorted(configurations.items()): |
msbuild_settings = configuration['finalized_msbuild_settings'] |
group = ['ItemDefinitionGroup', |
{'Condition': _GetConfigurationCondition(name, configuration)} |
] |
- for tool_name, tool_settings in sorted(msbuild_settings.iteritems()): |
+ for tool_name, tool_settings in sorted(msbuild_settings.items()): |
# Skip the tool named '' which is a holder of global settings handled |
# by _GetMSBuildConfigurationGlobalProperties. |
if tool_name: |
if tool_settings: |
tool = [tool_name] |
- for name, value in sorted(tool_settings.iteritems()): |
+ for name, value in sorted(tool_settings.items()): |
formatted_value = _GetValueFormattedForMSBuild(tool_name, name, |
value) |
tool.append([name, formatted_value]) |
@@ -3170,7 +3163,7 @@ def _AddSources2(spec, sources, exclusions, grouped_sources, |
{'Condition': condition}, |
'true']) |
# Add precompile if needed |
- for config_name, configuration in spec['configurations'].iteritems(): |
+ for config_name, configuration in spec['configurations'].items(): |
precompiled_source = configuration.get('msvs_precompiled_source', '') |
if precompiled_source != '': |
precompiled_source = _FixPath(precompiled_source) |
@@ -3216,7 +3209,7 @@ def _GetMSBuildProjectReferences(project): |
['Project', guid], |
['ReferenceOutputAssembly', 'false'] |
] |
- for config in dependency.spec.get('configurations', {}).itervalues(): |
+ for config in dependency.spec.get('configurations', {}).values(): |
# If it's disabled in any config, turn it off in the reference. |
if config.get('msvs_2010_disable_uldi_when_referenced', 0): |
project_ref.append(['UseLibraryDependencyInputs', 'false']) |
@@ -3282,7 +3275,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags): |
extension_to_rule_name) |
missing_sources = _VerifySourcesExist(sources, project_dir) |
- for configuration in configurations.itervalues(): |
+ for configuration in configurations.values(): |
_FinalizeMSBuildSettings(spec, configuration) |
# Add attributes to root element |
@@ -3407,7 +3400,7 @@ def _GenerateActionsForMSBuild(spec, actions_to_add): |
""" |
sources_handled_by_action = OrderedSet() |
actions_spec = [] |
- for primary_input, actions in actions_to_add.iteritems(): |
+ for primary_input, actions in actions_to_add.items(): |
inputs = OrderedSet() |
outputs = OrderedSet() |
descriptions = [] |