diff options
Diffstat (limited to 'src/SConscript.client')
| -rw-r--r-- | src/SConscript.client | 372 |
1 files changed, 46 insertions, 326 deletions
diff --git a/src/SConscript.client b/src/SConscript.client index ff959e95f27..c17009ae0b0 100644 --- a/src/SConscript.client +++ b/src/SConscript.client @@ -1,332 +1,52 @@ # -*- mode: python -*- -# This SConscript describes build and install rules for the Mongo C++ driver and associated exmaple -# programs. -import os - -Import('env has_option installSetup use_system_version_of_library') - -Import('nix linux darwin windows') - -buildShared = False -if has_option("sharedclient"): - buildShared = True - -env.Command(['mongo/base/error_codes.h', 'mongo/base/error_codes.cpp',], - ['mongo/base/generate_error_codes.py', 'mongo/base/error_codes.err'], - '$PYTHON $SOURCES $TARGETS') - -env.Command(['mongo/db/auth/action_type.h', 'mongo/db/auth/action_type.cpp'], - ['mongo/db/auth/generate_action_types.py', 'mongo/db/auth/action_types.txt'], - '$PYTHON $SOURCES $TARGETS') - -clientSourceBasic = [ - 'mongo/base/configuration_variable_manager.cpp', - 'mongo/base/error_codes.cpp', - 'mongo/base/global_initializer.cpp', - 'mongo/base/global_initializer_registerer.cpp', - 'mongo/base/init.cpp', - 'mongo/base/initializer.cpp', - 'mongo/base/initializer_context.cpp', - 'mongo/base/initializer_dependency_graph.cpp', - 'mongo/base/make_string_vector.cpp', - 'mongo/base/parse_number.cpp', - 'mongo/base/status.cpp', - 'mongo/base/string_data.cpp', - 'mongo/bson/bson_validate.cpp', - 'mongo/bson/oid.cpp', - 'mongo/bson/util/bson_extract.cpp', - 'mongo/buildinfo.cpp', - 'mongo/client/clientAndShell.cpp', - 'mongo/client/clientOnly.cpp', - 'mongo/client/connection_factory.cpp', - 'mongo/client/connpool.cpp', - 'mongo/client/dbclient.cpp', - 'mongo/client/dbclient_rs.cpp', - 'mongo/client/dbclientcursor.cpp', - 'mongo/client/gridfs.cpp', - 'mongo/client/model.cpp', - 'mongo/client/sasl_client_authenticate.cpp', - 'mongo/client/syncclusterconnection.cpp', - 'mongo/db/jsobj.cpp', - 'mongo/db/json.cpp', - 'mongo/db/lasterror.cpp', - 'mongo/db/namespace.cpp', - 'mongo/db/dbmessage.cpp', - 'mongo/pch.cpp', - 'mongo/platform/backtrace.cpp', - 'mongo/platform/posix_fadvise.cpp', - 'mongo/platform/random.cpp', - 'mongo/util/assert_util.cpp', - 'mongo/util/background.cpp', - 'mongo/util/base64.cpp', - 'mongo/util/concurrency/rwlockimpl.cpp', - 'mongo/util/concurrency/spin_lock.cpp', - 'mongo/util/concurrency/synchronization.cpp', - 'mongo/util/concurrency/task.cpp', - 'mongo/util/concurrency/thread_pool.cpp', - 'mongo/util/concurrency/mutexdebugger.cpp', - 'mongo/util/debug_util.cpp', - 'mongo/util/stacktrace.cpp', - 'mongo/util/file.cpp', - 'mongo/util/file_allocator.cpp', - 'mongo/util/fail_point.cpp', - 'mongo/util/fail_point_registry.cpp', - 'mongo/util/fail_point_service.cpp', - 'mongo/util/histogram.cpp', - 'mongo/util/intrusive_counter.cpp', - 'mongo/util/log.cpp', - 'mongo/util/md5.cpp', - 'mongo/util/md5main.cpp', - 'mongo/util/net/httpclient.cpp', - 'mongo/util/net/listen.cpp', - 'mongo/util/net/message.cpp', - 'mongo/util/net/message_port.cpp', - 'mongo/util/net/sock.cpp', - 'mongo/util/net/ssl_manager.cpp', - 'mongo/util/password.cpp', - 'mongo/util/processinfo.cpp', - 'mongo/util/ramlog.cpp', - 'mongo/util/signal_handlers.cpp', - 'mongo/util/stringutils.cpp', - 'mongo/util/text.cpp', - 'mongo/util/time_support.cpp', - 'mongo/util/timer.cpp', - 'mongo/util/trace.cpp', - 'mongo/util/util.cpp', - 'mongo/util/version.cpp', - 'third_party/murmurhash3/MurmurHash3.cpp', - ] - -clientSourceSasl = ['mongo/client/sasl_client_authenticate_impl.cpp', - 'mongo/client/sasl_client_session.cpp'] - -clientSourceProcessInfo = [ - 'mongo/util/processinfo_darwin.cpp', - 'mongo/util/processinfo_freebsd.cpp', - 'mongo/util/processinfo_linux2.cpp', - 'mongo/util/processinfo_none.cpp', - 'mongo/util/processinfo_sunos5.cpp', - 'mongo/util/processinfo_win32.cpp' -] - -clientSourceAll = clientSourceBasic + clientSourceSasl + clientSourceProcessInfo - -usingSasl = env['MONGO_BUILD_SASL_CLIENT'] - -clientSource = list(clientSourceBasic) -if usingSasl: - clientSource += clientSourceSasl +# This SConscript used to describe the build and install rules for the Mongo C++ driver. Now it +# causes the relevant targets to emit an error message informing users that the client driver +# is now maintained in a separate repo, and provides a link to the documentation on how to +# build the driver. -processInfoPlatformFile = env.File( "mongo/util/processinfo_${PYSYSPLATFORM}.cpp" ) -# NOTE: See comment about similar code in src/mongo/SConscript -if not os.path.exists( str( processInfoPlatformFile ) ): - processInfoPlatformFile = env.File( "mongo/util/processinfo_none.cpp" ) -clientSource += [processInfoPlatformFile] - -exampleSourceMap = [ - ('authTest', 'mongo/client/examples/authTest.cpp'), - ('clientTest', 'mongo/client/examples/clientTest.cpp'), - ('firstExample', 'mongo/client/examples/first.cpp'), - ('httpClientTest', 'mongo/client/examples/httpClientTest.cpp'), - ('rsExample', 'mongo/client/examples/rs.cpp'), - ('secondExample', 'mongo/client/examples/second.cpp'), - ('tutorial', 'mongo/client/examples/tutorial.cpp'), - ('whereExample', 'mongo/client/examples/whereExample.cpp'), - ] - -clientHeaderDirectories = [ - "base/", - "bson/", - "bson/util/", - "client/", - "db/", - "db/auth/", - "db/stats/", - "db/repl/", - "db/ops/", - "platform/", - "s/", - "scripting/", - "shell/", - "util/", - "util/concurrency/", - "util/mongoutils/", - "util/net/", - "" - ] - -clientHeaders = [] -for path in clientHeaderDirectories: - clientHeaders.extend(Glob('mongo/%s/*.h' % path)) - clientHeaders.extend(Glob('mongo/%s/*.hpp' % path)) - -# This relies on static and shared objects being the same, since we will link these object -# files twice: once into a .a, and another time into a .so -clientObjects = [env.Object(source) for source in clientSource] - -mongoClientLibs = [] -mongoClientLibDeps = [] -mongoClientSysLibDeps = [] - -if usingSasl: - mongoClientSysLibDeps += ["sasl2"] - -if not use_system_version_of_library("boost"): - mongoClientLibDeps.append(['$BUILD_DIR/third_party/shim_boost']) - -mongoClientInstalls = [] -mongoClientPrefixInstalls = [] - -if windows and buildShared: - print("Building the client driver as a DLL is not supported, see SERVER-5650") +import os +import textwrap + +Import('env') + +def failClient(target, source, env): + failClientMessage = ''' + PLEASE NOTE: The C++ client driver repository has been moved to + http://github.com/mongodb/mongo-cxx-driver + + As of MongoDB 2.6.0, the C++ client library has been separated from the core database + server repository into a separate git repository. The targets specific to the C++ driver + can no longer be built from the server codebase. + + In particular, the following targets are no longer availble in this repository: + mongoclient + install-mongoclient + check-install-mongoclient + clientTests + smokeClient + + Additionally, the following SCons options no longer have any effect in this repository, + though they are accepted without error for backward compatibility: + --sharedclient + --full + --disable-declspec-thread + + For detailed instructions on how to build the C++ driver, please + see http://dochub.mongodb.org/core/build-cpp-driver + ''' + print(textwrap.dedent(failClientMessage)) Exit(1) -staticLibEnv = env.Clone() -staticLibEnv.AppendUnique( - LIBDEPS=mongoClientLibDeps, - SYSLIBDEPS=mongoClientSysLibDeps) - -mongoClientStaticLib = staticLibEnv.StaticLibrary( - 'mongoclient', clientObjects), -mongoClientInstalls.append(staticLibEnv.Install('#/', mongoClientStaticLib)) - -if installSetup.libraries: - mongoClientPrefixInstalls.append(env.Install("$INSTALL_DIR/lib", mongoClientStaticLib)) - -mongoClientSharedLib = None - -if buildShared: - - # TODO: When we are ready to set a SONAME for mongoclient, set SHLIBVERSION=x.y.z in this - # environment to enable SCons versioned shared library support, and then change the two - # 'Install' calls in this block to 'InstallVersionedLibrary'. SHLIBVERSION and - # InstallVersionedLibrary support is only stable in SCons > 2.3.0, so if you add support - # here, be sure to add an EnsuredSconsVersion here as well. - sharedLibEnv = env.Clone() - sharedLibEnv.AppendUnique( - LIBS=mongoClientLibs + mongoClientSysLibDeps, - # TODO: This currently causes the files for the libdep to get dragged into dependents - # of this shared library, incorrectly. We need to patch up libdeps to treat shared - # libraries as dependency terminals. - LIBDEPS=mongoClientLibDeps) - - if linux: - sharedLibEnv.AppendUnique(SHLINKFLAGS=["-Wl,--as-needed", "-Wl,-zdefs"]) - - mongoClientSharedLib = sharedLibEnv.SharedLibrary('mongoclient', clientObjects) - - mongoClientSharedLibInstall = sharedLibEnv.Install( - '#/sharedclient', mongoClientSharedLib) - - if darwin: - # Set up the copy of the client library in #/sharedclient so that things that link - # against it record the local directory as the install_name. - sharedLibEnv.AddPostAction( - mongoClientSharedLibInstall, - "install_name_tool -id @executable_path/%s %s" % ( - mongoClientSharedLibInstall[0].name, - mongoClientSharedLibInstall[0] - )) - mongoClientInstalls.append(mongoClientSharedLibInstall) - - if installSetup.libraries: - mongoClientSharedLibPrefixInstall = sharedLibEnv.Install( - '$INSTALL_DIR/lib', mongoClientSharedLib) - if darwin: - sharedLibEnv.AddPostAction( - mongoClientSharedLibPrefixInstall, - "install_name_tool -id %s %s" % ( - mongoClientSharedLibPrefixInstall[0], - mongoClientSharedLibPrefixInstall[0] - )) - mongoClientPrefixInstalls.append(mongoClientSharedLibPrefixInstall) - -env.Alias('mongoclient', mongoClientInstalls) - -if installSetup.headers: - for x in clientHeaderDirectories: - inst = env.Install("$INSTALL_DIR/include/mongo/" + x, - [Glob('mongo/%s*.h' % x), Glob('mongo/%s*.hpp' % x)]) - env.AddPostAction(inst, Chmod('$TARGET', 0644)) - mongoClientPrefixInstalls.append(inst) - -if installSetup.headers or installSetup.libraries: - env.Alias('install-mongoclient', mongoClientPrefixInstalls) - -clientEnv = env.Clone() -clientEnv['CPPDEFINES'].remove('MONGO_EXPOSE_MACROS') - -# Compile the example files to .o so that we can link them twice: once statically, once shared. -exampleObjMap = [(target, clientEnv.Object(source)) for (target, source) in exampleSourceMap] - -# Create an environment for linking the examples to the static library. For out of tree builds, -# we need to use LIBS. For in-tree builds we need LIBDEPS. -staticClientEnv = clientEnv.Clone() -if '_LIBDEPS' in clientEnv: - staticClientEnv.PrependUnique(LIBDEPS=[mongoClientStaticLib]) -else: - # We need the mongo client library to preceed the boost libraries. - staticClientEnv.PrependUnique(LIBS=[mongoClientStaticLib]) - -# Build each statically linked client program -staticClientPrograms = [staticClientEnv.Program(target, obj) for (target, obj) in exampleObjMap] - -# Install them to the root, and append the install targets to the list of client tests -clientTests = staticClientEnv.Install("#/", staticClientPrograms) - -# Do the same for the shared library case, if we are doing that. -if buildShared: - sharedClientEnv = clientEnv.Clone() - - # Arrange for the tests to link against the mongoclient in the #/sharedclient directory. - sharedClientEnv.PrependUnique( - LIBS=['mongoclient'], - LIBPATH=["#/sharedclient"] - ) - - # Deal with the different lookup models between regular UNIX and Darwin. For regular unix, - # we set $ORIGIN to pull the copy we run against from the current directory - # (#/sharedclient). On Darwin, the staged copy of the mongoclient dylib in #sharedclient - # has @executable path set as its install_name, so we pick up the same behavior that way. - if nix and not darwin: - sharedClientEnv.PrependUnique( - LINKFLAGS="-Wl,-z,origin", - RPATH=[sharedClientEnv.Literal("\\$$ORIGIN")]) - - sharedClientPrograms = [ - sharedClientEnv.Program("sharedclient/" + target, obj) for (target, obj) in exampleObjMap] - env.Depends(sharedClientPrograms, mongoClientInstalls) - - sharedClientProgramInstalls = sharedClientEnv.Install("#/sharedclient", sharedClientPrograms) - clientTests.append(sharedClientProgramInstalls) - -clientTests.append( - clientEnv.Install('#/', clientEnv.Program('bsondemo', 'mongo/bson/bsondemo/bsondemo.cpp'))) - -clientEnv.Alias('clientTests', clientTests, []) +failClientAction = env.Action(failClient, cmdstr=None) +failClientTargets = [ + 'check-install-mongoclient', + 'clientTests', + 'install-mongoclient', + 'mongoclient', + 'smokeClient', +] -env.Install( - '#/', - env.Command('$CLIENT_ARCHIVE', - ['#buildscripts/make_archive.py', - '$CLIENT_SCONSTRUCT', - '$CLIENT_LICENSE', - 'SConscript.client', - 'mongo/base/generate_error_codes.py', - 'mongo/base/error_codes.err', - 'mongo/db/auth/generate_action_types.py', - 'mongo/db/auth/action_types.txt', - 'third_party/murmurhash3/MurmurHash3.h', - '#buildscripts/make_archive.py', - clientSourceAll, - clientHeaders, - [source for (target, source) in exampleSourceMap], - 'mongo/bson/bsondemo/bsondemo.cpp', - ], - '${PYTHON} ${SOURCES[0]} -o $TARGET ' - '--transform ${str(Dir(BUILD_DIR))}/client_build=$CLIENT_DIST_BASENAME/src ' - '--transform ${str(Dir(BUILD_DIR))}=$CLIENT_DIST_BASENAME/src ' - '--transform distsrc/client=$CLIENT_DIST_BASENAME ' - '--transform =$CLIENT_DIST_BASENAME/ ' - '${TEMPFILE(SOURCES[1:])}')) +env.AlwaysBuild( + [env.Alias(target, [], failClientAction) for target in failClientTargets] +) |
