From: GregNoel Date: Wed, 10 Sep 2008 06:33:28 +0000 (+0000) Subject: Issues 2076 and 2232, use ENV and suppress stderr when checking GCC version ID X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=18a4199dd651d165107a23b4d2fa5c4c0ec1fb74;p=scons.git Issues 2076 and 2232, use ENV and suppress stderr when checking GCC version ID git-svn-id: http://scons.tigris.org/svn/scons/trunk@3382 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- diff --git a/src/engine/SCons/Tool/g++.py b/src/engine/SCons/Tool/g++.py index 917229fa..0745c03f 100644 --- a/src/engine/SCons/Tool/g++.py +++ b/src/engine/SCons/Tool/g++.py @@ -35,8 +35,8 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import os.path import re +import subprocess -import SCons.Defaults import SCons.Tool import SCons.Util @@ -63,11 +63,23 @@ def generate(env): env['SHOBJSUFFIX'] = '.pic.o' # determine compiler version if env['CXX']: - line = os.popen(env['CXX'] + ' --version').readline() + try: + pipe = subprocess.Popen([env['CXX'], '--version'], + env=env['ENV'], + stderr = subprocess.PIPE, + stdout = subprocess.PIPE) + except OSError: + return + # -dumpversion was added in GCC 3.0. As long as we're supporting + # GCC versions older than that, we should use --version and a + # regular expression. + #line = pipe.stdout.read().strip() + #if line: + # env['CXXVERSION'] = line + line = pipe.stdout.readline() match = re.search(r'[0-9]+(\.[0-9]+)+', line) if match: env['CXXVERSION'] = match.group(0) - def exists(env): return env.Detect(compilers) diff --git a/src/engine/SCons/Tool/gcc.py b/src/engine/SCons/Tool/gcc.py index ad02e0de..4e81ba84 100644 --- a/src/engine/SCons/Tool/gcc.py +++ b/src/engine/SCons/Tool/gcc.py @@ -33,11 +33,12 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" -import SCons.Util - import cc import os import re +import subprocess + +import SCons.Util compilers = ['gcc', 'cc'] @@ -52,7 +53,20 @@ def generate(env): env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -fPIC') # determine compiler version if env['CC']: - line = os.popen(env['CC'] + ' --version').readline() + try: + pipe = subprocess.Popen([env['CC'], '--version'], + env=env['ENV'], + stderr = subprocess.PIPE, + stdout = subprocess.PIPE) + except OSError: + return + # -dumpversion was added in GCC 3.0. As long as we're supporting + # GCC versions older than that, we should use --version and a + # regular expression. + #line = pipe.stdout.read().strip() + #if line: + # env['CCVERSION'] = line + line = pipe.stdout.readline() match = re.search(r'[0-9]+(\.[0-9]+)+', line) if match: env['CCVERSION'] = match.group(0)