summaryrefslogtreecommitdiffstats
path: root/media/webrtc/trunk/build/compiler_version.py
diff options
context:
space:
mode:
Diffstat (limited to 'media/webrtc/trunk/build/compiler_version.py')
-rwxr-xr-xmedia/webrtc/trunk/build/compiler_version.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/media/webrtc/trunk/build/compiler_version.py b/media/webrtc/trunk/build/compiler_version.py
new file mode 100755
index 000000000..eae7b176d
--- /dev/null
+++ b/media/webrtc/trunk/build/compiler_version.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Compiler version checking tool for gcc
+
+Print gcc version as XY if you are running gcc X.Y.*.
+This is used to tweak build flags for gcc 4.4.
+"""
+
+import os
+import re
+import subprocess
+import sys
+
+def GetVersion(compiler):
+ try:
+ # Note that compiler could be something tricky like "distcc g++".
+ compiler = compiler + " -dumpversion"
+ pipe = subprocess.Popen(compiler, shell=True,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ gcc_output, gcc_error = pipe.communicate()
+ if pipe.returncode:
+ raise subprocess.CalledProcessError(pipe.returncode, compiler)
+
+ result = re.match(r"(\d+)\.(\d+)", gcc_output)
+ return result.group(1) + result.group(2)
+ except Exception, e:
+ if gcc_error:
+ sys.stderr.write(gcc_error)
+ print >> sys.stderr, "compiler_version.py failed to execute:", compiler
+ print >> sys.stderr, e
+ return ""
+
+def GetVersionFromEnvironment(compiler_env):
+ """ Returns the version of compiler
+
+ If the compiler was set by the given environment variable and exists,
+ return its version, otherwise None is returned.
+ """
+ cxx = os.getenv(compiler_env, None)
+ if cxx:
+ cxx_version = GetVersion(cxx)
+ if cxx_version != "":
+ return cxx_version
+ return None
+
+def main():
+ # Check if CXX_target or CXX environment variable exists an if it does use
+ # that compiler.
+ # TODO: Fix ninja (see http://crbug.com/140900) instead and remove this code
+ # In ninja's cross compile mode, the CXX_target is target compiler, while
+ # the CXX is host. The CXX_target needs be checked first, though the target
+ # and host compiler have different version, there seems no issue to use the
+ # target compiler's version number as gcc_version in Android.
+ cxx_version = GetVersionFromEnvironment("CXX_target")
+ if cxx_version:
+ print cxx_version
+ return 0
+
+ cxx_version = GetVersionFromEnvironment("CXX")
+ if cxx_version:
+ print cxx_version
+ return 0
+
+ # Otherwise we check the g++ version.
+ gccversion = GetVersion("g++")
+ if gccversion != "":
+ print gccversion
+ return 0
+
+ return 1
+
+if __name__ == "__main__":
+ sys.exit(main())