diff options
author | Mathew Robinson <chasinglogic@gmail.com> | 2019-08-16 11:59:20 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-08-21 17:27:49 +0000 |
commit | d02941c18774c64442f6ac18b8b2a51abc53ad50 (patch) | |
tree | 3d388429f95b24ff15700f361759b5527ee8b809 /src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py | |
parent | ca0dd2cb13aaabe7edd9c1ccb6cbbccfa2ea5356 (diff) | |
download | mongo-d02941c18774c64442f6ac18b8b2a51abc53ad50.tar.gz |
SERVER-50403 SERVER-39467 Upgrade vendored SCons to 3.1.1
(cherry picked from commit 364b08d9d8348a9bf93cbff8eff7181da1a8f336)
Diffstat (limited to 'src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py')
-rw-r--r-- | src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py b/src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py new file mode 100644 index 00000000000..4f70be5fe0e --- /dev/null +++ b/src/third_party/scons-3.1.1/scons-local-3.1.1/SCons/Tool/gcc.py @@ -0,0 +1,111 @@ +"""SCons.Tool.gcc + +Tool-specific initialization for gcc. + +There normally shouldn't be any need to import this module directly. +It will usually be imported through the generic SCons.Tool.Tool() +selection method. + +""" + +# +# Copyright (c) 2001 - 2019 The SCons Foundation +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "src/engine/SCons/Tool/gcc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan" + +from . import cc +import os +import re +import subprocess + +import SCons.Util + +compilers = ['gcc', 'cc'] + + +def generate(env): + """Add Builders and construction variables for gcc to an Environment.""" + + if 'CC' not in env: + env['CC'] = env.Detect(compilers) or compilers[0] + + cc.generate(env) + + if env['PLATFORM'] in ['cygwin', 'win32']: + env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') + else: + env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -fPIC') + # determine compiler version + version = detect_version(env, env['CC']) + if version: + env['CCVERSION'] = version + + +def exists(env): + # is executable, and is a GNU compiler (or accepts '--version' at least) + return detect_version(env, env.Detect(env.get('CC', compilers))) + + +def detect_version(env, cc): + """Return the version of the GNU compiler, or None if it is not a GNU compiler.""" + version = None + cc = env.subst(cc) + if not cc: + return version + + # -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. + # pipe = SCons.Action._subproc(env, SCons.Util.CLVar(cc) + ['-dumpversion'], + pipe = SCons.Action._subproc(env, SCons.Util.CLVar(cc) + ['--version'], + stdin='devnull', + stderr='devnull', + stdout=subprocess.PIPE) + if pipe.wait() != 0: + return version + + with pipe.stdout: + # -dumpversion variant: + # line = pipe.stdout.read().strip() + # --version variant: + line = SCons.Util.to_str(pipe.stdout.readline()) + # Non-GNU compiler's output (like AIX xlc's) may exceed the stdout buffer: + # So continue with reading to let the child process actually terminate. + while SCons.Util.to_str(pipe.stdout.readline()): + pass + + # -dumpversion variant: + # if line: + # version = line + # --version variant: + match = re.search(r'[0-9]+(\.[0-9]+)+', line) + if match: + version = match.group(0) + + return version + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=4 shiftwidth=4: |