# scons file for MongoDB c++ client library and examples import os # options AddOption( "--extrapath", dest="extrapath", type="string", nargs=1, action="store", help="comma separated list of add'l paths (--extrapath /opt/foo/,/foo) static linking" ) AddOption( "--prefix", dest="prefix", type="string", nargs=1, action="store", default="/usr/local", help="installation root" ) env = Environment( MSVS_ARCH=None ) def addExtraLibs( s ): for x in s.split(","): if os.path.exists( x ): env.Append( CPPPATH=[ x + "/include" ] ) env.Append( LIBPATH=[ x + "/lib" ] ) env.Append( LIBPATH=[ x + "/lib64" ] ) if GetOption( "extrapath" ) is not None: addExtraLibs( GetOption( "extrapath" ) ) env.Append( CPPPATH=[ "mongo/" ] ) env.Append( CPPDEFINES=[ "_SCONS" , "MONGO_EXPOSE_MACROS" ] ) nix = False linux = False if "darwin" == os.sys.platform: addExtraLibs( "/opt/local/" ) nix = True elif "linux2" == os.sys.platform or "linux3" == os.sys.platform: nix = True linux = True if nix: env.Append( CPPFLAGS=" -O3" ) env.Append( LIBS=["pthread"] ) if linux: env.Append( LINKFLAGS=" -Wl,--as-needed -Wl,-zdefs " ) boostLibs = [ "thread" , "filesystem" , "system", "thread" ] conf = Configure(env) for lib in boostLibs: if not conf.CheckLib("boost_%s-mt" % lib): conf.CheckLib("boost_%s" % lib) dirs = [ "" , "bson/" , "bson/util/" , "client/" , "s/" , "shell/" , "db/" , "scripting/" , "util/" , "util/concurrency/" , "util/mongoutils/" , "util/net/" ] allClientFiles = [] for x in dirs: allClientFiles += Glob( "mongo/" + x + "*.cpp" ) allClientFiles += Glob( "mongo/util/*.c" ) libs = [] libs += env.SharedLibrary( "mongoclient" , allClientFiles ) libs += env.Library( "mongoclient" , allClientFiles ) # install prefix = GetOption( "prefix" ) for x in libs: env.Install( prefix + "/lib/" , str(x) ) for x in dirs: x = "mongo/" + x env.Install( prefix + "/include/" + x , Glob( x + "*.h" ) ) env.Alias( "install" , prefix ) # example setup clientTests = [] clientEnv = env.Clone(); clientEnv.Prepend( LIBS=["libmongoclient.a"]) clientEnv.Prepend( LIBPATH=["."] ) # examples clientTests += [ clientEnv.Program( "firstExample" , [ "client/examples/first.cpp" ] ) ] clientTests += [ clientEnv.Program( "secondExample" , [ "client/examples/second.cpp" ] ) ] clientTests += [ clientEnv.Program( "whereExample" , [ "client/examples/whereExample.cpp" ] ) ] clientTests += [ clientEnv.Program( "authTest" , [ "client/examples/authTest.cpp" ] ) ] clientTests += [ clientEnv.Program( "httpClientTest" , [ "client/examples/httpClientTest.cpp" ] ) ] clientTests += [ clientEnv.Program( "clientTest" , [ "client/examples/clientTest.cpp" ] ) ] clientEnv.Alias("clientTests", clientTests, [])