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

Unified Diff: pylib/gyp/win_tool.py

Issue 83803003: Adds an helper class to shard mspdbsrv. (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 1 month 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pylib/gyp/win_tool.py
===================================================================
--- pylib/gyp/win_tool.py (revision 1796)
+++ pylib/gyp/win_tool.py (working copy)
@@ -10,12 +10,16 @@
"""
import os
+import re
import shutil
import subprocess
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+# A regex matching an argument corresponding to a PDB filename passed as an
+# argument to link.exe.
+_LINK_EXE_PDB_ARG = re.compile('/PDB:(?P<pdb>.+\.exe\.pdb)$', re.IGNORECASE)
def main(args):
executor = WinTool()
@@ -28,6 +32,35 @@
"""This class performs all the Windows tooling steps. The methods can either
be executed directly, or dispatched from an argument list."""
+ def _MaybeUseSeparateMspdbsrv(self, env, args):
+ """Allows to use a unique instance of mspdbsrv.exe for the linkers linking
+ an .exe target if GYP_USE_SEPARATE_MSPDBSRV has been set."""
+ if not os.environ.get('GYP_USE_SEPARATE_MSPDBSRV'):
+ return
+
+ if len(args) < 1:
+ raise Exception("Not enough arguments")
+
+ if args[0] != 'link.exe':
+ return
+
+ # Checks if this linker produces a PDB for an .exe target. If so use the
+ # name of this PDB to generate an endpoint name for mspdbsrv.exe.
+ endpoint_name = None
+ for arg in args:
+ m = _LINK_EXE_PDB_ARG.match(arg)
+ if m:
+ endpoint_name = '%s_%d' % (m.group('pdb'), os.getpid())
+ break
+
+ if endpoint_name is None:
+ return
+
+ # Adds the appropriate environment variable. This will be read by link.exe
+ # to know which instance of mspdbsrv.exe it should connect to (if it's
+ # not set then the default endpoint is used).
+ env['_MSPDBSRV_ENDPOINT_'] = endpoint_name
+
def Dispatch(self, args):
"""Dispatches a string command to a method."""
if len(args) < 1:
@@ -71,13 +104,17 @@
This happens when there are exports from the dll or exe.
"""
env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
+ self._MaybeUseSeparateMspdbsrv(env, args)
+ link = subprocess.Popen(args,
+ shell=True,
+ env=env,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ out, _ = link.communicate()
for line in out.splitlines():
if not line.startswith(' Creating library '):
print line
- return popen.returncode
+ return link.returncode
def ExecManifestWrapper(self, arch, *args):
"""Run manifest tool with environment set. Strip out undesirable warning
@@ -168,9 +205,7 @@
env = self._GetEnv(arch)
args = open(rspfile).read()
dir = dir[0] if dir else None
- popen = subprocess.Popen(args, shell=True, env=env, cwd=dir)
- popen.wait()
- return popen.returncode
+ return subprocess.call(args, shell=True, env=env, cwd=dir)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698