summaryrefslogtreecommitdiffstats
path: root/build/compiler_version.py
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 08:20:16 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 08:20:16 +0000
commit707ad51b4293444091e48753ce9c7f5d845aa0db (patch)
treec9ce1df07a8a6f3b9bf2d5cc9e2d968b378f10e5 /build/compiler_version.py
parent17a659b887ff11329446256784dbafa42f140100 (diff)
downloadchromium_src-707ad51b4293444091e48753ce9c7f5d845aa0db.zip
chromium_src-707ad51b4293444091e48753ce9c7f5d845aa0db.tar.gz
chromium_src-707ad51b4293444091e48753ce9c7f5d845aa0db.tar.bz2
Linux: Detect host g++ version as well as target g++ version.
BUG=360082 Review URL: https://codereview.chromium.org/247623003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265572 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build/compiler_version.py')
-rwxr-xr-xbuild/compiler_version.py59
1 files changed, 46 insertions, 13 deletions
diff --git a/build/compiler_version.py b/build/compiler_version.py
index 48df6c8..05faf54 100755
--- a/build/compiler_version.py
+++ b/build/compiler_version.py
@@ -18,6 +18,33 @@ import sys
compiler_version_cache = {} # Map from (compiler, tool) -> version.
+def Usage(program_name):
+ print '%s MODE TOOL' % os.path.basename(program_name)
+ print 'MODE: host or target.'
+ print 'TOOL: assembler or compiler or linker.'
+ return 1
+
+
+def ParseArgs(args):
+ if len(args) != 2:
+ raise Exception('Invalid number of arguments')
+ mode = args[0]
+ tool = args[1]
+ if mode not in ('host', 'target'):
+ raise Exception('Invalid mode: %s' % mode)
+ if tool not in ('assembler', 'compiler', 'linker'):
+ raise Exception('Invalid tool: %s' % tool)
+ return mode, tool
+
+
+def GetEnvironFallback(var_list, default):
+ """Look up an environment variable from a possible list of variable names."""
+ for var in var_list:
+ if var in os.environ:
+ return os.environ[var]
+ return default
+
+
def GetVersion(compiler, tool):
tool_output = tool_error = None
cache_key = (compiler, tool)
@@ -73,7 +100,13 @@ def GetVersion(compiler, tool):
def main(args):
- ret_code, result = ExtractVersion(args)
+ try:
+ (mode, tool) = ParseArgs(args[1:])
+ except Exception, e:
+ sys.stderr.write(e.message + '\n\n')
+ return Usage(args[0])
+
+ ret_code, result = ExtractVersion(mode, tool)
if ret_code == 0:
print result
return ret_code
@@ -82,29 +115,29 @@ def main(args):
def DoMain(args):
"""Hook to be called from gyp without starting a separate python
interpreter."""
- ret_code, result = ExtractVersion(args)
+ (mode, tool) = ParseArgs(args)
+ ret_code, result = ExtractVersion(mode, tool)
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!"
+def ExtractVersion(mode, tool):
+ # Check if various CXX environment variables exist and use them if they
+ # exist. The preferences and fallback order is a close approximation of
+ # GenerateOutputForConfig() in GYP's ninja generator.
+ # The main difference being not supporting GYP's make_global_settings.
+ environments = ['CXX_target', 'CXX']
+ if mode == 'host':
+ environments = ['CXX_host'] + environments;
+ compiler = GetEnvironFallback(environments, 'c++')
- # 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__":
- sys.exit(main(sys.argv[1:]))
+ sys.exit(main(sys.argv))