107 lines
3.0 KiB
Python
Executable File
107 lines
3.0 KiB
Python
Executable File
# 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 )
|
|
sharedClientLibName = str(libs[-1])
|
|
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", sharedClientLibName])
|
|
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, [])
|
|
|