# -*- mode: python; -*- import hashlib # Default and alternative generator definitions go here. # This is the key/value mapping that will be returned by the buildInfo command and # printed by the --version command-line option to mongod. # Each mapped value is in turn a dict consisting of: # key: # value: # inBuildInfo: : should it be included in buildInfo output # inVersion: : should it be included in --version output # The `value` field will be passed through env.subst, so you can use any SCons variables you # want to define them. def default_buildinfo_environment_data(): data = ( ( "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, ), ( "cppdefines", "$CPPDEFINES", True, False, ), ) return { k: {"key": k, "value": v, "inBuildInfo": ibi, "inVersion": iv} for k, v, ibi, iv in data } # If you want buildInfo and --version to be relatively empty, set # MONGO_BUILDINFO_ENVIRONMENT_DATA = empty_buildinfo_environment_data() def empty_buildinfo_environment_data(): return {} # Special cases - if debug is not enabled and optimization is not specified, # default to full optimizationm otherwise turn it off. def get_opt_options(env) -> str: if env.GetOption("opt") == "auto": return "on" if not env.GetOption("dbg") == "on" else "off" else: return env.GetOption("opt") def default_variant_dir_generator(target, source, env, for_signature): if env.GetOption("cache") is not None: return "cached" # If an option should affect the variant directory, name it here. variant_options = [ "opt", "dbg", ] # Hash the named options and their values, and take the first 8 characters of the hash as # the variant name hasher = hashlib.md5() for option in variant_options: hasher.update(option.encode("utf-8")) if option == "opt": hasher.update(get_opt_options(env).encode("utf-8")) else: hasher.update(str(env.GetOption(option)).encode("utf-8")) variant_dir = str(hasher.hexdigest()[0:8]) # If our option hash yields a well known hash, replace it with its name. known_variant_hashes = { "343e6678": "debug", "85fcf9b0": "opt", "981ce870": "debug", "9fface73": "optdebug", "c52b1cc3": "opt", } return known_variant_hashes.get(variant_dir, variant_dir) 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), ] )