Linux: Autodetect and change build flags when using gcc 4.4.

This runs g++ -dumpversion (or $CXX) to establish the compiler version
and set the gyp gcc_version variable automatically.

BUG=25209

Review URL: http://codereview.chromium.org/339046

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30824 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/build/common.gypi b/build/common.gypi
index 05c8de9d..52ce4d2 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -182,6 +182,9 @@
 
     'conditions': [
       ['OS=="linux"', {
+        # This will set gcc_version to XY if you are running gcc X.Y.*.
+        # This is used to tweak build flags for gcc 4.4.
+        'gcc_version%': '<!(python <(DEPTH)/build/compiler_version.py)',
         'conditions': [
           ['branding=="Chrome" or linux_chromium_breakpad==1', {
             'linux_breakpad%': 1,
diff --git a/build/compiler_version.py b/build/compiler_version.py
new file mode 100755
index 0000000..5eb467c
--- /dev/null
+++ b/build/compiler_version.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+
+# Copyright (c) 2009 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, stdout=subprocess.PIPE, shell=True)
+    gcc_output = pipe.communicate()[0]
+    result = re.match(r"(\d+)\.(\d+)\..*", gcc_output)
+    return result.group(1) + result.group(2)
+  except Exception, e:
+    print >> sys.stderr, "compiler_version.py failed to execute:", compiler
+    print >> sys.stderr, e
+    return ""
+
+def main():
+  # Check if CXX environment variable exists and
+  # if it does use that compiler.
+  cxx = os.getenv("CXX", None)
+  if cxx:
+    cxxversion = GetVersion(cxx)
+    if cxxversion != "":
+      print cxxversion
+      return 0
+  else:
+    # Otherwise we check the g++ version.
+    gccversion = GetVersion("g++")
+    if gccversion != "":
+      print gccversion
+      return 0
+
+  return 1
+
+if __name__ == "__main__":
+  sys.exit(main())