Skip to content
Snippets Groups Projects

Fix scons invocation tests

Merged Dominic Klinger requested to merge FixSconsInvocationTests into master
6 files
+ 87
108
Compare changes
  • Side-by-side
  • Inline
Files
6
+ 29
38
@@ -17,9 +17,9 @@ SConsider-specific g++ tool initialization
import os
import re
from logging import getLogger
from subprocess import PIPE
import SCons.Tool
import SCons.Util
from SConsider.PopenHelper import PopenHelper, PIPE
logger = getLogger(__name__)
compilers = ['g++']
@@ -58,12 +58,13 @@ def generate(env):
bitwidth = env.getBitwidth()
if compiler_subject:
# pipe = SCons.Action._subproc(env, [compiler_subject, '-dumpversion'],
pipe = SCons.Action._subproc(env, [compiler_subject, '--version'],
stdin='devnull',
stderr='devnull',
stdout=PIPE)
if pipe.wait() != 0:
_proc = PopenHelper(
[compiler_subject, '--version'],
stdout=PIPE,
stderr=PIPE)
_out, _err = _proc.communicate()
if _proc.returncode != 0:
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
@@ -71,7 +72,7 @@ def generate(env):
# line = pipe.stdout.read().strip()
# if line:
# env['CXXVERSION'] = line
line = pipe.stdout.readline()
line = _out.strip()
versionmatch = re.search(r'(\s+)([0-9]+(\.[0-9]+)+)', line)
gccfssmatch = re.search(r'(\(gccfss\))', line)
if versionmatch:
@@ -82,7 +83,7 @@ def generate(env):
# own extension to detect system include paths
import time
fName = '.code2Compile.' + str(time.time()) + '.' + str(os.getpid())
fName = '.code2Compile.cpp.' + str(time.time()) + '.' + str(os.getpid())
tFile = os.path.join(SCons.Script.Dir('.').get_abspath(), fName)
outFile = os.path.join(
SCons.Script.Dir('.').get_abspath(), fName + '.o')
@@ -95,46 +96,37 @@ def generate(env):
"failed to create compiler input file, check folder permissions and retry",
exc_info=True)
return
pipe = SCons.Action._subproc(env, [compiler_subject, '-v', '-xc++',
tFile, '-o', outFile,
'-m' + bitwidth],
stdin='devnull',
stderr=PIPE,
stdout=PIPE)
pRet = pipe.wait()
os.remove(tFile)
def formattedStdOutAndStdErr(the_pipe, prefix_text=None):
text_to_join = ['---- stdout ----', the_pipe.stdout.read(),
'---- stderr ----', the_pipe.stderr.read()]
if prefix_text:
text_to_join[:0] = [prefix_text]
return os.linesep.join(text_to_join)
_proc = PopenHelper(
[compiler_subject, '-v', '-xc++', tFile, '-o', outFile, '-m' + bitwidth],
stdout=PIPE,
stderr=PIPE)
_out, _err = _proc.communicate()
text_to_join = ['---- stdout ----', _out,
'---- stderr ----', _err]
build_output = os.linesep.join(text_to_join)
logger.debug(build_output)
try:
os.remove(outFile)
for rfile in [tFile, outFile]:
os.remove(rfile)
except:
logger.error(
formattedStdOutAndStdErr(
pipe,
prefix_text="{0} {1}, check compiler output for errors:".format(
outFile, 'could not be deleted'
if os.path.exists(outFile) else 'was not created')),
"{0} {1}, check compiler output for errors:".format(
rfile, 'could not be deleted'
if os.path.exists(rfile) else 'was not created')+os.linesep+build_output,
exc_info=True)
raise SCons.Errors.UserError(
'Build aborted, {0} compiler detection failed!'.format(
compiler_subject))
if pRet != 0:
logger.error(formattedStdOutAndStdErr(
pipe,
prefix_text="compile command failed with return code {0}:".format(
pRet)))
if _proc.returncode != 0:
logger.error(
"compile command failed with return code {0}:".format(proc.returncode)+os.linesep+build_output)
raise SCons.Errors.UserError(
'Build aborted, {0} compiler detection failed!'.format(
compiler_subject))
pout = pipe.stderr.read()
reIncl = re.compile(r'#include <\.\.\.>.*:$\s((^ .*\s)*)', re.M)
match = reIncl.search(pout)
match = reIncl.search(_err)
sysincludes = []
if match:
for it in re.finditer("^ (.*)$", match.group(1), re.M):
@@ -144,7 +136,6 @@ def generate(env):
platf = env['PLATFORM']
env.AppendUnique(CPPDEFINES=['_POSIX_PTHREAD_SEMANTICS', '_REENTRANT'])
env.AppendUnique(CCFLAGS='-m' + bitwidth)
if str(platf) == 'darwin':
if bitwidth == '32':
Loading