diff options
Diffstat (limited to 'SConstruct')
-rw-r--r-- | SConstruct | 90 |
1 files changed, 15 insertions, 75 deletions
diff --git a/SConstruct b/SConstruct index d71a68393f0..ba567a001ca 100644 --- a/SConstruct +++ b/SConstruct @@ -20,6 +20,11 @@ import SCons # we are to avoid bulk loading all tools in the DefaultEnvironment. DefaultEnvironment(tools=[]) +# These come from site_scons/mongo. Import these things +# after calling DefaultEnvironment, for the sake of paranoia. +import mongo +import mongo.platform as mongo_platform + EnsurePythonVersion(2, 7) EnsureSConsVersion(2, 5) @@ -34,72 +39,7 @@ from mongo_scons_utils import ( import libdeps -def print_build_failures(): - from SCons.Script import GetBuildFailures - for bf in GetBuildFailures(): - print "%s failed: %s" % (bf.node, bf.errstr) -atexit.register(print_build_failures) - -def versiontuple(v): - return tuple(map(int, (v.split(".")))) - -# --- OS identification --- -# -# This needs to precede the options section so that we can only offer some options on certain -# operating systems. - -# This function gets the running OS as identified by Python -# It should only be used to set up defaults for options/variables, because -# its value could potentially be overridden by setting TARGET_OS on the -# command-line. Treat this output as the value of HOST_OS -def get_running_os_name(): - running_os = os.sys.platform - if running_os.startswith('linux'): - running_os = 'linux' - elif running_os.startswith('freebsd'): - running_os = 'freebsd' - elif running_os.startswith('openbsd'): - running_os = 'openbsd' - elif running_os == 'sunos5': - running_os = 'solaris' - elif running_os == 'win32': - running_os = 'windows' - elif running_os == 'darwin': - running_os = 'macOS' - else: - running_os = 'unknown' - return running_os - -def env_get_os_name_wrapper(self): - return env['TARGET_OS'] - -def is_os_raw(target_os, os_list_to_check): - okay = False - - darwin_os_list = [ 'macOS', 'tvOS', 'tvOS-sim', 'iOS', 'iOS-sim' ] - posix_os_list = [ 'linux', 'openbsd', 'freebsd', 'solaris' ] + darwin_os_list - - for p in os_list_to_check: - if p == 'posix' and target_os in posix_os_list: - okay = True - break - if p == 'darwin' and target_os in darwin_os_list: - okay = True - break - elif p == target_os: - okay = True - break - return okay - -# This function tests the running OS as identified by Python -# It should only be used to set up defaults for options/variables, because -# its value could potentially be overridden by setting TARGET_OS on the -# command-line. Treat this output as the value of HOST_OS -def is_running_os(*os_list): - return is_os_raw(get_running_os_name(), os_list) - -def env_os_is_wrapper(self, *os_list): - return is_os_raw(self['TARGET_OS'], os_list) +atexit.register(mongo.print_build_failures) def add_option(name, **kwargs): @@ -555,7 +495,7 @@ def variable_shlex_converter(val): return val parse_mode = get_option('variable-parse-mode') if parse_mode == 'auto': - parse_mode = 'other' if is_running_os('windows') else 'posix' + parse_mode = 'other' if mongo_platform.is_running_os('windows') else 'posix' return shlex.split(val, posix=(parse_mode == 'posix')) def variable_arch_converter(val): @@ -585,12 +525,12 @@ def variable_arch_converter(val): # If we aren't on a platform where we know the minimal set of tools, we fall back to loading # the 'default' tool. def decide_platform_tools(): - if is_running_os('windows'): + if mongo_platform.is_running_os('windows'): # we only support MS toolchain on windows return ['msvc', 'mslink', 'mslib', 'masm'] - elif is_running_os('linux', 'solaris'): + elif mongo_platform.is_running_os('linux', 'solaris'): return ['gcc', 'g++', 'gnulink', 'ar', 'gas'] - elif is_running_os('darwin'): + elif mongo_platform.is_running_os('darwin'): return ['gcc', 'g++', 'applelink', 'ar', 'as'] else: return ["default"] @@ -778,7 +718,7 @@ env_vars.Add('TARGET_ARCH', env_vars.Add('TARGET_OS', help='Sets the target OS to build for', - default=get_running_os_name()) + default=mongo_platform.get_running_os_name()) env_vars.Add('TOOLS', help='Sets the list of SCons tools to add to the environment', @@ -933,8 +873,8 @@ envDict = dict(BUILD_ROOT=buildDir, env = Environment(variables=env_vars, **envDict) del envDict -env.AddMethod(env_os_is_wrapper, 'TargetOSIs') -env.AddMethod(env_get_os_name_wrapper, 'GetTargetOSName') +env.AddMethod(mongo_platform.env_os_is_wrapper, 'TargetOSIs') +env.AddMethod(mongo_platform.env_get_os_name_wrapper, 'GetTargetOSName') def fatal_error(env, msg, *args): print msg.format(*args) @@ -1131,7 +1071,7 @@ if not detectConf.CheckForCXXLink(): detectEnv['CXX']) toolchain_search_sequence = [ "GCC", "clang" ] -if is_running_os('windows'): +if mongo_platform.is_running_os('windows'): toolchain_search_sequence = [ 'MSVC', 'clang', 'GCC' ] for candidate_toolchain in toolchain_search_sequence: if detectConf.CheckForToolchain(candidate_toolchain, "C++", "CXX", ".cpp"): @@ -3011,7 +2951,7 @@ env.Tool("compilation_db") # If we can, load the dagger tool for build dependency graph introspection. # Dagger is only supported on Linux and OSX (not Windows or Solaris). -should_dagger = ( is_running_os('osx') or is_running_os('linux') ) and "dagger" in COMMAND_LINE_TARGETS +should_dagger = ( mongo_platform.is_running_os('osx') or mongo_platform.is_running_os('linux') ) and "dagger" in COMMAND_LINE_TARGETS if should_dagger: env.Tool("dagger") |