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

Unified Diff: build/compiler_version.py

Issue 235083003: gyp performance: Add a DoMain version of build/compiler_version (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: compiler_version: Rebased to newer master Created 6 years, 8 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 | « build/common.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/compiler_version.py
diff --git a/build/compiler_version.py b/build/compiler_version.py
index fd23d89bd63b21c2304b80e22c12df7450120b42..48df6c8ba9858ee6a647565d668fc569ba32b533 100755
--- a/build/compiler_version.py
+++ b/build/compiler_version.py
@@ -15,8 +15,15 @@ import subprocess
import sys
+compiler_version_cache = {} # Map from (compiler, tool) -> version.
+
+
def GetVersion(compiler, tool):
tool_output = tool_error = None
+ cache_key = (compiler, tool)
+ cached_version = compiler_version_cache.get(cache_key)
+ if cached_version:
+ return cached_version
try:
# Note that compiler could be something tricky like "distcc g++".
if tool == "compiler":
@@ -43,14 +50,20 @@ def GetVersion(compiler, tool):
else:
raise Exception("Unknown tool %s" % tool)
- pipe = subprocess.Popen(compiler, shell=True,
+ # Force the locale to C otherwise the version string could be localized
+ # making regex matching fail.
+ env = os.environ.copy()
+ env["LC_ALL"] = "C"
+ pipe = subprocess.Popen(compiler, shell=True, env=env,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
tool_output, tool_error = pipe.communicate()
if pipe.returncode:
raise subprocess.CalledProcessError(pipe.returncode, compiler)
- result = version_re.match(tool_output)
- return result.group(1) + result.group(2)
+ parsed_output = version_re.match(tool_output)
+ result = parsed_output.group(1) + parsed_output.group(2)
+ compiler_version_cache[cache_key] = result
+ return result
except Exception, e:
if tool_error:
sys.stderr.write(tool_error)
@@ -60,32 +73,37 @@ def GetVersion(compiler, tool):
def main(args):
- # Force the locale to C otherwise the version string could be localized
- # making regex matching fail.
- os.environ["LC_ALL"] = "C"
+ ret_code, result = ExtractVersion(args)
+ if ret_code == 0:
+ print result
+ return ret_code
+
+def DoMain(args):
+ """Hook to be called from gyp without starting a separate python
+ interpreter."""
+ ret_code, result = ExtractVersion(args)
+ if ret_code == 0:
+ return result
+ raise Exception("Failed to extract compiler version for args: %s" % args)
+
+
+def ExtractVersion(args):
tool = "compiler"
if len(args) == 1:
tool = args[0]
elif len(args) > 1:
print "Unknown arguments!"
- # Check if CXX environment variable exists and
- # if it does use that compiler.
- cxx = os.getenv("CXX", None)
- if cxx:
- cxxversion = GetVersion(cxx, tool)
- if cxxversion != "":
- print cxxversion
- return 0
- else:
- # Otherwise we check the g++ version.
- gccversion = GetVersion("g++", tool)
- if gccversion != "":
- print gccversion
- return 0
-
- return 1
+ # Check if CXX environment variable exists and if it does use that
+ # compiler, otherwise check g++.
+ compiler = os.getenv("CXX", "g++")
+ if compiler:
+ compiler_version = GetVersion(compiler, tool)
+ if compiler_version != "":
+ return (0, compiler_version)
+
+ return (1, None)
if __name__ == "__main__":
« no previous file with comments | « build/common.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698