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

Unified Diff: tools/win/split_link/split_link.py

Issue 14850021: Generate, merge, and embed manifest when doing split_link (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/win/split_link/install_split_link.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/win/split_link/split_link.py
diff --git a/tools/win/split_link/split_link.py b/tools/win/split_link/split_link.py
index 4519155170b9cd31c6d5a47aab68e384f9b90fd2..344b34960e4bfafecc67066ca54c8e8892d41820 100644
--- a/tools/win/split_link/split_link.py
+++ b/tools/win/split_link/split_link.py
@@ -49,9 +49,11 @@ def GetFlagsAndInputs(argv):
flags = []
for arg in args:
lower_arg = arg.lower()
- # We'll be replacing this ourselves.
+ # We'll be replacing these ourselves.
if lower_arg.startswith('/out:'):
continue
+ if lower_arg.startswith('/manifestfile:'):
+ continue
if (not lower_arg.startswith('/') and
lower_arg.endswith(('.obj', '.lib', '.res'))):
inputs.append(arg)
@@ -61,16 +63,24 @@ def GetFlagsAndInputs(argv):
return flags, inputs
-def GetOriginalLinkerPath():
+def GetRegistryValue(subkey):
try:
val = _winreg.QueryValue(_winreg.HKEY_CURRENT_USER,
- 'Software\\Chromium\\split_link_installed')
+ 'Software\\Chromium\\' + subkey)
if os.path.exists(val):
return val
except WindowsError:
pass
- raise SystemExit("Couldn't read linker location from registry")
+ raise SystemExit("Couldn't read from registry")
+
+
+def GetOriginalLinkerPath():
+ return GetRegistryValue('split_link_installed')
+
+
+def GetMtPath():
+ return GetRegistryValue('split_link_mt_path')
def PartFor(input_file, description_parts, description_all):
@@ -118,7 +128,8 @@ def ParseOutExternals(output):
mo = re.search(r'fatal error LNK1120: (\d+) unresolved externals', output)
# Make sure we have the same number that the linker thinks we have.
- assert mo or not result
+ if mo is None and result:
+ raise SystemExit(output)
if len(result) != int(mo.group(1)):
print output
print 'Expecting %d, got %d' % (int(mo.group(1)), len(result))
@@ -139,6 +150,10 @@ def OutputNameForIndex(index):
return 'chrome%d.dll' % index
+def ManifestNameForIndex(index):
+ return OutputNameForIndex(index) + '.intermediate.manifest'
+
+
def RunLinker(flags, index, inputs, phase):
"""Invokes the linker and returns the stdout, returncode and target name."""
rspfile = 'part%d_%s.rsp' % (index, phase)
@@ -146,8 +161,10 @@ def RunLinker(flags, index, inputs, phase):
print >> f, AsCommandLineArgs(inputs)
print >> f, AsCommandLineArgs(flags)
output_name = OutputNameForIndex(index)
+ manifest_name = ManifestNameForIndex(index)
print >> f, '/ENTRY:ChromeEmptyEntry@12'
print >> f, '/OUT:' + output_name
+ print >> f, '/MANIFESTFILE:' + manifest_name
# Log('[[[\n' + open(rspfile).read() + '\n]]]')
link_exe = GetOriginalLinkerPath()
popen = subprocess.Popen([link_exe, '@' + rspfile], stdout=subprocess.PIPE)
@@ -253,6 +270,16 @@ def main():
import_libs = BuildImportLibs(flags, inputs_by_part, deffiles)
else:
return 1
+
+ mt_exe = GetMtPath()
+ for i, dll in enumerate(dlls):
+ Log('embedding manifest in %s' % dll)
+ args = [mt_exe, '-nologo', '-manifest']
+ args.append(ManifestNameForIndex(i))
+ args.append(description['manifest'])
+ args.append('-outputresource:%s;2' % dll)
+ subprocess.check_call(args)
+
Log('built %r' % dlls)
return 0
« no previous file with comments | « tools/win/split_link/install_split_link.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698