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 """Code to validate and convert settings of the Microsoft build tools. | 5 """Code to validate and convert settings of the Microsoft build tools. |
6 | 6 |
7 This file contains code to validate and convert settings of the Microsoft | 7 This file contains code to validate and convert settings of the Microsoft |
8 build tools. The function ConvertToMSBuildSettings(), ValidateMSVSSettings(), | 8 build tools. The function ConvertToMSBuildSettings(), ValidateMSVSSettings(), |
9 and ValidateMSBuildSettings() are the entry points. | 9 and ValidateMSBuildSettings() are the entry points. |
10 | 10 |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 '$(ParentName)': '$(ProjectFileName)', | 396 '$(ParentName)': '$(ProjectFileName)', |
397 '$(PlatformName)': '$(Platform)', | 397 '$(PlatformName)': '$(Platform)', |
398 '$(SafeInputName)': '%(Filename)', | 398 '$(SafeInputName)': '%(Filename)', |
399 } | 399 } |
400 for old, new in replace_map.iteritems(): | 400 for old, new in replace_map.iteritems(): |
401 s = s.replace(old, new) | 401 s = s.replace(old, new) |
402 s = FixVCMacroSlashes(s) | 402 s = FixVCMacroSlashes(s) |
403 return s | 403 return s |
404 | 404 |
405 | 405 |
| 406 _EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$') |
| 407 |
| 408 |
406 def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr): | 409 def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr): |
407 """Converts MSVS settings (VS2008 and earlier) to MSBuild settings (VS2010+). | 410 """Converts MSVS settings (VS2008 and earlier) to MSBuild settings (VS2010+). |
408 | 411 |
409 Args: | 412 Args: |
410 msvs_settings: A dictionary. The key is the tool name. The values are | 413 msvs_settings: A dictionary. The key is the tool name. The values are |
411 themselves dictionaries of settings and their values. | 414 themselves dictionaries of settings and their values. |
412 stderr: The stream receiving the error messages. | 415 stderr: The stream receiving the error messages. |
413 | 416 |
414 Returns: | 417 Returns: |
415 A dictionary of MSBuild settings. The key is either the MSBuild tool name | 418 A dictionary of MSBuild settings. The key is either the MSBuild tool name |
416 or the empty string (for the global settings). The values are themselves | 419 or the empty string (for the global settings). The values are themselves |
417 dictionaries of settings and their values. | 420 dictionaries of settings and their values. |
418 """ | 421 """ |
419 msbuild_settings = {} | 422 msbuild_settings = {} |
420 for msvs_tool_name, msvs_tool_settings in msvs_settings.iteritems(): | 423 for msvs_tool_name, msvs_tool_settings in msvs_settings.iteritems(): |
421 if msvs_tool_name in _msvs_to_msbuild_converters: | 424 if msvs_tool_name in _msvs_to_msbuild_converters: |
422 msvs_tool = _msvs_to_msbuild_converters[msvs_tool_name] | 425 msvs_tool = _msvs_to_msbuild_converters[msvs_tool_name] |
423 for msvs_setting, msvs_value in msvs_tool_settings.iteritems(): | 426 for msvs_setting, msvs_value in msvs_tool_settings.iteritems(): |
424 if msvs_setting in msvs_tool: | 427 if msvs_setting in msvs_tool: |
425 # Invoke the translation function. | 428 # Invoke the translation function. |
426 try: | 429 try: |
427 msvs_tool[msvs_setting](msvs_value, msbuild_settings) | 430 msvs_tool[msvs_setting](msvs_value, msbuild_settings) |
428 except ValueError, e: | 431 except ValueError, e: |
429 print >> stderr, ('Warning: while converting %s/%s to MSBuild, ' | 432 print >> stderr, ('Warning: while converting %s/%s to MSBuild, ' |
430 '%s' % (msvs_tool_name, msvs_setting, e)) | 433 '%s' % (msvs_tool_name, msvs_setting, e)) |
431 else: | 434 else: |
432 # We don't know this setting. Give a warning. | 435 # This may be unrecognized because it's an exclusion list. If the |
433 print >> stderr, ('Warning: unrecognized setting %s/%s ' | 436 # setting name has the _excluded suffix, then check the root name. |
434 'while converting to MSBuild.' % | 437 unrecognized = True |
435 (msvs_tool_name, msvs_setting)) | 438 m = re.match(_EXCLUDED_SUFFIX_RE, msvs_setting) |
| 439 if m: |
| 440 root_msvs_setting = m.group(1) |
| 441 unrecognized = root_msvs_setting not in msvs_tool |
| 442 |
| 443 if unrecognized: |
| 444 # We don't know this setting. Give a warning. |
| 445 print >> stderr, ('Warning: unrecognized setting %s/%s ' |
| 446 'while converting to MSBuild.' % |
| 447 (msvs_tool_name, msvs_setting)) |
436 else: | 448 else: |
437 print >> stderr, ('Warning: unrecognized tool %s while converting to ' | 449 print >> stderr, ('Warning: unrecognized tool %s while converting to ' |
438 'MSBuild.' % msvs_tool_name) | 450 'MSBuild.' % msvs_tool_name) |
439 return msbuild_settings | 451 return msbuild_settings |
440 | 452 |
441 | 453 |
442 def ValidateMSVSSettings(settings, stderr=sys.stderr): | 454 def ValidateMSVSSettings(settings, stderr=sys.stderr): |
443 """Validates that the names of the settings are valid for MSVS. | 455 """Validates that the names of the settings are valid for MSVS. |
444 | 456 |
445 Args: | 457 Args: |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 _MSVSOnly(_manifest, 'UseUnicodeResponseFiles', _boolean) | 1054 _MSVSOnly(_manifest, 'UseUnicodeResponseFiles', _boolean) |
1043 | 1055 |
1044 # MSBuild options not found in MSVS. | 1056 # MSBuild options not found in MSVS. |
1045 _MSBuildOnly(_manifest, 'EnableDPIAwareness', _boolean) | 1057 _MSBuildOnly(_manifest, 'EnableDPIAwareness', _boolean) |
1046 _MSBuildOnly(_manifest, 'GenerateCategoryTags', _boolean) # /category | 1058 _MSBuildOnly(_manifest, 'GenerateCategoryTags', _boolean) # /category |
1047 _MSBuildOnly(_manifest, 'ManifestFromManagedAssembly', | 1059 _MSBuildOnly(_manifest, 'ManifestFromManagedAssembly', |
1048 _file_name) # /managedassemblyname | 1060 _file_name) # /managedassemblyname |
1049 _MSBuildOnly(_manifest, 'OutputResourceManifests', _string) # /outputresource | 1061 _MSBuildOnly(_manifest, 'OutputResourceManifests', _string) # /outputresource |
1050 _MSBuildOnly(_manifest, 'SuppressDependencyElement', _boolean) # /nodependency | 1062 _MSBuildOnly(_manifest, 'SuppressDependencyElement', _boolean) # /nodependency |
1051 _MSBuildOnly(_manifest, 'TrackerLogDirectory', _folder_name) | 1063 _MSBuildOnly(_manifest, 'TrackerLogDirectory', _folder_name) |
OLD | NEW |