chromium-src-build/compiler_version.py

77 строки
2.3 KiB
Python
Executable File

#!/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())