Initial commit
[yaffs-website] / node_modules / node-gyp / gyp / pylib / gyp / MSVSSettings.py
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
3 # found in the LICENSE file.
4
5 r"""Code to validate and convert settings of the Microsoft build tools.
6
7 This file contains code to validate and convert settings of the Microsoft
8 build tools.  The function ConvertToMSBuildSettings(), ValidateMSVSSettings(),
9 and ValidateMSBuildSettings() are the entry points.
10
11 This file was created by comparing the projects created by Visual Studio 2008
12 and Visual Studio 2010 for all available settings through the user interface.
13 The MSBuild schemas were also considered.  They are typically found in the
14 MSBuild install directory, e.g. c:\Program Files (x86)\MSBuild
15 """
16
17 import sys
18 import re
19
20 # Dictionaries of settings validators. The key is the tool name, the value is
21 # a dictionary mapping setting names to validation functions.
22 _msvs_validators = {}
23 _msbuild_validators = {}
24
25
26 # A dictionary of settings converters. The key is the tool name, the value is
27 # a dictionary mapping setting names to conversion functions.
28 _msvs_to_msbuild_converters = {}
29
30
31 # Tool name mapping from MSVS to MSBuild.
32 _msbuild_name_of_tool = {}
33
34
35 class _Tool(object):
36   """Represents a tool used by MSVS or MSBuild.
37
38   Attributes:
39       msvs_name: The name of the tool in MSVS.
40       msbuild_name: The name of the tool in MSBuild.
41   """
42
43   def __init__(self, msvs_name, msbuild_name):
44     self.msvs_name = msvs_name
45     self.msbuild_name = msbuild_name
46
47
48 def _AddTool(tool):
49   """Adds a tool to the four dictionaries used to process settings.
50
51   This only defines the tool.  Each setting also needs to be added.
52
53   Args:
54     tool: The _Tool object to be added.
55   """
56   _msvs_validators[tool.msvs_name] = {}
57   _msbuild_validators[tool.msbuild_name] = {}
58   _msvs_to_msbuild_converters[tool.msvs_name] = {}
59   _msbuild_name_of_tool[tool.msvs_name] = tool.msbuild_name
60
61
62 def _GetMSBuildToolSettings(msbuild_settings, tool):
63   """Returns an MSBuild tool dictionary.  Creates it if needed."""
64   return msbuild_settings.setdefault(tool.msbuild_name, {})
65
66
67 class _Type(object):
68   """Type of settings (Base class)."""
69
70   def ValidateMSVS(self, value):
71     """Verifies that the value is legal for MSVS.
72
73     Args:
74       value: the value to check for this type.
75
76     Raises:
77       ValueError if value is not valid for MSVS.
78     """
79
80   def ValidateMSBuild(self, value):
81     """Verifies that the value is legal for MSBuild.
82
83     Args:
84       value: the value to check for this type.
85
86     Raises:
87       ValueError if value is not valid for MSBuild.
88     """
89
90   def ConvertToMSBuild(self, value):
91     """Returns the MSBuild equivalent of the MSVS value given.
92
93     Args:
94       value: the MSVS value to convert.
95
96     Returns:
97       the MSBuild equivalent.
98
99     Raises:
100       ValueError if value is not valid.
101     """
102     return value
103
104
105 class _String(_Type):
106   """A setting that's just a string."""
107
108   def ValidateMSVS(self, value):
109     if not isinstance(value, basestring):
110       raise ValueError('expected string; got %r' % value)
111
112   def ValidateMSBuild(self, value):
113     if not isinstance(value, basestring):
114       raise ValueError('expected string; got %r' % value)
115
116   def ConvertToMSBuild(self, value):
117     # Convert the macros
118     return ConvertVCMacrosToMSBuild(value)
119
120
121 class _StringList(_Type):
122   """A settings that's a list of strings."""
123
124   def ValidateMSVS(self, value):
125     if not isinstance(value, basestring) and not isinstance(value, list):
126       raise ValueError('expected string list; got %r' % value)
127
128   def ValidateMSBuild(self, value):
129     if not isinstance(value, basestring) and not isinstance(value, list):
130       raise ValueError('expected string list; got %r' % value)
131
132   def ConvertToMSBuild(self, value):
133     # Convert the macros
134     if isinstance(value, list):
135       return [ConvertVCMacrosToMSBuild(i) for i in value]
136     else:
137       return ConvertVCMacrosToMSBuild(value)
138
139
140 class _Boolean(_Type):
141   """Boolean settings, can have the values 'false' or 'true'."""
142
143   def _Validate(self, value):
144     if value != 'true' and value != 'false':
145       raise ValueError('expected bool; got %r' % value)
146
147   def ValidateMSVS(self, value):
148     self._Validate(value)
149
150   def ValidateMSBuild(self, value):
151     self._Validate(value)
152
153   def ConvertToMSBuild(self, value):
154     self._Validate(value)
155     return value
156
157
158 class _Integer(_Type):
159   """Integer settings."""
160
161   def __init__(self, msbuild_base=10):
162     _Type.__init__(self)
163     self._msbuild_base = msbuild_base
164
165   def ValidateMSVS(self, value):
166     # Try to convert, this will raise ValueError if invalid.
167     self.ConvertToMSBuild(value)
168
169   def ValidateMSBuild(self, value):
170     # Try to convert, this will raise ValueError if invalid.
171     int(value, self._msbuild_base)
172
173   def ConvertToMSBuild(self, value):
174     msbuild_format = (self._msbuild_base == 10) and '%d' or '0x%04x'
175     return msbuild_format % int(value)
176
177
178 class _Enumeration(_Type):
179   """Type of settings that is an enumeration.
180
181   In MSVS, the values are indexes like '0', '1', and '2'.
182   MSBuild uses text labels that are more representative, like 'Win32'.
183
184   Constructor args:
185     label_list: an array of MSBuild labels that correspond to the MSVS index.
186         In the rare cases where MSVS has skipped an index value, None is
187         used in the array to indicate the unused spot.
188     new: an array of labels that are new to MSBuild.
189   """
190
191   def __init__(self, label_list, new=None):
192     _Type.__init__(self)
193     self._label_list = label_list
194     self._msbuild_values = set(value for value in label_list
195                                if value is not None)
196     if new is not None:
197       self._msbuild_values.update(new)
198
199   def ValidateMSVS(self, value):
200     # Try to convert.  It will raise an exception if not valid.
201     self.ConvertToMSBuild(value)
202
203   def ValidateMSBuild(self, value):
204     if value not in self._msbuild_values:
205       raise ValueError('unrecognized enumerated value %s' % value)
206
207   def ConvertToMSBuild(self, value):
208     index = int(value)
209     if index < 0 or index >= len(self._label_list):
210       raise ValueError('index value (%d) not in expected range [0, %d)' %
211                        (index, len(self._label_list)))
212     label = self._label_list[index]
213     if label is None:
214       raise ValueError('converted value for %s not specified.' % value)
215     return label
216
217
218 # Instantiate the various generic types.
219 _boolean = _Boolean()
220 _integer = _Integer()
221 # For now, we don't do any special validation on these types:
222 _string = _String()
223 _file_name = _String()
224 _folder_name = _String()
225 _file_list = _StringList()
226 _folder_list = _StringList()
227 _string_list = _StringList()
228 # Some boolean settings went from numerical values to boolean.  The
229 # mapping is 0: default, 1: false, 2: true.
230 _newly_boolean = _Enumeration(['', 'false', 'true'])
231
232
233 def _Same(tool, name, setting_type):
234   """Defines a setting that has the same name in MSVS and MSBuild.
235
236   Args:
237     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
238     name: the name of the setting.
239     setting_type: the type of this setting.
240   """
241   _Renamed(tool, name, name, setting_type)
242
243
244 def _Renamed(tool, msvs_name, msbuild_name, setting_type):
245   """Defines a setting for which the name has changed.
246
247   Args:
248     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
249     msvs_name: the name of the MSVS setting.
250     msbuild_name: the name of the MSBuild setting.
251     setting_type: the type of this setting.
252   """
253
254   def _Translate(value, msbuild_settings):
255     msbuild_tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
256     msbuild_tool_settings[msbuild_name] = setting_type.ConvertToMSBuild(value)
257
258   _msvs_validators[tool.msvs_name][msvs_name] = setting_type.ValidateMSVS
259   _msbuild_validators[tool.msbuild_name][msbuild_name] = (
260       setting_type.ValidateMSBuild)
261   _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
262
263
264 def _Moved(tool, settings_name, msbuild_tool_name, setting_type):
265   _MovedAndRenamed(tool, settings_name, msbuild_tool_name, settings_name,
266                    setting_type)
267
268
269 def _MovedAndRenamed(tool, msvs_settings_name, msbuild_tool_name,
270                      msbuild_settings_name, setting_type):
271   """Defines a setting that may have moved to a new section.
272
273   Args:
274     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
275     msvs_settings_name: the MSVS name of the setting.
276     msbuild_tool_name: the name of the MSBuild tool to place the setting under.
277     msbuild_settings_name: the MSBuild name of the setting.
278     setting_type: the type of this setting.
279   """
280
281   def _Translate(value, msbuild_settings):
282     tool_settings = msbuild_settings.setdefault(msbuild_tool_name, {})
283     tool_settings[msbuild_settings_name] = setting_type.ConvertToMSBuild(value)
284
285   _msvs_validators[tool.msvs_name][msvs_settings_name] = (
286       setting_type.ValidateMSVS)
287   validator = setting_type.ValidateMSBuild
288   _msbuild_validators[msbuild_tool_name][msbuild_settings_name] = validator
289   _msvs_to_msbuild_converters[tool.msvs_name][msvs_settings_name] = _Translate
290
291
292 def _MSVSOnly(tool, name, setting_type):
293   """Defines a setting that is only found in MSVS.
294
295   Args:
296     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
297     name: the name of the setting.
298     setting_type: the type of this setting.
299   """
300
301   def _Translate(unused_value, unused_msbuild_settings):
302     # Since this is for MSVS only settings, no translation will happen.
303     pass
304
305   _msvs_validators[tool.msvs_name][name] = setting_type.ValidateMSVS
306   _msvs_to_msbuild_converters[tool.msvs_name][name] = _Translate
307
308
309 def _MSBuildOnly(tool, name, setting_type):
310   """Defines a setting that is only found in MSBuild.
311
312   Args:
313     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
314     name: the name of the setting.
315     setting_type: the type of this setting.
316   """
317
318   def _Translate(value, msbuild_settings):
319     # Let msbuild-only properties get translated as-is from msvs_settings.
320     tool_settings = msbuild_settings.setdefault(tool.msbuild_name, {})
321     tool_settings[name] = value
322
323   _msbuild_validators[tool.msbuild_name][name] = setting_type.ValidateMSBuild
324   _msvs_to_msbuild_converters[tool.msvs_name][name] = _Translate
325
326
327 def _ConvertedToAdditionalOption(tool, msvs_name, flag):
328   """Defines a setting that's handled via a command line option in MSBuild.
329
330   Args:
331     tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
332     msvs_name: the name of the MSVS setting that if 'true' becomes a flag
333     flag: the flag to insert at the end of the AdditionalOptions
334   """
335
336   def _Translate(value, msbuild_settings):
337     if value == 'true':
338       tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
339       if 'AdditionalOptions' in tool_settings:
340         new_flags = '%s %s' % (tool_settings['AdditionalOptions'], flag)
341       else:
342         new_flags = flag
343       tool_settings['AdditionalOptions'] = new_flags
344   _msvs_validators[tool.msvs_name][msvs_name] = _boolean.ValidateMSVS
345   _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
346
347
348 def _CustomGeneratePreprocessedFile(tool, msvs_name):
349   def _Translate(value, msbuild_settings):
350     tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
351     if value == '0':
352       tool_settings['PreprocessToFile'] = 'false'
353       tool_settings['PreprocessSuppressLineNumbers'] = 'false'
354     elif value == '1':  # /P
355       tool_settings['PreprocessToFile'] = 'true'
356       tool_settings['PreprocessSuppressLineNumbers'] = 'false'
357     elif value == '2':  # /EP /P
358       tool_settings['PreprocessToFile'] = 'true'
359       tool_settings['PreprocessSuppressLineNumbers'] = 'true'
360     else:
361       raise ValueError('value must be one of [0, 1, 2]; got %s' % value)
362   # Create a bogus validator that looks for '0', '1', or '2'
363   msvs_validator = _Enumeration(['a', 'b', 'c']).ValidateMSVS
364   _msvs_validators[tool.msvs_name][msvs_name] = msvs_validator
365   msbuild_validator = _boolean.ValidateMSBuild
366   msbuild_tool_validators = _msbuild_validators[tool.msbuild_name]
367   msbuild_tool_validators['PreprocessToFile'] = msbuild_validator
368   msbuild_tool_validators['PreprocessSuppressLineNumbers'] = msbuild_validator
369   _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
370
371
372 fix_vc_macro_slashes_regex_list = ('IntDir', 'OutDir')
373 fix_vc_macro_slashes_regex = re.compile(
374   r'(\$\((?:%s)\))(?:[\\/]+)' % "|".join(fix_vc_macro_slashes_regex_list)
375 )
376
377 # Regular expression to detect keys that were generated by exclusion lists
378 _EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$')
379
380
381 def _ValidateExclusionSetting(setting, settings, error_msg, stderr=sys.stderr):
382   """Verify that 'setting' is valid if it is generated from an exclusion list.
383
384   If the setting appears to be generated from an exclusion list, the root name
385   is checked.
386
387   Args:
388       setting:   A string that is the setting name to validate
389       settings:  A dictionary where the keys are valid settings
390       error_msg: The message to emit in the event of error
391       stderr:    The stream receiving the error messages.
392   """
393   # This may be unrecognized because it's an exclusion list. If the
394   # setting name has the _excluded suffix, then check the root name.
395   unrecognized = True
396   m = re.match(_EXCLUDED_SUFFIX_RE, setting)
397   if m:
398     root_setting = m.group(1)
399     unrecognized = root_setting not in settings
400
401   if unrecognized:
402     # We don't know this setting. Give a warning.
403     print >> stderr, error_msg
404
405
406 def FixVCMacroSlashes(s):
407   """Replace macros which have excessive following slashes.
408
409   These macros are known to have a built-in trailing slash. Furthermore, many
410   scripts hiccup on processing paths with extra slashes in the middle.
411
412   This list is probably not exhaustive.  Add as needed.
413   """
414   if '$' in s:
415     s = fix_vc_macro_slashes_regex.sub(r'\1', s)
416   return s
417
418
419 def ConvertVCMacrosToMSBuild(s):
420   """Convert the the MSVS macros found in the string to the MSBuild equivalent.
421
422   This list is probably not exhaustive.  Add as needed.
423   """
424   if '$' in s:
425     replace_map = {
426         '$(ConfigurationName)': '$(Configuration)',
427         '$(InputDir)': '%(RelativeDir)',
428         '$(InputExt)': '%(Extension)',
429         '$(InputFileName)': '%(Filename)%(Extension)',
430         '$(InputName)': '%(Filename)',
431         '$(InputPath)': '%(Identity)',
432         '$(ParentName)': '$(ProjectFileName)',
433         '$(PlatformName)': '$(Platform)',
434         '$(SafeInputName)': '%(Filename)',
435     }
436     for old, new in replace_map.iteritems():
437       s = s.replace(old, new)
438     s = FixVCMacroSlashes(s)
439   return s
440
441
442 def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr):
443   """Converts MSVS settings (VS2008 and earlier) to MSBuild settings (VS2010+).
444
445   Args:
446       msvs_settings: A dictionary.  The key is the tool name.  The values are
447           themselves dictionaries of settings and their values.
448       stderr: The stream receiving the error messages.
449
450   Returns:
451       A dictionary of MSBuild settings.  The key is either the MSBuild tool name
452       or the empty string (for the global settings).  The values are themselves
453       dictionaries of settings and their values.
454   """
455   msbuild_settings = {}
456   for msvs_tool_name, msvs_tool_settings in msvs_settings.iteritems():
457     if msvs_tool_name in _msvs_to_msbuild_converters:
458       msvs_tool = _msvs_to_msbuild_converters[msvs_tool_name]
459       for msvs_setting, msvs_value in msvs_tool_settings.iteritems():
460         if msvs_setting in msvs_tool:
461           # Invoke the translation function.
462           try:
463             msvs_tool[msvs_setting](msvs_value, msbuild_settings)
464           except ValueError, e:
465             print >> stderr, ('Warning: while converting %s/%s to MSBuild, '
466                               '%s' % (msvs_tool_name, msvs_setting, e))
467         else:
468           _ValidateExclusionSetting(msvs_setting,
469                                     msvs_tool,
470                                     ('Warning: unrecognized setting %s/%s '
471                                      'while converting to MSBuild.' %
472                                      (msvs_tool_name, msvs_setting)),
473                                     stderr)
474     else:
475       print >> stderr, ('Warning: unrecognized tool %s while converting to '
476                         'MSBuild.' % msvs_tool_name)
477   return msbuild_settings
478
479
480 def ValidateMSVSSettings(settings, stderr=sys.stderr):
481   """Validates that the names of the settings are valid for MSVS.
482
483   Args:
484       settings: A dictionary.  The key is the tool name.  The values are
485           themselves dictionaries of settings and their values.
486       stderr: The stream receiving the error messages.
487   """
488   _ValidateSettings(_msvs_validators, settings, stderr)
489
490
491 def ValidateMSBuildSettings(settings, stderr=sys.stderr):
492   """Validates that the names of the settings are valid for MSBuild.
493
494   Args:
495       settings: A dictionary.  The key is the tool name.  The values are
496           themselves dictionaries of settings and their values.
497       stderr: The stream receiving the error messages.
498   """
499   _ValidateSettings(_msbuild_validators, settings, stderr)
500
501
502 def _ValidateSettings(validators, settings, stderr):
503   """Validates that the settings are valid for MSBuild or MSVS.
504
505   We currently only validate the names of the settings, not their values.
506
507   Args:
508       validators: A dictionary of tools and their validators.
509       settings: A dictionary.  The key is the tool name.  The values are
510           themselves dictionaries of settings and their values.
511       stderr: The stream receiving the error messages.
512   """
513   for tool_name in settings:
514     if tool_name in validators:
515       tool_validators = validators[tool_name]
516       for setting, value in settings[tool_name].iteritems():
517         if setting in tool_validators:
518           try:
519             tool_validators[setting](value)
520           except ValueError, e:
521             print >> stderr, ('Warning: for %s/%s, %s' %
522                               (tool_name, setting, e))
523         else:
524           _ValidateExclusionSetting(setting,
525                                     tool_validators,
526                                     ('Warning: unrecognized setting %s/%s' %
527                                      (tool_name, setting)),
528                                     stderr)
529
530     else:
531       print >> stderr, ('Warning: unrecognized tool %s' % tool_name)
532
533
534 # MSVS and MBuild names of the tools.
535 _compile = _Tool('VCCLCompilerTool', 'ClCompile')
536 _link = _Tool('VCLinkerTool', 'Link')
537 _midl = _Tool('VCMIDLTool', 'Midl')
538 _rc = _Tool('VCResourceCompilerTool', 'ResourceCompile')
539 _lib = _Tool('VCLibrarianTool', 'Lib')
540 _manifest = _Tool('VCManifestTool', 'Manifest')
541 _masm = _Tool('MASM', 'MASM')
542
543
544 _AddTool(_compile)
545 _AddTool(_link)
546 _AddTool(_midl)
547 _AddTool(_rc)
548 _AddTool(_lib)
549 _AddTool(_manifest)
550 _AddTool(_masm)
551 # Add sections only found in the MSBuild settings.
552 _msbuild_validators[''] = {}
553 _msbuild_validators['ProjectReference'] = {}
554 _msbuild_validators['ManifestResourceCompile'] = {}
555
556 # Descriptions of the compiler options, i.e. VCCLCompilerTool in MSVS and
557 # ClCompile in MSBuild.
558 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\cl.xml" for
559 # the schema of the MSBuild ClCompile settings.
560
561 # Options that have the same name in MSVS and MSBuild
562 _Same(_compile, 'AdditionalIncludeDirectories', _folder_list)  # /I
563 _Same(_compile, 'AdditionalOptions', _string_list)
564 _Same(_compile, 'AdditionalUsingDirectories', _folder_list)  # /AI
565 _Same(_compile, 'AssemblerListingLocation', _file_name)  # /Fa
566 _Same(_compile, 'BrowseInformationFile', _file_name)
567 _Same(_compile, 'BufferSecurityCheck', _boolean)  # /GS
568 _Same(_compile, 'DisableLanguageExtensions', _boolean)  # /Za
569 _Same(_compile, 'DisableSpecificWarnings', _string_list)  # /wd
570 _Same(_compile, 'EnableFiberSafeOptimizations', _boolean)  # /GT
571 _Same(_compile, 'EnablePREfast', _boolean)  # /analyze Visible='false'
572 _Same(_compile, 'ExpandAttributedSource', _boolean)  # /Fx
573 _Same(_compile, 'FloatingPointExceptions', _boolean)  # /fp:except
574 _Same(_compile, 'ForceConformanceInForLoopScope', _boolean)  # /Zc:forScope
575 _Same(_compile, 'ForcedIncludeFiles', _file_list)  # /FI
576 _Same(_compile, 'ForcedUsingFiles', _file_list)  # /FU
577 _Same(_compile, 'GenerateXMLDocumentationFiles', _boolean)  # /doc
578 _Same(_compile, 'IgnoreStandardIncludePath', _boolean)  # /X
579 _Same(_compile, 'MinimalRebuild', _boolean)  # /Gm
580 _Same(_compile, 'OmitDefaultLibName', _boolean)  # /Zl
581 _Same(_compile, 'OmitFramePointers', _boolean)  # /Oy
582 _Same(_compile, 'PreprocessorDefinitions', _string_list)  # /D
583 _Same(_compile, 'ProgramDataBaseFileName', _file_name)  # /Fd
584 _Same(_compile, 'RuntimeTypeInfo', _boolean)  # /GR
585 _Same(_compile, 'ShowIncludes', _boolean)  # /showIncludes
586 _Same(_compile, 'SmallerTypeCheck', _boolean)  # /RTCc
587 _Same(_compile, 'StringPooling', _boolean)  # /GF
588 _Same(_compile, 'SuppressStartupBanner', _boolean)  # /nologo
589 _Same(_compile, 'TreatWChar_tAsBuiltInType', _boolean)  # /Zc:wchar_t
590 _Same(_compile, 'UndefineAllPreprocessorDefinitions', _boolean)  # /u
591 _Same(_compile, 'UndefinePreprocessorDefinitions', _string_list)  # /U
592 _Same(_compile, 'UseFullPaths', _boolean)  # /FC
593 _Same(_compile, 'WholeProgramOptimization', _boolean)  # /GL
594 _Same(_compile, 'XMLDocumentationFileName', _file_name)
595
596 _Same(_compile, 'AssemblerOutput',
597       _Enumeration(['NoListing',
598                     'AssemblyCode',  # /FA
599                     'All',  # /FAcs
600                     'AssemblyAndMachineCode',  # /FAc
601                     'AssemblyAndSourceCode']))  # /FAs
602 _Same(_compile, 'BasicRuntimeChecks',
603       _Enumeration(['Default',
604                     'StackFrameRuntimeCheck',  # /RTCs
605                     'UninitializedLocalUsageCheck',  # /RTCu
606                     'EnableFastChecks']))  # /RTC1
607 _Same(_compile, 'BrowseInformation',
608       _Enumeration(['false',
609                     'true',  # /FR
610                     'true']))  # /Fr
611 _Same(_compile, 'CallingConvention',
612       _Enumeration(['Cdecl',  # /Gd
613                     'FastCall',  # /Gr
614                     'StdCall',  # /Gz
615                     'VectorCall']))  # /Gv
616 _Same(_compile, 'CompileAs',
617       _Enumeration(['Default',
618                     'CompileAsC',  # /TC
619                     'CompileAsCpp']))  # /TP
620 _Same(_compile, 'DebugInformationFormat',
621       _Enumeration(['',  # Disabled
622                     'OldStyle',  # /Z7
623                     None,
624                     'ProgramDatabase',  # /Zi
625                     'EditAndContinue']))  # /ZI
626 _Same(_compile, 'EnableEnhancedInstructionSet',
627       _Enumeration(['NotSet',
628                     'StreamingSIMDExtensions',  # /arch:SSE
629                     'StreamingSIMDExtensions2',  # /arch:SSE2
630                     'AdvancedVectorExtensions',  # /arch:AVX (vs2012+)
631                     'NoExtensions',  # /arch:IA32 (vs2012+)
632                     # This one only exists in the new msbuild format.
633                     'AdvancedVectorExtensions2',  # /arch:AVX2 (vs2013r2+)
634                     ]))
635 _Same(_compile, 'ErrorReporting',
636       _Enumeration(['None',  # /errorReport:none
637                     'Prompt',  # /errorReport:prompt
638                     'Queue'],  # /errorReport:queue
639                    new=['Send']))  # /errorReport:send"
640 _Same(_compile, 'ExceptionHandling',
641       _Enumeration(['false',
642                     'Sync',  # /EHsc
643                     'Async'],  # /EHa
644                    new=['SyncCThrow']))  # /EHs
645 _Same(_compile, 'FavorSizeOrSpeed',
646       _Enumeration(['Neither',
647                     'Speed',  # /Ot
648                     'Size']))  # /Os
649 _Same(_compile, 'FloatingPointModel',
650       _Enumeration(['Precise',  # /fp:precise
651                     'Strict',  # /fp:strict
652                     'Fast']))  # /fp:fast
653 _Same(_compile, 'InlineFunctionExpansion',
654       _Enumeration(['Default',
655                     'OnlyExplicitInline',  # /Ob1
656                     'AnySuitable'],  # /Ob2
657                    new=['Disabled']))  # /Ob0
658 _Same(_compile, 'Optimization',
659       _Enumeration(['Disabled',  # /Od
660                     'MinSpace',  # /O1
661                     'MaxSpeed',  # /O2
662                     'Full']))  # /Ox
663 _Same(_compile, 'RuntimeLibrary',
664       _Enumeration(['MultiThreaded',  # /MT
665                     'MultiThreadedDebug',  # /MTd
666                     'MultiThreadedDLL',  # /MD
667                     'MultiThreadedDebugDLL']))  # /MDd
668 _Same(_compile, 'StructMemberAlignment',
669       _Enumeration(['Default',
670                     '1Byte',  # /Zp1
671                     '2Bytes',  # /Zp2
672                     '4Bytes',  # /Zp4
673                     '8Bytes',  # /Zp8
674                     '16Bytes']))  # /Zp16
675 _Same(_compile, 'WarningLevel',
676       _Enumeration(['TurnOffAllWarnings',  # /W0
677                     'Level1',  # /W1
678                     'Level2',  # /W2
679                     'Level3',  # /W3
680                     'Level4'],  # /W4
681                    new=['EnableAllWarnings']))  # /Wall
682
683 # Options found in MSVS that have been renamed in MSBuild.
684 _Renamed(_compile, 'EnableFunctionLevelLinking', 'FunctionLevelLinking',
685          _boolean)  # /Gy
686 _Renamed(_compile, 'EnableIntrinsicFunctions', 'IntrinsicFunctions',
687          _boolean)  # /Oi
688 _Renamed(_compile, 'KeepComments', 'PreprocessKeepComments', _boolean)  # /C
689 _Renamed(_compile, 'ObjectFile', 'ObjectFileName', _file_name)  # /Fo
690 _Renamed(_compile, 'OpenMP', 'OpenMPSupport', _boolean)  # /openmp
691 _Renamed(_compile, 'PrecompiledHeaderThrough', 'PrecompiledHeaderFile',
692          _file_name)  # Used with /Yc and /Yu
693 _Renamed(_compile, 'PrecompiledHeaderFile', 'PrecompiledHeaderOutputFile',
694          _file_name)  # /Fp
695 _Renamed(_compile, 'UsePrecompiledHeader', 'PrecompiledHeader',
696          _Enumeration(['NotUsing',  # VS recognized '' for this value too.
697                        'Create',   # /Yc
698                        'Use']))  # /Yu
699 _Renamed(_compile, 'WarnAsError', 'TreatWarningAsError', _boolean)  # /WX
700
701 _ConvertedToAdditionalOption(_compile, 'DefaultCharIsUnsigned', '/J')
702
703 # MSVS options not found in MSBuild.
704 _MSVSOnly(_compile, 'Detect64BitPortabilityProblems', _boolean)
705 _MSVSOnly(_compile, 'UseUnicodeResponseFiles', _boolean)
706
707 # MSBuild options not found in MSVS.
708 _MSBuildOnly(_compile, 'BuildingInIDE', _boolean)
709 _MSBuildOnly(_compile, 'CompileAsManaged',
710              _Enumeration([], new=['false',
711                                    'true']))  # /clr
712 _MSBuildOnly(_compile, 'CreateHotpatchableImage', _boolean)  # /hotpatch
713 _MSBuildOnly(_compile, 'MultiProcessorCompilation', _boolean)  # /MP
714 _MSBuildOnly(_compile, 'PreprocessOutputPath', _string)  # /Fi
715 _MSBuildOnly(_compile, 'ProcessorNumber', _integer)  # the number of processors
716 _MSBuildOnly(_compile, 'TrackerLogDirectory', _folder_name)
717 _MSBuildOnly(_compile, 'TreatSpecificWarningsAsErrors', _string_list)  # /we
718 _MSBuildOnly(_compile, 'UseUnicodeForAssemblerListing', _boolean)  # /FAu
719
720 # Defines a setting that needs very customized processing
721 _CustomGeneratePreprocessedFile(_compile, 'GeneratePreprocessedFile')
722
723
724 # Directives for converting MSVS VCLinkerTool to MSBuild Link.
725 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\link.xml" for
726 # the schema of the MSBuild Link settings.
727
728 # Options that have the same name in MSVS and MSBuild
729 _Same(_link, 'AdditionalDependencies', _file_list)
730 _Same(_link, 'AdditionalLibraryDirectories', _folder_list)  # /LIBPATH
731 #  /MANIFESTDEPENDENCY:
732 _Same(_link, 'AdditionalManifestDependencies', _file_list)
733 _Same(_link, 'AdditionalOptions', _string_list)
734 _Same(_link, 'AddModuleNamesToAssembly', _file_list)  # /ASSEMBLYMODULE
735 _Same(_link, 'AllowIsolation', _boolean)  # /ALLOWISOLATION
736 _Same(_link, 'AssemblyLinkResource', _file_list)  # /ASSEMBLYLINKRESOURCE
737 _Same(_link, 'BaseAddress', _string)  # /BASE
738 _Same(_link, 'CLRUnmanagedCodeCheck', _boolean)  # /CLRUNMANAGEDCODECHECK
739 _Same(_link, 'DelayLoadDLLs', _file_list)  # /DELAYLOAD
740 _Same(_link, 'DelaySign', _boolean)  # /DELAYSIGN
741 _Same(_link, 'EmbedManagedResourceFile', _file_list)  # /ASSEMBLYRESOURCE
742 _Same(_link, 'EnableUAC', _boolean)  # /MANIFESTUAC
743 _Same(_link, 'EntryPointSymbol', _string)  # /ENTRY
744 _Same(_link, 'ForceSymbolReferences', _file_list)  # /INCLUDE
745 _Same(_link, 'FunctionOrder', _file_name)  # /ORDER
746 _Same(_link, 'GenerateDebugInformation', _boolean)  # /DEBUG
747 _Same(_link, 'GenerateMapFile', _boolean)  # /MAP
748 _Same(_link, 'HeapCommitSize', _string)
749 _Same(_link, 'HeapReserveSize', _string)  # /HEAP
750 _Same(_link, 'IgnoreAllDefaultLibraries', _boolean)  # /NODEFAULTLIB
751 _Same(_link, 'IgnoreEmbeddedIDL', _boolean)  # /IGNOREIDL
752 _Same(_link, 'ImportLibrary', _file_name)  # /IMPLIB
753 _Same(_link, 'KeyContainer', _file_name)  # /KEYCONTAINER
754 _Same(_link, 'KeyFile', _file_name)  # /KEYFILE
755 _Same(_link, 'ManifestFile', _file_name)  # /ManifestFile
756 _Same(_link, 'MapExports', _boolean)  # /MAPINFO:EXPORTS
757 _Same(_link, 'MapFileName', _file_name)
758 _Same(_link, 'MergedIDLBaseFileName', _file_name)  # /IDLOUT
759 _Same(_link, 'MergeSections', _string)  # /MERGE
760 _Same(_link, 'MidlCommandFile', _file_name)  # /MIDL
761 _Same(_link, 'ModuleDefinitionFile', _file_name)  # /DEF
762 _Same(_link, 'OutputFile', _file_name)  # /OUT
763 _Same(_link, 'PerUserRedirection', _boolean)
764 _Same(_link, 'Profile', _boolean)  # /PROFILE
765 _Same(_link, 'ProfileGuidedDatabase', _file_name)  # /PGD
766 _Same(_link, 'ProgramDatabaseFile', _file_name)  # /PDB
767 _Same(_link, 'RegisterOutput', _boolean)
768 _Same(_link, 'SetChecksum', _boolean)  # /RELEASE
769 _Same(_link, 'StackCommitSize', _string)
770 _Same(_link, 'StackReserveSize', _string)  # /STACK
771 _Same(_link, 'StripPrivateSymbols', _file_name)  # /PDBSTRIPPED
772 _Same(_link, 'SupportUnloadOfDelayLoadedDLL', _boolean)  # /DELAY:UNLOAD
773 _Same(_link, 'SuppressStartupBanner', _boolean)  # /NOLOGO
774 _Same(_link, 'SwapRunFromCD', _boolean)  # /SWAPRUN:CD
775 _Same(_link, 'TurnOffAssemblyGeneration', _boolean)  # /NOASSEMBLY
776 _Same(_link, 'TypeLibraryFile', _file_name)  # /TLBOUT
777 _Same(_link, 'TypeLibraryResourceID', _integer)  # /TLBID
778 _Same(_link, 'UACUIAccess', _boolean)  # /uiAccess='true'
779 _Same(_link, 'Version', _string)  # /VERSION
780
781 _Same(_link, 'EnableCOMDATFolding', _newly_boolean)  # /OPT:ICF
782 _Same(_link, 'FixedBaseAddress', _newly_boolean)  # /FIXED
783 _Same(_link, 'LargeAddressAware', _newly_boolean)  # /LARGEADDRESSAWARE
784 _Same(_link, 'OptimizeReferences', _newly_boolean)  # /OPT:REF
785 _Same(_link, 'RandomizedBaseAddress', _newly_boolean)  # /DYNAMICBASE
786 _Same(_link, 'TerminalServerAware', _newly_boolean)  # /TSAWARE
787
788 _subsystem_enumeration = _Enumeration(
789     ['NotSet',
790      'Console',  # /SUBSYSTEM:CONSOLE
791      'Windows',  # /SUBSYSTEM:WINDOWS
792      'Native',  # /SUBSYSTEM:NATIVE
793      'EFI Application',  # /SUBSYSTEM:EFI_APPLICATION
794      'EFI Boot Service Driver',  # /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
795      'EFI ROM',  # /SUBSYSTEM:EFI_ROM
796      'EFI Runtime',  # /SUBSYSTEM:EFI_RUNTIME_DRIVER
797      'WindowsCE'],  # /SUBSYSTEM:WINDOWSCE
798     new=['POSIX'])  # /SUBSYSTEM:POSIX
799
800 _target_machine_enumeration = _Enumeration(
801     ['NotSet',
802      'MachineX86',  # /MACHINE:X86
803      None,
804      'MachineARM',  # /MACHINE:ARM
805      'MachineEBC',  # /MACHINE:EBC
806      'MachineIA64',  # /MACHINE:IA64
807      None,
808      'MachineMIPS',  # /MACHINE:MIPS
809      'MachineMIPS16',  # /MACHINE:MIPS16
810      'MachineMIPSFPU',  # /MACHINE:MIPSFPU
811      'MachineMIPSFPU16',  # /MACHINE:MIPSFPU16
812      None,
813      None,
814      None,
815      'MachineSH4',  # /MACHINE:SH4
816      None,
817      'MachineTHUMB',  # /MACHINE:THUMB
818      'MachineX64'])  # /MACHINE:X64
819
820 _Same(_link, 'AssemblyDebug',
821       _Enumeration(['',
822                     'true',  # /ASSEMBLYDEBUG
823                     'false']))  # /ASSEMBLYDEBUG:DISABLE
824 _Same(_link, 'CLRImageType',
825       _Enumeration(['Default',
826                     'ForceIJWImage',  # /CLRIMAGETYPE:IJW
827                     'ForcePureILImage',  # /Switch="CLRIMAGETYPE:PURE
828                     'ForceSafeILImage']))  # /Switch="CLRIMAGETYPE:SAFE
829 _Same(_link, 'CLRThreadAttribute',
830       _Enumeration(['DefaultThreadingAttribute',  # /CLRTHREADATTRIBUTE:NONE
831                     'MTAThreadingAttribute',  # /CLRTHREADATTRIBUTE:MTA
832                     'STAThreadingAttribute']))  # /CLRTHREADATTRIBUTE:STA
833 _Same(_link, 'DataExecutionPrevention',
834       _Enumeration(['',
835                     'false',  # /NXCOMPAT:NO
836                     'true']))  # /NXCOMPAT
837 _Same(_link, 'Driver',
838       _Enumeration(['NotSet',
839                     'Driver',  # /Driver
840                     'UpOnly',  # /DRIVER:UPONLY
841                     'WDM']))  # /DRIVER:WDM
842 _Same(_link, 'LinkTimeCodeGeneration',
843       _Enumeration(['Default',
844                     'UseLinkTimeCodeGeneration',  # /LTCG
845                     'PGInstrument',  # /LTCG:PGInstrument
846                     'PGOptimization',  # /LTCG:PGOptimize
847                     'PGUpdate']))  # /LTCG:PGUpdate
848 _Same(_link, 'ShowProgress',
849       _Enumeration(['NotSet',
850                     'LinkVerbose',  # /VERBOSE
851                     'LinkVerboseLib'],  # /VERBOSE:Lib
852                    new=['LinkVerboseICF',  # /VERBOSE:ICF
853                         'LinkVerboseREF',  # /VERBOSE:REF
854                         'LinkVerboseSAFESEH',  # /VERBOSE:SAFESEH
855                         'LinkVerboseCLR']))  # /VERBOSE:CLR
856 _Same(_link, 'SubSystem', _subsystem_enumeration)
857 _Same(_link, 'TargetMachine', _target_machine_enumeration)
858 _Same(_link, 'UACExecutionLevel',
859       _Enumeration(['AsInvoker',  # /level='asInvoker'
860                     'HighestAvailable',  # /level='highestAvailable'
861                     'RequireAdministrator']))  # /level='requireAdministrator'
862 _Same(_link, 'MinimumRequiredVersion', _string)
863 _Same(_link, 'TreatLinkerWarningAsErrors', _boolean)  # /WX
864
865
866 # Options found in MSVS that have been renamed in MSBuild.
867 _Renamed(_link, 'ErrorReporting', 'LinkErrorReporting',
868          _Enumeration(['NoErrorReport',  # /ERRORREPORT:NONE
869                        'PromptImmediately',  # /ERRORREPORT:PROMPT
870                        'QueueForNextLogin'],  # /ERRORREPORT:QUEUE
871                       new=['SendErrorReport']))  # /ERRORREPORT:SEND
872 _Renamed(_link, 'IgnoreDefaultLibraryNames', 'IgnoreSpecificDefaultLibraries',
873          _file_list)  # /NODEFAULTLIB
874 _Renamed(_link, 'ResourceOnlyDLL', 'NoEntryPoint', _boolean)  # /NOENTRY
875 _Renamed(_link, 'SwapRunFromNet', 'SwapRunFromNET', _boolean)  # /SWAPRUN:NET
876
877 _Moved(_link, 'GenerateManifest', '', _boolean)
878 _Moved(_link, 'IgnoreImportLibrary', '', _boolean)
879 _Moved(_link, 'LinkIncremental', '', _newly_boolean)
880 _Moved(_link, 'LinkLibraryDependencies', 'ProjectReference', _boolean)
881 _Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean)
882
883 # MSVS options not found in MSBuild.
884 _MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean)
885 _MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean)
886
887 # MSBuild options not found in MSVS.
888 _MSBuildOnly(_link, 'BuildingInIDE', _boolean)
889 _MSBuildOnly(_link, 'ImageHasSafeExceptionHandlers', _boolean)  # /SAFESEH
890 _MSBuildOnly(_link, 'LinkDLL', _boolean)  # /DLL Visible='false'
891 _MSBuildOnly(_link, 'LinkStatus', _boolean)  # /LTCG:STATUS
892 _MSBuildOnly(_link, 'PreventDllBinding', _boolean)  # /ALLOWBIND
893 _MSBuildOnly(_link, 'SupportNobindOfDelayLoadedDLL', _boolean)  # /DELAY:NOBIND
894 _MSBuildOnly(_link, 'TrackerLogDirectory', _folder_name)
895 _MSBuildOnly(_link, 'MSDOSStubFileName', _file_name)  # /STUB Visible='false'
896 _MSBuildOnly(_link, 'SectionAlignment', _integer)  # /ALIGN
897 _MSBuildOnly(_link, 'SpecifySectionAttributes', _string)  # /SECTION
898 _MSBuildOnly(_link, 'ForceFileOutput',
899              _Enumeration([], new=['Enabled',  # /FORCE
900                                    # /FORCE:MULTIPLE
901                                    'MultiplyDefinedSymbolOnly',
902                                    'UndefinedSymbolOnly']))  # /FORCE:UNRESOLVED
903 _MSBuildOnly(_link, 'CreateHotPatchableImage',
904              _Enumeration([], new=['Enabled',  # /FUNCTIONPADMIN
905                                    'X86Image',  # /FUNCTIONPADMIN:5
906                                    'X64Image',  # /FUNCTIONPADMIN:6
907                                    'ItaniumImage']))  # /FUNCTIONPADMIN:16
908 _MSBuildOnly(_link, 'CLRSupportLastError',
909              _Enumeration([], new=['Enabled',  # /CLRSupportLastError
910                                    'Disabled',  # /CLRSupportLastError:NO
911                                    # /CLRSupportLastError:SYSTEMDLL
912                                    'SystemDlls']))
913
914
915 # Directives for converting VCResourceCompilerTool to ResourceCompile.
916 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\rc.xml" for
917 # the schema of the MSBuild ResourceCompile settings.
918
919 _Same(_rc, 'AdditionalOptions', _string_list)
920 _Same(_rc, 'AdditionalIncludeDirectories', _folder_list)  # /I
921 _Same(_rc, 'Culture', _Integer(msbuild_base=16))
922 _Same(_rc, 'IgnoreStandardIncludePath', _boolean)  # /X
923 _Same(_rc, 'PreprocessorDefinitions', _string_list)  # /D
924 _Same(_rc, 'ResourceOutputFileName', _string)  # /fo
925 _Same(_rc, 'ShowProgress', _boolean)  # /v
926 # There is no UI in VisualStudio 2008 to set the following properties.
927 # However they are found in CL and other tools.  Include them here for
928 # completeness, as they are very likely to have the same usage pattern.
929 _Same(_rc, 'SuppressStartupBanner', _boolean)  # /nologo
930 _Same(_rc, 'UndefinePreprocessorDefinitions', _string_list)  # /u
931
932 # MSBuild options not found in MSVS.
933 _MSBuildOnly(_rc, 'NullTerminateStrings', _boolean)  # /n
934 _MSBuildOnly(_rc, 'TrackerLogDirectory', _folder_name)
935
936
937 # Directives for converting VCMIDLTool to Midl.
938 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\midl.xml" for
939 # the schema of the MSBuild Midl settings.
940
941 _Same(_midl, 'AdditionalIncludeDirectories', _folder_list)  # /I
942 _Same(_midl, 'AdditionalOptions', _string_list)
943 _Same(_midl, 'CPreprocessOptions', _string)  # /cpp_opt
944 _Same(_midl, 'ErrorCheckAllocations', _boolean)  # /error allocation
945 _Same(_midl, 'ErrorCheckBounds', _boolean)  # /error bounds_check
946 _Same(_midl, 'ErrorCheckEnumRange', _boolean)  # /error enum
947 _Same(_midl, 'ErrorCheckRefPointers', _boolean)  # /error ref
948 _Same(_midl, 'ErrorCheckStubData', _boolean)  # /error stub_data
949 _Same(_midl, 'GenerateStublessProxies', _boolean)  # /Oicf
950 _Same(_midl, 'GenerateTypeLibrary', _boolean)
951 _Same(_midl, 'HeaderFileName', _file_name)  # /h
952 _Same(_midl, 'IgnoreStandardIncludePath', _boolean)  # /no_def_idir
953 _Same(_midl, 'InterfaceIdentifierFileName', _file_name)  # /iid
954 _Same(_midl, 'MkTypLibCompatible', _boolean)  # /mktyplib203
955 _Same(_midl, 'OutputDirectory', _string)  # /out
956 _Same(_midl, 'PreprocessorDefinitions', _string_list)  # /D
957 _Same(_midl, 'ProxyFileName', _file_name)  # /proxy
958 _Same(_midl, 'RedirectOutputAndErrors', _file_name)  # /o
959 _Same(_midl, 'SuppressStartupBanner', _boolean)  # /nologo
960 _Same(_midl, 'TypeLibraryName', _file_name)  # /tlb
961 _Same(_midl, 'UndefinePreprocessorDefinitions', _string_list)  # /U
962 _Same(_midl, 'WarnAsError', _boolean)  # /WX
963
964 _Same(_midl, 'DefaultCharType',
965       _Enumeration(['Unsigned',  # /char unsigned
966                     'Signed',  # /char signed
967                     'Ascii']))  # /char ascii7
968 _Same(_midl, 'TargetEnvironment',
969       _Enumeration(['NotSet',
970                     'Win32',  # /env win32
971                     'Itanium',  # /env ia64
972                     'X64']))  # /env x64
973 _Same(_midl, 'EnableErrorChecks',
974       _Enumeration(['EnableCustom',
975                     'None',  # /error none
976                     'All']))  # /error all
977 _Same(_midl, 'StructMemberAlignment',
978       _Enumeration(['NotSet',
979                     '1',  # Zp1
980                     '2',  # Zp2
981                     '4',  # Zp4
982                     '8']))  # Zp8
983 _Same(_midl, 'WarningLevel',
984       _Enumeration(['0',  # /W0
985                     '1',  # /W1
986                     '2',  # /W2
987                     '3',  # /W3
988                     '4']))  # /W4
989
990 _Renamed(_midl, 'DLLDataFileName', 'DllDataFileName', _file_name)  # /dlldata
991 _Renamed(_midl, 'ValidateParameters', 'ValidateAllParameters',
992          _boolean)  # /robust
993
994 # MSBuild options not found in MSVS.
995 _MSBuildOnly(_midl, 'ApplicationConfigurationMode', _boolean)  # /app_config
996 _MSBuildOnly(_midl, 'ClientStubFile', _file_name)  # /cstub
997 _MSBuildOnly(_midl, 'GenerateClientFiles',
998              _Enumeration([], new=['Stub',  # /client stub
999                                    'None']))  # /client none
1000 _MSBuildOnly(_midl, 'GenerateServerFiles',
1001              _Enumeration([], new=['Stub',  # /client stub
1002                                    'None']))  # /client none
1003 _MSBuildOnly(_midl, 'LocaleID', _integer)  # /lcid DECIMAL
1004 _MSBuildOnly(_midl, 'ServerStubFile', _file_name)  # /sstub
1005 _MSBuildOnly(_midl, 'SuppressCompilerWarnings', _boolean)  # /no_warn
1006 _MSBuildOnly(_midl, 'TrackerLogDirectory', _folder_name)
1007 _MSBuildOnly(_midl, 'TypeLibFormat',
1008              _Enumeration([], new=['NewFormat',  # /newtlb
1009                                    'OldFormat']))  # /oldtlb
1010
1011
1012 # Directives for converting VCLibrarianTool to Lib.
1013 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\lib.xml" for
1014 # the schema of the MSBuild Lib settings.
1015
1016 _Same(_lib, 'AdditionalDependencies', _file_list)
1017 _Same(_lib, 'AdditionalLibraryDirectories', _folder_list)  # /LIBPATH
1018 _Same(_lib, 'AdditionalOptions', _string_list)
1019 _Same(_lib, 'ExportNamedFunctions', _string_list)  # /EXPORT
1020 _Same(_lib, 'ForceSymbolReferences', _string)  # /INCLUDE
1021 _Same(_lib, 'IgnoreAllDefaultLibraries', _boolean)  # /NODEFAULTLIB
1022 _Same(_lib, 'IgnoreSpecificDefaultLibraries', _file_list)  # /NODEFAULTLIB
1023 _Same(_lib, 'ModuleDefinitionFile', _file_name)  # /DEF
1024 _Same(_lib, 'OutputFile', _file_name)  # /OUT
1025 _Same(_lib, 'SuppressStartupBanner', _boolean)  # /NOLOGO
1026 _Same(_lib, 'UseUnicodeResponseFiles', _boolean)
1027 _Same(_lib, 'LinkTimeCodeGeneration', _boolean)  # /LTCG
1028 _Same(_lib, 'TargetMachine', _target_machine_enumeration)
1029
1030 # TODO(jeanluc) _link defines the same value that gets moved to
1031 # ProjectReference.  We may want to validate that they are consistent.
1032 _Moved(_lib, 'LinkLibraryDependencies', 'ProjectReference', _boolean)
1033
1034 _MSBuildOnly(_lib, 'DisplayLibrary', _string)  # /LIST Visible='false'
1035 _MSBuildOnly(_lib, 'ErrorReporting',
1036              _Enumeration([], new=['PromptImmediately',  # /ERRORREPORT:PROMPT
1037                                    'QueueForNextLogin',  # /ERRORREPORT:QUEUE
1038                                    'SendErrorReport',  # /ERRORREPORT:SEND
1039                                    'NoErrorReport']))  # /ERRORREPORT:NONE
1040 _MSBuildOnly(_lib, 'MinimumRequiredVersion', _string)
1041 _MSBuildOnly(_lib, 'Name', _file_name)  # /NAME
1042 _MSBuildOnly(_lib, 'RemoveObjects', _file_list)  # /REMOVE
1043 _MSBuildOnly(_lib, 'SubSystem', _subsystem_enumeration)
1044 _MSBuildOnly(_lib, 'TrackerLogDirectory', _folder_name)
1045 _MSBuildOnly(_lib, 'TreatLibWarningAsErrors', _boolean)  # /WX
1046 _MSBuildOnly(_lib, 'Verbose', _boolean)
1047
1048
1049 # Directives for converting VCManifestTool to Mt.
1050 # See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\mt.xml" for
1051 # the schema of the MSBuild Lib settings.
1052
1053 # Options that have the same name in MSVS and MSBuild
1054 _Same(_manifest, 'AdditionalManifestFiles', _file_list)  # /manifest
1055 _Same(_manifest, 'AdditionalOptions', _string_list)
1056 _Same(_manifest, 'AssemblyIdentity', _string)  # /identity:
1057 _Same(_manifest, 'ComponentFileName', _file_name)  # /dll
1058 _Same(_manifest, 'GenerateCatalogFiles', _boolean)  # /makecdfs
1059 _Same(_manifest, 'InputResourceManifests', _string)  # /inputresource
1060 _Same(_manifest, 'OutputManifestFile', _file_name)  # /out
1061 _Same(_manifest, 'RegistrarScriptFile', _file_name)  # /rgs
1062 _Same(_manifest, 'ReplacementsFile', _file_name)  # /replacements
1063 _Same(_manifest, 'SuppressStartupBanner', _boolean)  # /nologo
1064 _Same(_manifest, 'TypeLibraryFile', _file_name)  # /tlb:
1065 _Same(_manifest, 'UpdateFileHashes', _boolean)  # /hashupdate
1066 _Same(_manifest, 'UpdateFileHashesSearchPath', _file_name)
1067 _Same(_manifest, 'VerboseOutput', _boolean)  # /verbose
1068
1069 # Options that have moved location.
1070 _MovedAndRenamed(_manifest, 'ManifestResourceFile',
1071                  'ManifestResourceCompile',
1072                  'ResourceOutputFileName',
1073                  _file_name)
1074 _Moved(_manifest, 'EmbedManifest', '', _boolean)
1075
1076 # MSVS options not found in MSBuild.
1077 _MSVSOnly(_manifest, 'DependencyInformationFile', _file_name)
1078 _MSVSOnly(_manifest, 'UseFAT32Workaround', _boolean)
1079 _MSVSOnly(_manifest, 'UseUnicodeResponseFiles', _boolean)
1080
1081 # MSBuild options not found in MSVS.
1082 _MSBuildOnly(_manifest, 'EnableDPIAwareness', _boolean)
1083 _MSBuildOnly(_manifest, 'GenerateCategoryTags', _boolean)  # /category
1084 _MSBuildOnly(_manifest, 'ManifestFromManagedAssembly',
1085              _file_name)  # /managedassemblyname
1086 _MSBuildOnly(_manifest, 'OutputResourceManifests', _string)  # /outputresource
1087 _MSBuildOnly(_manifest, 'SuppressDependencyElement', _boolean)  # /nodependency
1088 _MSBuildOnly(_manifest, 'TrackerLogDirectory', _folder_name)
1089
1090
1091 # Directives for MASM.
1092 # See "$(VCTargetsPath)\BuildCustomizations\masm.xml" for the schema of the
1093 # MSBuild MASM settings.
1094
1095 # Options that have the same name in MSVS and MSBuild.
1096 _Same(_masm, 'UseSafeExceptionHandlers', _boolean)  # /safeseh