diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2015-08-27 10:03:36 -0400 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2015-09-04 15:27:03 -0400 |
commit | e729e9caf7847779f281a2043725dce643f2221b (patch) | |
tree | abebf2024c17b6332301206586186ccb36103f25 /site_scons | |
parent | 16f9795da51d4a8b2e8c33fcedd66a662f2c069c (diff) | |
download | mongo-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.py | 63 |
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 () |