# -*- mode: python -*- Import("env use_system_version_of_library usemozjs boostSuffix has_option") Import("wiredtiger") snappySuffix = '-1.1.2' zlibSuffix = '-1.2.8' pcreSuffix = "-8.37" mozjsSuffix = '-38' thirdPartyIncludePathList = [ ('s2', '#/src/third_party/s2'), ('tz', '#/src/third_party/tz'), ] if not use_system_version_of_library('tcmalloc'): thirdPartyIncludePathList.append( ('gperftools', '#/src/third_party/gperftools-2.2/src')) if not use_system_version_of_library('pcre'): thirdPartyIncludePathList.append( ('pcre', '#/src/third_party/pcre' + pcreSuffix)) if not use_system_version_of_library('boost'): thirdPartyIncludePathList.append( ('boost', '#/src/third_party/boost' + boostSuffix)) if not use_system_version_of_library('snappy'): thirdPartyIncludePathList.append( ('snappy', '#/src/third_party/snappy' + snappySuffix)) if not use_system_version_of_library('zlib'): thirdPartyIncludePathList.append( ('zlib', '#/src/third_party/zlib' + zlibSuffix)) # TODO: figure out if we want to offer system versions of mozjs. Mozilla # hasn't offered a source tarball since 24, but in theory they could. # #if not use_system_version_of_library('mozjs'): if True: thirdPartyIncludePathList.append( ('mozjs', ['#/src/third_party/mozjs' + mozjsSuffix + '/include', '#/src/third_party/mozjs' + mozjsSuffix + '/mongo_sources', '#/src/third_party/mozjs' + mozjsSuffix + '/platform/' + env["TARGET_ARCH"] + "/" + env["TARGET_OS"] + "/include", ])) if not use_system_version_of_library('stemmer'): thirdPartyIncludePathList.append( ('stemmer', '#/src/third_party/libstemmer_c/include')) # Note that the wiredtiger.h header is generated, so # we want to look for it in the build directory not # the source directory. # The wiredtiger_ext.h is a static file in the source tree # In the system installs, wiredtiger.h and wiredtiger_ext.h are in the same directory if wiredtiger and not use_system_version_of_library('wiredtiger'): thirdPartyIncludePathList.append( ('wiredtiger', '$BUILD_DIR/third_party/wiredtiger')) thirdPartyIncludePathList.append( ('wiredtiger_ext', '#/src/third_party/wiredtiger/src/include')) if not use_system_version_of_library('yaml'): thirdPartyIncludePathList.append( ('yaml', '#/src/third_party/yaml-cpp-0.5.1/include')) if not use_system_version_of_library('asio'): thirdPartyIncludePathList.append( ('asio', '#/src/third_party/asio-asio-1-11-0/asio/include')) if not use_system_version_of_library('intel_decimal128'): thirdPartyIncludePathList.append( ('intel_decimal128', '#/src/third_party/IntelRDFPMathLib20U1/LIBRARY')) def injectAllThirdPartyIncludePaths(thisEnv): thisEnv.AppendUnique(CPPPATH=[entry[1] for entry in thirdPartyIncludePathList]) def injectThirdPartyIncludePaths(thisEnv, libraries): thisEnv.AppendUnique(CPPPATH=[ entry[1] for entry in thirdPartyIncludePathList if entry[0] in libraries]) env.AddMethod(injectAllThirdPartyIncludePaths, 'InjectAllThirdPartyIncludePaths') env.AddMethod(injectThirdPartyIncludePaths, 'InjectThirdPartyIncludePaths') murmurEnv = env.Clone() murmurEnv.SConscript('murmurhash3/SConscript', exports={ 'env' : murmurEnv }) s2Env = env.Clone() s2Env.InjectThirdPartyIncludePaths(libraries=['s2', 'boost']) s2Env.InjectMongoIncludePaths() s2Env.SConscript('s2/SConscript', exports={'env' : s2Env}) if use_system_version_of_library("pcre"): pcreEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_PCRE_SYSLIBDEP'], env['LIBDEPS_PCRECPP_SYSLIBDEP'], ]) else: pcreEnv = env.Clone() pcreEnv.InjectThirdPartyIncludePaths(libraries=['pcre']) pcreEnv.SConscript('pcre' + pcreSuffix + '/SConscript', exports={ 'env' : pcreEnv }) pcreEnv = pcreEnv.Clone( LIBDEPS=[ 'pcre' + pcreSuffix + '/pcrecpp', ]) pcreEnv.Library( target="shim_pcrecpp", source=[ 'shim_pcrecpp.cc', ]) boostEnv = env if use_system_version_of_library("boost"): # On windows, we don't need the syslibdeps because autolib will select the right libraries # for us automatically. if not env.TargetOSIs('windows'): boostEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_BOOST_PROGRAM_OPTIONS_SYSLIBDEP'], env['LIBDEPS_BOOST_FILESYSTEM_SYSLIBDEP'], env['LIBDEPS_BOOST_THREAD_SYSLIBDEP'], env['LIBDEPS_BOOST_SYSTEM_SYSLIBDEP'], env['LIBDEPS_BOOST_CHRONO_SYSLIBDEP'], ]) else: boostDirectory = 'boost' + boostSuffix boostEnv = env.Clone() boostEnv.InjectThirdPartyIncludePaths(libraries=['boost']) boostEnv.SConscript(boostDirectory + '/SConscript', exports={ 'env' : boostEnv }) boostEnv = boostEnv.Clone( LIBDEPS=[ boostDirectory + '/boost_program_options', boostDirectory + '/boost_filesystem', boostDirectory + '/boost_thread', boostDirectory + '/boost_system', boostDirectory + '/boost_chrono', ]) boostEnv.Library( target="shim_boost", source=[ 'shim_boost.cpp', ]) if use_system_version_of_library("snappy"): snappyEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_SNAPPY_SYSLIBDEP'], ]) else: snappyEnv = env.Clone() snappyEnv.InjectThirdPartyIncludePaths(libraries=['snappy']) snappyEnv.InjectMongoIncludePaths() snappyEnv.SConscript('snappy' + snappySuffix + '/SConscript', exports={ 'env' : snappyEnv }) snappyEnv = snappyEnv.Clone( LIBDEPS=[ 'snappy' + snappySuffix + '/snappy', ]) snappyEnv.Library( target="shim_snappy", source=[ 'shim_snappy.cpp', ]) if use_system_version_of_library("zlib"): zlibEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_ZLIB_SYSLIBDEP'], ]) else: zlibEnv = env.Clone() zlibEnv.InjectThirdPartyIncludePaths(libraries=['zlib']) zlibEnv.InjectMongoIncludePaths() zlibEnv.SConscript('zlib' + zlibSuffix + '/SConscript', exports={ 'env' : zlibEnv }) zlibEnv = zlibEnv.Clone( LIBDEPS=[ 'zlib' + zlibSuffix + '/zlib', ]) zlibEnv.Library( target="shim_zlib", source=[ 'shim_zlib.cpp', ]) if usemozjs: mozjsEnv = env.Clone() mozjsEnv.SConscript('mozjs' + mozjsSuffix + '/SConscript', exports={'env' : mozjsEnv }) mozjsEnv = mozjsEnv.Clone( LIBDEPS=[ 'mozjs' + mozjsSuffix + '/mozjs', 'shim_zlib', ]) mozjsEnv.Library( target="shim_mozjs", source=[ 'shim_mozjs.cpp', ]) gperftoolsEnv = env if (GetOption("allocator") == "tcmalloc"): if use_system_version_of_library("tcmalloc"): gperftoolsEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_TCMALLOC_SYSLIBDEP'], ]) else: gperftoolsEnv = env.Clone() gperftoolsEnv.InjectThirdPartyIncludePaths(libraries=['gperftools']) gperftoolsEnv.InjectMongoIncludePaths() gperftoolsEnv.SConscript('gperftools-2.2/SConscript', exports={ 'env' : gperftoolsEnv }) gperftoolsEnv = gperftoolsEnv.Clone( LIBDEPS=[ 'gperftools-2.2/tcmalloc_minimal', ]) gperftoolsEnv.Library( target="shim_allocator", source=[ "shim_allocator.cpp", ]) if use_system_version_of_library("stemmer"): stemmerEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_STEMMER_SYSLIBDEP'], ]) else: stemmerEnv = env.Clone() stemmerEnv.InjectThirdPartyIncludePaths(libraries=['stemmer']) stemmerEnv.SConscript('libstemmer_c/SConscript', exports={ 'env' : stemmerEnv }) stemmerEnv = stemmerEnv.Clone( LIBDEPS=[ 'libstemmer_c/stemmer', ]) stemmerEnv.Library( target="shim_stemmer", source=[ 'shim_stemmer.cpp' ]) if use_system_version_of_library("yaml"): yamlEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_YAML_SYSLIBDEP'], ]) else: yamlEnv = env.Clone() yamlEnv.InjectThirdPartyIncludePaths(libraries=['yaml', 'boost']) yamlEnv.SConscript('yaml-cpp-0.5.1/SConscript', exports={ 'env' : yamlEnv }) yamlEnv = yamlEnv.Clone( LIBDEPS=[ 'yaml-cpp-0.5.1/yaml', ]) yamlEnv.Library( target="shim_yaml", source=[ 'shim_yaml.cpp', ]) tzEnv = env.Clone() if env.TargetOSIs('solaris'): tzEnv.InjectThirdPartyIncludePaths(libraries=['tz']) tzEnv.SConscript('tz/SConscript', exports={ 'env' : tzEnv }) tzEnv = tzEnv.Clone( LIBDEPS=[ 'tz/tz', ]) tzEnv.Library( target='shim_tz', source=[ 'shim_tz.cpp', ]) if wiredtiger: if use_system_version_of_library("wiredtiger"): wiredtigerEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_WIREDTIGER_SYSLIBDEP'], ]) else: wiredtigerEnv = env.Clone() wiredtigerEnv.InjectThirdPartyIncludePaths(libraries=['wiredtiger']) wiredtigerEnv.SConscript('wiredtiger/SConscript', exports={ 'env' : wiredtigerEnv }) wiredtigerEnv = wiredtigerEnv.Clone( LIBDEPS=[ 'wiredtiger/wiredtiger', ]) wiredtigerEnv.Library( target="shim_wiredtiger", source=[ 'shim_wiredtiger.cpp' ]) if use_system_version_of_library("asio"): asioEnv = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_ASIO_SYSLIBDEP'], ]) else: asioEnv = env.Clone() asioEnv.InjectThirdPartyIncludePaths(libraries=['asio']) asioEnv.SConscript('asio-asio-1-11-0/SConscript', exports={ 'env' : asioEnv }) asioEnv = asioEnv.Clone( LIBDEPS=[ 'asio-asio-1-11-0/asio', ]) asioEnv.Library( target="shim_asio", source=[ 'shim_asio.cpp' ]) if has_option("experimental-decimal-support"): if use_system_version_of_library("intel_decimal128"): intelDecimal128Env = env.Clone( SYSLIBDEPS=[ env['LIBDEPS_INTEL_DECIMAL128_SYSLIBDEP'], ]) else: intelDecimal128Env = env.Clone() intelDecimal128Env.InjectThirdPartyIncludePaths(libraries=['intel_decimal128']) intelDecimal128Env.SConscript('IntelRDFPMathLib20U1/SConscript', exports={ 'env' : intelDecimal128Env }) intelDecimal128Env = intelDecimal128Env.Clone( LIBDEPS=[ 'IntelRDFPMathLib20U1/intel_decimal128', ]) intelDecimal128Env.Library( target="shim_intel_decimal128", source=[ 'shim_intel_decimal128.cpp' ])