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 5r"""Code to validate and convert settings of the Microsoft build tools. 6 7This file contains code to validate and convert settings of the Microsoft 8build tools. The function ConvertToMSBuildSettings(), ValidateMSVSSettings(), 9and ValidateMSBuildSettings() are the entry points. 10 11This file was created by comparing the projects created by Visual Studio 2008 12and Visual Studio 2010 for all available settings through the user interface. 13The MSBuild schemas were also considered. They are typically found in the 14MSBuild install directory, e.g. c:\Program Files (x86)\MSBuild 15""" 16 17import sys 18import 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 35class _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 48def _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 62def _GetMSBuildToolSettings(msbuild_settings, tool): 63 """Returns an MSBuild tool dictionary. Creates it if needed.""" 64 return msbuild_settings.setdefault(tool.msbuild_name, {}) 65 66 67class _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 105class _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 121class _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 140class _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 158class _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 178class _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 233def _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 244def _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 264def _Moved(tool, settings_name, msbuild_tool_name, setting_type): 265 _MovedAndRenamed(tool, settings_name, msbuild_tool_name, settings_name, 266 setting_type) 267 268 269def _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 292def _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 309def _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 327def _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 348def _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 372fix_vc_macro_slashes_regex_list = ('IntDir', 'OutDir') 373fix_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 381def _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 406def 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 419def 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 442def 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 480def 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 491def 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 502def _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_Same(_compile, 'CompileAsWinRT', _boolean) # /ZW 596 597_Same(_compile, 'AssemblerOutput', 598 _Enumeration(['NoListing', 599 'AssemblyCode', # /FA 600 'All', # /FAcs 601 'AssemblyAndMachineCode', # /FAc 602 'AssemblyAndSourceCode'])) # /FAs 603_Same(_compile, 'BasicRuntimeChecks', 604 _Enumeration(['Default', 605 'StackFrameRuntimeCheck', # /RTCs 606 'UninitializedLocalUsageCheck', # /RTCu 607 'EnableFastChecks'])) # /RTC1 608_Same(_compile, 'BrowseInformation', 609 _Enumeration(['false', 610 'true', # /FR 611 'true'])) # /Fr 612_Same(_compile, 'CallingConvention', 613 _Enumeration(['Cdecl', # /Gd 614 'FastCall', # /Gr 615 'StdCall', # /Gz 616 'VectorCall'])) # /Gv 617_Same(_compile, 'CompileAs', 618 _Enumeration(['Default', 619 'CompileAsC', # /TC 620 'CompileAsCpp'])) # /TP 621_Same(_compile, 'DebugInformationFormat', 622 _Enumeration(['', # Disabled 623 'OldStyle', # /Z7 624 None, 625 'ProgramDatabase', # /Zi 626 'EditAndContinue'])) # /ZI 627_Same(_compile, 'EnableEnhancedInstructionSet', 628 _Enumeration(['NotSet', 629 'StreamingSIMDExtensions', # /arch:SSE 630 'StreamingSIMDExtensions2', # /arch:SSE2 631 'AdvancedVectorExtensions', # /arch:AVX (vs2012+) 632 'NoExtensions', # /arch:IA32 (vs2012+) 633 # This one only exists in the new msbuild format. 634 'AdvancedVectorExtensions2', # /arch:AVX2 (vs2013r2+) 635 ])) 636_Same(_compile, 'ErrorReporting', 637 _Enumeration(['None', # /errorReport:none 638 'Prompt', # /errorReport:prompt 639 'Queue'], # /errorReport:queue 640 new=['Send'])) # /errorReport:send" 641_Same(_compile, 'ExceptionHandling', 642 _Enumeration(['false', 643 'Sync', # /EHsc 644 'Async'], # /EHa 645 new=['SyncCThrow'])) # /EHs 646_Same(_compile, 'FavorSizeOrSpeed', 647 _Enumeration(['Neither', 648 'Speed', # /Ot 649 'Size'])) # /Os 650_Same(_compile, 'FloatingPointModel', 651 _Enumeration(['Precise', # /fp:precise 652 'Strict', # /fp:strict 653 'Fast'])) # /fp:fast 654_Same(_compile, 'InlineFunctionExpansion', 655 _Enumeration(['Default', 656 'OnlyExplicitInline', # /Ob1 657 'AnySuitable'], # /Ob2 658 new=['Disabled'])) # /Ob0 659_Same(_compile, 'Optimization', 660 _Enumeration(['Disabled', # /Od 661 'MinSpace', # /O1 662 'MaxSpeed', # /O2 663 'Full'])) # /Ox 664_Same(_compile, 'RuntimeLibrary', 665 _Enumeration(['MultiThreaded', # /MT 666 'MultiThreadedDebug', # /MTd 667 'MultiThreadedDLL', # /MD 668 'MultiThreadedDebugDLL'])) # /MDd 669_Same(_compile, 'StructMemberAlignment', 670 _Enumeration(['Default', 671 '1Byte', # /Zp1 672 '2Bytes', # /Zp2 673 '4Bytes', # /Zp4 674 '8Bytes', # /Zp8 675 '16Bytes'])) # /Zp16 676_Same(_compile, 'WarningLevel', 677 _Enumeration(['TurnOffAllWarnings', # /W0 678 'Level1', # /W1 679 'Level2', # /W2 680 'Level3', # /W3 681 'Level4'], # /W4 682 new=['EnableAllWarnings'])) # /Wall 683 684# Options found in MSVS that have been renamed in MSBuild. 685_Renamed(_compile, 'EnableFunctionLevelLinking', 'FunctionLevelLinking', 686 _boolean) # /Gy 687_Renamed(_compile, 'EnableIntrinsicFunctions', 'IntrinsicFunctions', 688 _boolean) # /Oi 689_Renamed(_compile, 'KeepComments', 'PreprocessKeepComments', _boolean) # /C 690_Renamed(_compile, 'ObjectFile', 'ObjectFileName', _file_name) # /Fo 691_Renamed(_compile, 'OpenMP', 'OpenMPSupport', _boolean) # /openmp 692_Renamed(_compile, 'PrecompiledHeaderThrough', 'PrecompiledHeaderFile', 693 _file_name) # Used with /Yc and /Yu 694_Renamed(_compile, 'PrecompiledHeaderFile', 'PrecompiledHeaderOutputFile', 695 _file_name) # /Fp 696_Renamed(_compile, 'UsePrecompiledHeader', 'PrecompiledHeader', 697 _Enumeration(['NotUsing', # VS recognized '' for this value too. 698 'Create', # /Yc 699 'Use'])) # /Yu 700_Renamed(_compile, 'WarnAsError', 'TreatWarningAsError', _boolean) # /WX 701 702_ConvertedToAdditionalOption(_compile, 'DefaultCharIsUnsigned', '/J') 703 704# MSVS options not found in MSBuild. 705_MSVSOnly(_compile, 'Detect64BitPortabilityProblems', _boolean) 706_MSVSOnly(_compile, 'UseUnicodeResponseFiles', _boolean) 707 708# MSBuild options not found in MSVS. 709_MSBuildOnly(_compile, 'BuildingInIDE', _boolean) 710_MSBuildOnly(_compile, 'CompileAsManaged', 711 _Enumeration([], new=['false', 712 'true'])) # /clr 713_MSBuildOnly(_compile, 'CreateHotpatchableImage', _boolean) # /hotpatch 714_MSBuildOnly(_compile, 'MultiProcessorCompilation', _boolean) # /MP 715_MSBuildOnly(_compile, 'PreprocessOutputPath', _string) # /Fi 716_MSBuildOnly(_compile, 'ProcessorNumber', _integer) # the number of processors 717_MSBuildOnly(_compile, 'TrackerLogDirectory', _folder_name) 718_MSBuildOnly(_compile, 'TreatSpecificWarningsAsErrors', _string_list) # /we 719_MSBuildOnly(_compile, 'UseUnicodeForAssemblerListing', _boolean) # /FAu 720 721# Defines a setting that needs very customized processing 722_CustomGeneratePreprocessedFile(_compile, 'GeneratePreprocessedFile') 723 724 725# Directives for converting MSVS VCLinkerTool to MSBuild Link. 726# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\link.xml" for 727# the schema of the MSBuild Link settings. 728 729# Options that have the same name in MSVS and MSBuild 730_Same(_link, 'AdditionalDependencies', _file_list) 731_Same(_link, 'AdditionalLibraryDirectories', _folder_list) # /LIBPATH 732# /MANIFESTDEPENDENCY: 733_Same(_link, 'AdditionalManifestDependencies', _file_list) 734_Same(_link, 'AdditionalOptions', _string_list) 735_Same(_link, 'AddModuleNamesToAssembly', _file_list) # /ASSEMBLYMODULE 736_Same(_link, 'AllowIsolation', _boolean) # /ALLOWISOLATION 737_Same(_link, 'AssemblyLinkResource', _file_list) # /ASSEMBLYLINKRESOURCE 738_Same(_link, 'BaseAddress', _string) # /BASE 739_Same(_link, 'CLRUnmanagedCodeCheck', _boolean) # /CLRUNMANAGEDCODECHECK 740_Same(_link, 'DelayLoadDLLs', _file_list) # /DELAYLOAD 741_Same(_link, 'DelaySign', _boolean) # /DELAYSIGN 742_Same(_link, 'EmbedManagedResourceFile', _file_list) # /ASSEMBLYRESOURCE 743_Same(_link, 'EnableUAC', _boolean) # /MANIFESTUAC 744_Same(_link, 'EntryPointSymbol', _string) # /ENTRY 745_Same(_link, 'ForceSymbolReferences', _file_list) # /INCLUDE 746_Same(_link, 'FunctionOrder', _file_name) # /ORDER 747_Same(_link, 'GenerateDebugInformation', _boolean) # /DEBUG 748_Same(_link, 'GenerateMapFile', _boolean) # /MAP 749_Same(_link, 'HeapCommitSize', _string) 750_Same(_link, 'HeapReserveSize', _string) # /HEAP 751_Same(_link, 'IgnoreAllDefaultLibraries', _boolean) # /NODEFAULTLIB 752_Same(_link, 'IgnoreEmbeddedIDL', _boolean) # /IGNOREIDL 753_Same(_link, 'ImportLibrary', _file_name) # /IMPLIB 754_Same(_link, 'KeyContainer', _file_name) # /KEYCONTAINER 755_Same(_link, 'KeyFile', _file_name) # /KEYFILE 756_Same(_link, 'ManifestFile', _file_name) # /ManifestFile 757_Same(_link, 'MapExports', _boolean) # /MAPINFO:EXPORTS 758_Same(_link, 'MapFileName', _file_name) 759_Same(_link, 'MergedIDLBaseFileName', _file_name) # /IDLOUT 760_Same(_link, 'MergeSections', _string) # /MERGE 761_Same(_link, 'MidlCommandFile', _file_name) # /MIDL 762_Same(_link, 'ModuleDefinitionFile', _file_name) # /DEF 763_Same(_link, 'OutputFile', _file_name) # /OUT 764_Same(_link, 'PerUserRedirection', _boolean) 765_Same(_link, 'Profile', _boolean) # /PROFILE 766_Same(_link, 'ProfileGuidedDatabase', _file_name) # /PGD 767_Same(_link, 'ProgramDatabaseFile', _file_name) # /PDB 768_Same(_link, 'RegisterOutput', _boolean) 769_Same(_link, 'SetChecksum', _boolean) # /RELEASE 770_Same(_link, 'StackCommitSize', _string) 771_Same(_link, 'StackReserveSize', _string) # /STACK 772_Same(_link, 'StripPrivateSymbols', _file_name) # /PDBSTRIPPED 773_Same(_link, 'SupportUnloadOfDelayLoadedDLL', _boolean) # /DELAY:UNLOAD 774_Same(_link, 'SuppressStartupBanner', _boolean) # /NOLOGO 775_Same(_link, 'SwapRunFromCD', _boolean) # /SWAPRUN:CD 776_Same(_link, 'TurnOffAssemblyGeneration', _boolean) # /NOASSEMBLY 777_Same(_link, 'TypeLibraryFile', _file_name) # /TLBOUT 778_Same(_link, 'TypeLibraryResourceID', _integer) # /TLBID 779_Same(_link, 'UACUIAccess', _boolean) # /uiAccess='true' 780_Same(_link, 'Version', _string) # /VERSION 781 782_Same(_link, 'EnableCOMDATFolding', _newly_boolean) # /OPT:ICF 783_Same(_link, 'FixedBaseAddress', _newly_boolean) # /FIXED 784_Same(_link, 'LargeAddressAware', _newly_boolean) # /LARGEADDRESSAWARE 785_Same(_link, 'OptimizeReferences', _newly_boolean) # /OPT:REF 786_Same(_link, 'RandomizedBaseAddress', _newly_boolean) # /DYNAMICBASE 787_Same(_link, 'TerminalServerAware', _newly_boolean) # /TSAWARE 788 789_subsystem_enumeration = _Enumeration( 790 ['NotSet', 791 'Console', # /SUBSYSTEM:CONSOLE 792 'Windows', # /SUBSYSTEM:WINDOWS 793 'Native', # /SUBSYSTEM:NATIVE 794 'EFI Application', # /SUBSYSTEM:EFI_APPLICATION 795 'EFI Boot Service Driver', # /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 796 'EFI ROM', # /SUBSYSTEM:EFI_ROM 797 'EFI Runtime', # /SUBSYSTEM:EFI_RUNTIME_DRIVER 798 'WindowsCE'], # /SUBSYSTEM:WINDOWSCE 799 new=['POSIX']) # /SUBSYSTEM:POSIX 800 801_target_machine_enumeration = _Enumeration( 802 ['NotSet', 803 'MachineX86', # /MACHINE:X86 804 None, 805 'MachineARM', # /MACHINE:ARM 806 'MachineEBC', # /MACHINE:EBC 807 'MachineIA64', # /MACHINE:IA64 808 None, 809 'MachineMIPS', # /MACHINE:MIPS 810 'MachineMIPS16', # /MACHINE:MIPS16 811 'MachineMIPSFPU', # /MACHINE:MIPSFPU 812 'MachineMIPSFPU16', # /MACHINE:MIPSFPU16 813 None, 814 None, 815 None, 816 'MachineSH4', # /MACHINE:SH4 817 None, 818 'MachineTHUMB', # /MACHINE:THUMB 819 'MachineX64']) # /MACHINE:X64 820 821_Same(_link, 'AssemblyDebug', 822 _Enumeration(['', 823 'true', # /ASSEMBLYDEBUG 824 'false'])) # /ASSEMBLYDEBUG:DISABLE 825_Same(_link, 'CLRImageType', 826 _Enumeration(['Default', 827 'ForceIJWImage', # /CLRIMAGETYPE:IJW 828 'ForcePureILImage', # /Switch="CLRIMAGETYPE:PURE 829 'ForceSafeILImage'])) # /Switch="CLRIMAGETYPE:SAFE 830_Same(_link, 'CLRThreadAttribute', 831 _Enumeration(['DefaultThreadingAttribute', # /CLRTHREADATTRIBUTE:NONE 832 'MTAThreadingAttribute', # /CLRTHREADATTRIBUTE:MTA 833 'STAThreadingAttribute'])) # /CLRTHREADATTRIBUTE:STA 834_Same(_link, 'DataExecutionPrevention', 835 _Enumeration(['', 836 'false', # /NXCOMPAT:NO 837 'true'])) # /NXCOMPAT 838_Same(_link, 'Driver', 839 _Enumeration(['NotSet', 840 'Driver', # /Driver 841 'UpOnly', # /DRIVER:UPONLY 842 'WDM'])) # /DRIVER:WDM 843_Same(_link, 'LinkTimeCodeGeneration', 844 _Enumeration(['Default', 845 'UseLinkTimeCodeGeneration', # /LTCG 846 'PGInstrument', # /LTCG:PGInstrument 847 'PGOptimization', # /LTCG:PGOptimize 848 'PGUpdate'])) # /LTCG:PGUpdate 849_Same(_link, 'ShowProgress', 850 _Enumeration(['NotSet', 851 'LinkVerbose', # /VERBOSE 852 'LinkVerboseLib'], # /VERBOSE:Lib 853 new=['LinkVerboseICF', # /VERBOSE:ICF 854 'LinkVerboseREF', # /VERBOSE:REF 855 'LinkVerboseSAFESEH', # /VERBOSE:SAFESEH 856 'LinkVerboseCLR'])) # /VERBOSE:CLR 857_Same(_link, 'SubSystem', _subsystem_enumeration) 858_Same(_link, 'TargetMachine', _target_machine_enumeration) 859_Same(_link, 'UACExecutionLevel', 860 _Enumeration(['AsInvoker', # /level='asInvoker' 861 'HighestAvailable', # /level='highestAvailable' 862 'RequireAdministrator'])) # /level='requireAdministrator' 863_Same(_link, 'MinimumRequiredVersion', _string) 864_Same(_link, 'TreatLinkerWarningAsErrors', _boolean) # /WX 865 866 867# Options found in MSVS that have been renamed in MSBuild. 868_Renamed(_link, 'ErrorReporting', 'LinkErrorReporting', 869 _Enumeration(['NoErrorReport', # /ERRORREPORT:NONE 870 'PromptImmediately', # /ERRORREPORT:PROMPT 871 'QueueForNextLogin'], # /ERRORREPORT:QUEUE 872 new=['SendErrorReport'])) # /ERRORREPORT:SEND 873_Renamed(_link, 'IgnoreDefaultLibraryNames', 'IgnoreSpecificDefaultLibraries', 874 _file_list) # /NODEFAULTLIB 875_Renamed(_link, 'ResourceOnlyDLL', 'NoEntryPoint', _boolean) # /NOENTRY 876_Renamed(_link, 'SwapRunFromNet', 'SwapRunFromNET', _boolean) # /SWAPRUN:NET 877 878_Moved(_link, 'GenerateManifest', '', _boolean) 879_Moved(_link, 'IgnoreImportLibrary', '', _boolean) 880_Moved(_link, 'LinkIncremental', '', _newly_boolean) 881_Moved(_link, 'LinkLibraryDependencies', 'ProjectReference', _boolean) 882_Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean) 883 884# MSVS options not found in MSBuild. 885_MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean) 886_MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean) 887 888# MSBuild options not found in MSVS. 889_MSBuildOnly(_link, 'BuildingInIDE', _boolean) 890_MSBuildOnly(_link, 'ImageHasSafeExceptionHandlers', _boolean) # /SAFESEH 891_MSBuildOnly(_link, 'LinkDLL', _boolean) # /DLL Visible='false' 892_MSBuildOnly(_link, 'LinkStatus', _boolean) # /LTCG:STATUS 893_MSBuildOnly(_link, 'PreventDllBinding', _boolean) # /ALLOWBIND 894_MSBuildOnly(_link, 'SupportNobindOfDelayLoadedDLL', _boolean) # /DELAY:NOBIND 895_MSBuildOnly(_link, 'TrackerLogDirectory', _folder_name) 896_MSBuildOnly(_link, 'MSDOSStubFileName', _file_name) # /STUB Visible='false' 897_MSBuildOnly(_link, 'SectionAlignment', _integer) # /ALIGN 898_MSBuildOnly(_link, 'SpecifySectionAttributes', _string) # /SECTION 899_MSBuildOnly(_link, 'ForceFileOutput', 900 _Enumeration([], new=['Enabled', # /FORCE 901 # /FORCE:MULTIPLE 902 'MultiplyDefinedSymbolOnly', 903 'UndefinedSymbolOnly'])) # /FORCE:UNRESOLVED 904_MSBuildOnly(_link, 'CreateHotPatchableImage', 905 _Enumeration([], new=['Enabled', # /FUNCTIONPADMIN 906 'X86Image', # /FUNCTIONPADMIN:5 907 'X64Image', # /FUNCTIONPADMIN:6 908 'ItaniumImage'])) # /FUNCTIONPADMIN:16 909_MSBuildOnly(_link, 'CLRSupportLastError', 910 _Enumeration([], new=['Enabled', # /CLRSupportLastError 911 'Disabled', # /CLRSupportLastError:NO 912 # /CLRSupportLastError:SYSTEMDLL 913 'SystemDlls'])) 914 915 916# Directives for converting VCResourceCompilerTool to ResourceCompile. 917# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\rc.xml" for 918# the schema of the MSBuild ResourceCompile settings. 919 920_Same(_rc, 'AdditionalOptions', _string_list) 921_Same(_rc, 'AdditionalIncludeDirectories', _folder_list) # /I 922_Same(_rc, 'Culture', _Integer(msbuild_base=16)) 923_Same(_rc, 'IgnoreStandardIncludePath', _boolean) # /X 924_Same(_rc, 'PreprocessorDefinitions', _string_list) # /D 925_Same(_rc, 'ResourceOutputFileName', _string) # /fo 926_Same(_rc, 'ShowProgress', _boolean) # /v 927# There is no UI in VisualStudio 2008 to set the following properties. 928# However they are found in CL and other tools. Include them here for 929# completeness, as they are very likely to have the same usage pattern. 930_Same(_rc, 'SuppressStartupBanner', _boolean) # /nologo 931_Same(_rc, 'UndefinePreprocessorDefinitions', _string_list) # /u 932 933# MSBuild options not found in MSVS. 934_MSBuildOnly(_rc, 'NullTerminateStrings', _boolean) # /n 935_MSBuildOnly(_rc, 'TrackerLogDirectory', _folder_name) 936 937 938# Directives for converting VCMIDLTool to Midl. 939# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\midl.xml" for 940# the schema of the MSBuild Midl settings. 941 942_Same(_midl, 'AdditionalIncludeDirectories', _folder_list) # /I 943_Same(_midl, 'AdditionalOptions', _string_list) 944_Same(_midl, 'CPreprocessOptions', _string) # /cpp_opt 945_Same(_midl, 'ErrorCheckAllocations', _boolean) # /error allocation 946_Same(_midl, 'ErrorCheckBounds', _boolean) # /error bounds_check 947_Same(_midl, 'ErrorCheckEnumRange', _boolean) # /error enum 948_Same(_midl, 'ErrorCheckRefPointers', _boolean) # /error ref 949_Same(_midl, 'ErrorCheckStubData', _boolean) # /error stub_data 950_Same(_midl, 'GenerateStublessProxies', _boolean) # /Oicf 951_Same(_midl, 'GenerateTypeLibrary', _boolean) 952_Same(_midl, 'HeaderFileName', _file_name) # /h 953_Same(_midl, 'IgnoreStandardIncludePath', _boolean) # /no_def_idir 954_Same(_midl, 'InterfaceIdentifierFileName', _file_name) # /iid 955_Same(_midl, 'MkTypLibCompatible', _boolean) # /mktyplib203 956_Same(_midl, 'OutputDirectory', _string) # /out 957_Same(_midl, 'PreprocessorDefinitions', _string_list) # /D 958_Same(_midl, 'ProxyFileName', _file_name) # /proxy 959_Same(_midl, 'RedirectOutputAndErrors', _file_name) # /o 960_Same(_midl, 'SuppressStartupBanner', _boolean) # /nologo 961_Same(_midl, 'TypeLibraryName', _file_name) # /tlb 962_Same(_midl, 'UndefinePreprocessorDefinitions', _string_list) # /U 963_Same(_midl, 'WarnAsError', _boolean) # /WX 964 965_Same(_midl, 'DefaultCharType', 966 _Enumeration(['Unsigned', # /char unsigned 967 'Signed', # /char signed 968 'Ascii'])) # /char ascii7 969_Same(_midl, 'TargetEnvironment', 970 _Enumeration(['NotSet', 971 'Win32', # /env win32 972 'Itanium', # /env ia64 973 'X64'])) # /env x64 974_Same(_midl, 'EnableErrorChecks', 975 _Enumeration(['EnableCustom', 976 'None', # /error none 977 'All'])) # /error all 978_Same(_midl, 'StructMemberAlignment', 979 _Enumeration(['NotSet', 980 '1', # Zp1 981 '2', # Zp2 982 '4', # Zp4 983 '8'])) # Zp8 984_Same(_midl, 'WarningLevel', 985 _Enumeration(['0', # /W0 986 '1', # /W1 987 '2', # /W2 988 '3', # /W3 989 '4'])) # /W4 990 991_Renamed(_midl, 'DLLDataFileName', 'DllDataFileName', _file_name) # /dlldata 992_Renamed(_midl, 'ValidateParameters', 'ValidateAllParameters', 993 _boolean) # /robust 994 995# MSBuild options not found in MSVS. 996_MSBuildOnly(_midl, 'ApplicationConfigurationMode', _boolean) # /app_config 997_MSBuildOnly(_midl, 'ClientStubFile', _file_name) # /cstub 998_MSBuildOnly(_midl, 'GenerateClientFiles', 999 _Enumeration([], new=['Stub', # /client stub 1000 'None'])) # /client none 1001_MSBuildOnly(_midl, 'GenerateServerFiles', 1002 _Enumeration([], new=['Stub', # /client stub 1003 'None'])) # /client none 1004_MSBuildOnly(_midl, 'LocaleID', _integer) # /lcid DECIMAL 1005_MSBuildOnly(_midl, 'ServerStubFile', _file_name) # /sstub 1006_MSBuildOnly(_midl, 'SuppressCompilerWarnings', _boolean) # /no_warn 1007_MSBuildOnly(_midl, 'TrackerLogDirectory', _folder_name) 1008_MSBuildOnly(_midl, 'TypeLibFormat', 1009 _Enumeration([], new=['NewFormat', # /newtlb 1010 'OldFormat'])) # /oldtlb 1011 1012 1013# Directives for converting VCLibrarianTool to Lib. 1014# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\lib.xml" for 1015# the schema of the MSBuild Lib settings. 1016 1017_Same(_lib, 'AdditionalDependencies', _file_list) 1018_Same(_lib, 'AdditionalLibraryDirectories', _folder_list) # /LIBPATH 1019_Same(_lib, 'AdditionalOptions', _string_list) 1020_Same(_lib, 'ExportNamedFunctions', _string_list) # /EXPORT 1021_Same(_lib, 'ForceSymbolReferences', _string) # /INCLUDE 1022_Same(_lib, 'IgnoreAllDefaultLibraries', _boolean) # /NODEFAULTLIB 1023_Same(_lib, 'IgnoreSpecificDefaultLibraries', _file_list) # /NODEFAULTLIB 1024_Same(_lib, 'ModuleDefinitionFile', _file_name) # /DEF 1025_Same(_lib, 'OutputFile', _file_name) # /OUT 1026_Same(_lib, 'SuppressStartupBanner', _boolean) # /NOLOGO 1027_Same(_lib, 'UseUnicodeResponseFiles', _boolean) 1028_Same(_lib, 'LinkTimeCodeGeneration', _boolean) # /LTCG 1029_Same(_lib, 'TargetMachine', _target_machine_enumeration) 1030 1031# TODO(jeanluc) _link defines the same value that gets moved to 1032# ProjectReference. We may want to validate that they are consistent. 1033_Moved(_lib, 'LinkLibraryDependencies', 'ProjectReference', _boolean) 1034 1035_MSBuildOnly(_lib, 'DisplayLibrary', _string) # /LIST Visible='false' 1036_MSBuildOnly(_lib, 'ErrorReporting', 1037 _Enumeration([], new=['PromptImmediately', # /ERRORREPORT:PROMPT 1038 'QueueForNextLogin', # /ERRORREPORT:QUEUE 1039 'SendErrorReport', # /ERRORREPORT:SEND 1040 'NoErrorReport'])) # /ERRORREPORT:NONE 1041_MSBuildOnly(_lib, 'MinimumRequiredVersion', _string) 1042_MSBuildOnly(_lib, 'Name', _file_name) # /NAME 1043_MSBuildOnly(_lib, 'RemoveObjects', _file_list) # /REMOVE 1044_MSBuildOnly(_lib, 'SubSystem', _subsystem_enumeration) 1045_MSBuildOnly(_lib, 'TrackerLogDirectory', _folder_name) 1046_MSBuildOnly(_lib, 'TreatLibWarningAsErrors', _boolean) # /WX 1047_MSBuildOnly(_lib, 'Verbose', _boolean) 1048 1049 1050# Directives for converting VCManifestTool to Mt. 1051# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\mt.xml" for 1052# the schema of the MSBuild Lib settings. 1053 1054# Options that have the same name in MSVS and MSBuild 1055_Same(_manifest, 'AdditionalManifestFiles', _file_list) # /manifest 1056_Same(_manifest, 'AdditionalOptions', _string_list) 1057_Same(_manifest, 'AssemblyIdentity', _string) # /identity: 1058_Same(_manifest, 'ComponentFileName', _file_name) # /dll 1059_Same(_manifest, 'GenerateCatalogFiles', _boolean) # /makecdfs 1060_Same(_manifest, 'InputResourceManifests', _string) # /inputresource 1061_Same(_manifest, 'OutputManifestFile', _file_name) # /out 1062_Same(_manifest, 'RegistrarScriptFile', _file_name) # /rgs 1063_Same(_manifest, 'ReplacementsFile', _file_name) # /replacements 1064_Same(_manifest, 'SuppressStartupBanner', _boolean) # /nologo 1065_Same(_manifest, 'TypeLibraryFile', _file_name) # /tlb: 1066_Same(_manifest, 'UpdateFileHashes', _boolean) # /hashupdate 1067_Same(_manifest, 'UpdateFileHashesSearchPath', _file_name) 1068_Same(_manifest, 'VerboseOutput', _boolean) # /verbose 1069 1070# Options that have moved location. 1071_MovedAndRenamed(_manifest, 'ManifestResourceFile', 1072 'ManifestResourceCompile', 1073 'ResourceOutputFileName', 1074 _file_name) 1075_Moved(_manifest, 'EmbedManifest', '', _boolean) 1076 1077# MSVS options not found in MSBuild. 1078_MSVSOnly(_manifest, 'DependencyInformationFile', _file_name) 1079_MSVSOnly(_manifest, 'UseFAT32Workaround', _boolean) 1080_MSVSOnly(_manifest, 'UseUnicodeResponseFiles', _boolean) 1081 1082# MSBuild options not found in MSVS. 1083_MSBuildOnly(_manifest, 'EnableDPIAwareness', _boolean) 1084_MSBuildOnly(_manifest, 'GenerateCategoryTags', _boolean) # /category 1085_MSBuildOnly(_manifest, 'ManifestFromManagedAssembly', 1086 _file_name) # /managedassemblyname 1087_MSBuildOnly(_manifest, 'OutputResourceManifests', _string) # /outputresource 1088_MSBuildOnly(_manifest, 'SuppressDependencyElement', _boolean) # /nodependency 1089_MSBuildOnly(_manifest, 'TrackerLogDirectory', _folder_name) 1090 1091 1092# Directives for MASM. 1093# See "$(VCTargetsPath)\BuildCustomizations\masm.xml" for the schema of the 1094# MSBuild MASM settings. 1095 1096# Options that have the same name in MSVS and MSBuild. 1097_Same(_masm, 'UseSafeExceptionHandlers', _boolean) # /safeseh 1098