Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: pylib/gyp/msvs_emulation.py

Issue 97873002: ninja/win: Support VCLinkerTool.GenerateManifest (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pylib/gyp/generator/ninja.py ('k') | test/win/gyptest-link-generate-manifest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """ 5 """
6 This module helps emulate Visual Studio 2008 behavior on top of other 6 This module helps emulate Visual Studio 2008 behavior on top of other
7 build systems, primarily ninja. 7 build systems, primarily ninja.
8 """ 8 """
9 9
10 import os 10 import os
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 ldflags.append('/DYNAMICBASE') 505 ldflags.append('/DYNAMICBASE')
506 506
507 # If the NXCOMPAT flag has not been specified, default to on. Despite the 507 # If the NXCOMPAT flag has not been specified, default to on. Despite the
508 # documentation that says this only defaults to on when the subsystem is 508 # documentation that says this only defaults to on when the subsystem is
509 # Vista or greater (which applies to the linker), the IDE defaults it on 509 # Vista or greater (which applies to the linker), the IDE defaults it on
510 # unless it's explicitly off. 510 # unless it's explicitly off.
511 if not filter(lambda x: 'NXCOMPAT' in x, ldflags): 511 if not filter(lambda x: 'NXCOMPAT' in x, ldflags):
512 ldflags.append('/NXCOMPAT') 512 ldflags.append('/NXCOMPAT')
513 513
514 have_def_file = filter(lambda x: x.startswith('/DEF:'), ldflags) 514 have_def_file = filter(lambda x: x.startswith('/DEF:'), ldflags)
515 manifest_flags, intermediate_manifest_file = self._GetLdManifestFlags( 515 manifest_flags, manifest_files = self._GetLdManifestFlags(
516 config, manifest_base_name, is_executable and not have_def_file) 516 config, manifest_base_name, gyp_to_build_path,
517 is_executable and not have_def_file)
517 ldflags.extend(manifest_flags) 518 ldflags.extend(manifest_flags)
518 manifest_files = self._GetAdditionalManifestFiles(config, gyp_to_build_path)
519 manifest_files.append(intermediate_manifest_file)
520
521 return ldflags, manifest_files 519 return ldflags, manifest_files
522 520
523 def _GetLdManifestFlags(self, config, name, allow_isolation): 521 def _GetLdManifestFlags(self, config, name, gyp_to_build_path,
522 allow_isolation):
524 """Returns the set of flags that need to be added to the link to generate 523 """Returns the set of flags that need to be added to the link to generate
525 a default manifest, as well as the name of the generated file.""" 524 a default manifest, as well as the list of all the manifest files to be
526 # The manifest is generated by default. 525 merged by the manifest tool."""
526 generate_manifest = self._Setting(('VCLinkerTool', 'GenerateManifest'),
527 config,
528 default='true')
529 if generate_manifest != 'true':
530 # This means not only that the linker should not generate the intermediate
531 # manifest but also that the manifest tool should do nothing even when
532 # additional manifests are specified.
533 return ['/MANIFEST:NO'], []
534
527 output_name = name + '.intermediate.manifest' 535 output_name = name + '.intermediate.manifest'
528 flags = [ 536 flags = [
529 '/MANIFEST', 537 '/MANIFEST',
530 '/ManifestFile:' + output_name, 538 '/ManifestFile:' + output_name,
531 ] 539 ]
532 540
533 config = self._TargetConfig(config) 541 config = self._TargetConfig(config)
534 enable_uac = self._Setting(('VCLinkerTool', 'EnableUAC'), config, 542 enable_uac = self._Setting(('VCLinkerTool', 'EnableUAC'), config,
535 default='true') 543 default='true')
536 if enable_uac == 'true': 544 if enable_uac == 'true':
537 execution_level = self._Setting(('VCLinkerTool', 'UACExecutionLevel'), 545 execution_level = self._Setting(('VCLinkerTool', 'UACExecutionLevel'),
538 config, default='0') 546 config, default='0')
539 execution_level_map = { 547 execution_level_map = {
540 '0': 'asInvoker', 548 '0': 'asInvoker',
541 '1': 'highestAvailable', 549 '1': 'highestAvailable',
542 '2': 'requireAdministrator' 550 '2': 'requireAdministrator'
543 } 551 }
544 552
545 ui_access = self._Setting(('VCLinkerTool', 'UACUIAccess'), config, 553 ui_access = self._Setting(('VCLinkerTool', 'UACUIAccess'), config,
546 default='false') 554 default='false')
547 flags.append('''/MANIFESTUAC:"level='%s' uiAccess='%s'"''' % 555 flags.append('''/MANIFESTUAC:"level='%s' uiAccess='%s'"''' %
548 (execution_level_map[execution_level], ui_access)) 556 (execution_level_map[execution_level], ui_access))
549 else: 557 else:
550 flags.append('/MANIFESTUAC:NO') 558 flags.append('/MANIFESTUAC:NO')
551 559
552 if allow_isolation: 560 if allow_isolation:
553 flags.append('/ALLOWISOLATION') 561 flags.append('/ALLOWISOLATION')
554 return flags, output_name 562
563 manifest_files = [output_name]
564 manifest_files += self._GetAdditionalManifestFiles(config,
565 gyp_to_build_path)
566 return flags, manifest_files
555 567
556 def _GetAdditionalManifestFiles(self, config, gyp_to_build_path): 568 def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
557 """Gets additional manifest files that are added to the default one 569 """Gets additional manifest files that are added to the default one
558 generated by the linker.""" 570 generated by the linker."""
559 files = self._Setting(('VCManifestTool', 'AdditionalManifestFiles'), config, 571 files = self._Setting(('VCManifestTool', 'AdditionalManifestFiles'), config,
560 default=[]) 572 default=[])
561 if isinstance(files, str): 573 if isinstance(files, str):
562 files = files.split(';') 574 files = files.split(';')
563 return [os.path.normpath( 575 return [os.path.normpath(
564 gyp_to_build_path(self.ConvertVSMacros(f, config=config))) 576 gyp_to_build_path(self.ConvertVSMacros(f, config=config)))
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 884
873 # To determine processor word size on Windows, in addition to checking 885 # To determine processor word size on Windows, in addition to checking
874 # PROCESSOR_ARCHITECTURE (which reflects the word size of the current 886 # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
875 # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which 887 # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which
876 # contains the actual word size of the system when running thru WOW64). 888 # contains the actual word size of the system when running thru WOW64).
877 if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or 889 if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or
878 '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')): 890 '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')):
879 default_variables['MSVS_OS_BITS'] = 64 891 default_variables['MSVS_OS_BITS'] = 64
880 else: 892 else:
881 default_variables['MSVS_OS_BITS'] = 32 893 default_variables['MSVS_OS_BITS'] = 32
OLDNEW
« no previous file with comments | « pylib/gyp/generator/ninja.py ('k') | test/win/gyptest-link-generate-manifest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698