summaryrefslogtreecommitdiff
path: root/site_scons
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2015-08-27 10:03:36 -0400
committerJonathan Reams <jbreams@mongodb.com>2015-09-04 15:27:03 -0400
commite729e9caf7847779f281a2043725dce643f2221b (patch)
treeabebf2024c17b6332301206586186ccb36103f25 /site_scons
parent16f9795da51d4a8b2e8c33fcedd66a662f2c069c (diff)
downloadmongo-e729e9caf7847779f281a2043725dce643f2221b.tar.gz
SERVER-16852 Print buildInfo in version output/allow override of buildInfo
Diffstat (limited to 'site_scons')
-rw-r--r--site_scons/mongo_scons_utils.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/site_scons/mongo_scons_utils.py b/site_scons/mongo_scons_utils.py
index 1ddaf9915dd..69b81f751dd 100644
--- a/site_scons/mongo_scons_utils.py
+++ b/site_scons/mongo_scons_utils.py
@@ -1,4 +1,6 @@
import md5
+import subprocess
+import SCons.Action
def default_variant_dir_generator(target, source, env, for_signature):
@@ -35,3 +37,64 @@ def os_specific_variant_dir_generator(target, source, env, for_signature):
return '-'.join([
env['TARGET_OS'],
default_variant_dir_generator(target, source, env, for_signature)])
+
+def get_toolchain_ver(env, tool):
+ # By default we don't know the version of each tool, and only report what
+ # command gets executed (gcc vs /opt/mongodbtoolchain/bin/gcc).
+ verstr = "version unknown"
+ proc = None
+ if env.ToolchainIs('clang', 'gcc'):
+ proc = SCons.Action._subproc(env,
+ env.subst("${%s} --version" % tool),
+ stdout=subprocess.PIPE,
+ stderr='devnull',
+ stdin='devnull',
+ universal_newlines=True,
+ error='raise',
+ shell=True)
+ verstr = proc.stdout.readline()
+
+ elif env.ToolchainIs('msvc') and env.TargetOSIs('windows'):
+ proc = SCons.Action._subproc(env,
+ env.subst("${%s}" % tool),
+ stdout='devnull',
+ stderr=subprocess.PIPE,
+ stdin='devnull',
+ universal_newlines=True,
+ error='raise',
+ shell=True)
+ verstr = proc.stderr.readline()
+
+ # If we started a process, we should drain its stdout/stderr and wait for
+ # it to end.
+ if proc:
+ proc.communicate()
+
+ return env.subst('${%s}: %s' % (tool, verstr))
+
+# This is the tuple that will be returned by the buildInfo command and
+# printed by the --version command-line option to mongod.
+# Each tuple consists of:
+# key (string)
+# value (string)
+# should be included in buildInfo output (bool)
+# should be included in --version output (bool)
+# The values will be passed through env.subst, so you can use any SCons variables you
+# want to define them.
+def default_buildinfo_environment_data():
+ return (
+ ('distmod', '$MONGO_DISTMOD', True, True,),
+ ('distarch', '$MONGO_DISTARCH', True, True,),
+ ('cc', '$CC_VERSION', True, False,),
+ ('ccflags', '$CCFLAGS', True, False,),
+ ('cxx', '$CXX_VERSION', True, False,),
+ ('cxxflags', '$CXXFLAGS', True, False,),
+ ('linkflags', '$LINKFLAGS', True, False,),
+ ('target_arch', '$TARGET_ARCH', True, True,),
+ ('target_os', '$TARGET_OS', True, False,),
+ )
+
+# If you want buildInfo and --version to be relatively empty, set
+# env['MONGO_BUILDINFO_ENVIRONMENT_DATA'] = empty_buildinfo_environment_data()
+def empty_buildinfo_environment_data():
+ return ()