summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct32
-rw-r--r--site_scons/libdeps.py24
-rw-r--r--src/SConscript.client5
-rw-r--r--src/third_party/SConscript32
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'],