diff options
-rw-r--r-- | SConstruct | 32 | ||||
-rw-r--r-- | site_scons/libdeps.py | 24 | ||||
-rw-r--r-- | src/SConscript.client | 5 | ||||
-rw-r--r-- | src/third_party/SConscript | 32 |
4 files changed, 62 insertions, 31 deletions
diff --git a/SConstruct b/SConstruct index 916d39dc006..d673cb2cc53 100644 --- a/SConstruct +++ b/SConstruct @@ -1196,24 +1196,17 @@ def doConfigure(myenv): AddToCCFLAGSIfSupported(myenv, "-fno-builtin-memcmp") conf = Configure(myenv) + libdeps.setup_conftests(conf) if use_system_version_of_library("pcre"): - if not conf.CheckLib("pcre"): - print( "Can't find pcre library" ) - Exit(1) - if not conf.CheckLib("pcrecpp"): - print( "Can't find prcecpp library" ) - Exit(1) + conf.FindSysLibDep("pcre", ["pcre"]) + conf.FindSysLibDep("pcrecpp", ["pcrecpp"]) if use_system_version_of_library("snappy"): - if not conf.CheckLib("snappy"): - print( "Can't find snappy library" ) - Exit(1) + conf.FindSysLibDep("snappy", ["snappy"]) if use_system_version_of_library("stemmer"): - if not conf.CheckLib("stemmer"): - print( "Can't find stemmer library" ) - Exit(1) + conf.FindSysLibDep("stemmer", ["stemmer"]) if use_system_version_of_library("boost"): if not conf.CheckCXXHeader( "boost/filesystem/operations.hpp" ): @@ -1222,9 +1215,9 @@ def doConfigure(myenv): for b in boostLibs: l = "boost_" + b - if not conf.CheckLib([ l + boostCompiler + "-mt" + boostVersion, - l + boostCompiler + boostVersion ], language='C++' ): - Exit(1) + conf.FindSysLibDep(l, + [ l + boostCompiler + "-mt" + boostVersion, + l + boostCompiler + boostVersion ], language='C++' ) if conf.CheckHeader('unistd.h'): conf.env.Append(CPPDEFINES=['MONGO_HAVE_HEADER_UNISTD_H']) @@ -1249,13 +1242,11 @@ def doConfigure(myenv): v8_lib_choices = ["v8_g", "v8"] else: v8_lib_choices = ["v8"] - if not conf.CheckLib( v8_lib_choices ): - Exit(1) + conf.FindSysLibDep( "v8", v8_lib_choices ) conf.env['MONGO_BUILD_SASL_CLIENT'] = bool(has_option("use-sasl-client")) if conf.env['MONGO_BUILD_SASL_CLIENT'] and not conf.CheckLibWithHeader( - "sasl2", "sasl/sasl.h", "C", "sasl_version_info(0, 0, 0, 0, 0, 0);", autoadd=False): - + "sasl2", "sasl/sasl.h", "C", "sasl_version_info(0, 0, 0, 0, 0, 0);", autoadd=False ): Exit(1) # requires ports devel/libexecinfo to be installed @@ -1267,8 +1258,7 @@ def doConfigure(myenv): # point. if get_option('allocator') == 'tcmalloc': if use_system_version_of_library('tcmalloc'): - if not conf.CheckLib("tcmalloc"): - Exit(1) + conf.FindSysLibDep("tcmalloc", ["tcmalloc"]) elif has_option("heapcheck"): print ("--heapcheck does not work with the tcmalloc embedded in the mongodb source " "tree. Use --use-system-tcmalloc.") diff --git a/site_scons/libdeps.py b/site_scons/libdeps.py index c97a1add537..bc1c2e315bb 100644 --- a/site_scons/libdeps.py +++ b/site_scons/libdeps.py @@ -58,6 +58,7 @@ import SCons.Util libdeps_env_var = 'LIBDEPS' syslibdeps_env_var = 'SYSLIBDEPS' +missing_syslibdep = 'MISSING_LIBDEP_' def sorted_by_str(iterable): """Shorthand for sorting an iterable according to its string representation. @@ -128,10 +129,19 @@ def __get_syslibdeps(node): for lib in __get_libdeps(node): for syslib in node.get_env().Flatten(lib.get_env().get(syslibdeps_env_var, [])): if syslib: + if type(syslib) in (str, unicode) and syslib.startswith(missing_syslibdep): + print("Target '%s' depends on the availability of a " + "system provided library for '%s', " + "but no suitable library was found during configuration." % + (str(node), syslib[len(missing_syslibdep):])) + node.get_env().Exit(1) syslibdeps.append(syslib) setattr(node.attributes, cached_var_name, syslibdeps) return getattr(node.attributes, cached_var_name) +def __missing_syslib(name): + return missing_syslibdep + name + def update_scanner(builder): """Update the scanner for "builder" to also scan library dependencies.""" @@ -263,3 +273,17 @@ def setup_environment(env): update_scanner(env['BUILDERS'][builder_name]) except KeyError: pass + +def setup_conftests(conf): + def FindSysLibDep(context, name, libs, **kwargs): + var = "LIBDEPS_" + name.upper() + "_SYSLIBDEP" + kwargs['autoadd'] = False + for lib in libs: + result = context.sconf.CheckLib(lib, **kwargs) + context.did_show_result = 1 + if result: + context.env[var] = lib + return context.Result(result) + context.env[var] = __missing_syslib(name) + return context.Result(result) + conf.AddTest('FindSysLibDep', FindSysLibDep) diff --git a/src/SConscript.client b/src/SConscript.client index 3687438839f..42ef163464c 100644 --- a/src/SConscript.client +++ b/src/SConscript.client @@ -177,15 +177,12 @@ for path in clientHeaderDirectories: clientObjects = [env.Object(source) for source in clientSource] mongoClientLibs = [] -mongoClientLibDeps = [] +mongoClientLibDeps = ['$BUILD_DIR/third_party/shim_boost'] mongoClientSysLibDeps = [] if usingSasl: mongoClientSysLibDeps += ["sasl2"] -if not use_system_version_of_library("boost"): - mongoClientLibDeps.append(['$BUILD_DIR/third_party/shim_boost']) - mongoClientInstalls = [] mongoClientPrefixInstalls = [] diff --git a/src/third_party/SConscript b/src/third_party/SConscript index b7fac4ec5d4..774161295c9 100644 --- a/src/third_party/SConscript +++ b/src/third_party/SConscript @@ -10,14 +10,23 @@ env.Append(CPPPATH='$BUILD_DIR/third_party/s2') if use_system_version_of_library("pcre"): env.StaticLibrary( "shim_pcrecpp", ['shim_pcrecpp.cc'], - SYSLIBDEPS=[ 'pcre' , 'pcrecpp' ] ) + SYSLIBDEPS=[ + env['LIBDEPS_PCRE_SYSLIBDEP'], + env['LIBDEPS_PCRECPP_SYSLIBDEP'] + ] ) else: env.SConscript('pcre-${PCRE_VERSION}/SConscript') env.StaticLibrary( "shim_pcrecpp", ['shim_pcrecpp.cc'], LIBDEPS=[ 'pcre-${PCRE_VERSION}/pcrecpp' ] ) if use_system_version_of_library("boost"): - env.StaticLibrary("shim_boost", ['shim_boost.cpp']) + env.StaticLibrary("shim_boost", ['shim_boost.cpp'], + SYSLIBDEPS=[ + env['LIBDEPS_BOOST_PROGRAM_OPTIONS_SYSLIBDEP'], + env['LIBDEPS_BOOST_FILESYSTEM_SYSLIBDEP'], + env['LIBDEPS_BOOST_THREAD_SYSLIBDEP'], + env['LIBDEPS_BOOST_SYSTEM_SYSLIBDEP'] + ] ) else: env.SConscript('boost/SConscript') env.StaticLibrary( "shim_boost", ['shim_boost.cpp'], @@ -26,9 +35,12 @@ else: 'boost/boost_thread', 'boost/boost_system', ] ) + if use_system_version_of_library("snappy"): env.StaticLibrary("shim_snappy", ['shim_snappy.cpp'], - SYSLIBDEPS=['snappy']) + SYSLIBDEPS=[ + env['LIBDEPS_SNAPPY_SYSLIBDEP'] + ] ) else: env.Append(CPPPATH='$BUILD_DIR/third_party/snappy') env.SConscript('snappy/SConscript') @@ -36,14 +48,20 @@ else: if usev8: if use_system_version_of_library("v8"): - env.StaticLibrary("shim_v8", ['shim_v8.cpp'], SYSLIBDEPS=['v8']) + env.StaticLibrary("shim_v8", ['shim_v8.cpp'], SYSLIBDEPS=[ + env['LIBDEPS_V8_SYSLIBDEP'] ]) else: env.Append(CPPPATH='$BUILD_DIR/third_party/v8/include') env.SConscript('v8/SConscript') env.StaticLibrary('shim_v8', ['shim_v8.cpp'], LIBDEPS=['v8/v8']) -if (GetOption("allocator") != "tcmalloc") or use_system_version_of_library("tcmalloc"): +if (GetOption("allocator") != "tcmalloc"): env.StaticLibrary("shim_allocator", "shim_allocator.cpp") +elif use_system_version_of_library("tcmalloc"): + env.StaticLibrary("shim_allocator", "shim_allocator.cpp", + SYSLIBDEPS=[ + env['LIBDEPS_TCMALLOC_SYSLIBDEP'] + ] ) else: env.SConscript('gperftools-2.0/SConscript') env.StaticLibrary('shim_allocator', 'shim_allocator.cpp', @@ -51,7 +69,9 @@ else: if use_system_version_of_library("stemmer"): env.StaticLibrary("shim_stemmer", ['shim_stemmer.cpp'], - SYSLIBDEPS= ['stemmer']) + SYSLIBDEPS=[ + env['LIBDEPS_STEMMER_SYSLIBDEP'] + ] ) else: env.SConscript('libstemmer_c/SConscript') env.StaticLibrary("shim_stemmer", ['shim_stemmer.cpp'], |