2009-07-27 23:30:41 +02:00
|
|
|
# -*- mode: python; -*-
|
2010-04-29 23:03:40 +02:00
|
|
|
# build file for MongoDB
|
|
|
|
# this requires scons
|
2009-01-06 00:19:56 +01:00
|
|
|
# you can get from http://www.scons.org
|
|
|
|
# then just type scons
|
|
|
|
|
2009-02-02 01:13:12 +01:00
|
|
|
# some common tasks
|
|
|
|
# build 64-bit mac and pushing to s3
|
2009-02-06 22:51:14 +01:00
|
|
|
# scons --64 s3dist
|
2009-02-11 03:37:18 +01:00
|
|
|
# scons --distname=0.8 s3dist
|
2009-02-12 15:10:11 +01:00
|
|
|
# all s3 pushes require settings.py and simples3
|
2009-02-02 01:13:12 +01:00
|
|
|
|
2010-09-15 23:17:57 +02:00
|
|
|
EnsureSConsVersion(0, 98, 4) # this is a common version known to work
|
2010-09-15 21:38:55 +02:00
|
|
|
|
2009-01-06 00:19:56 +01:00
|
|
|
import os
|
2009-01-27 19:08:44 +01:00
|
|
|
import sys
|
2009-11-19 18:40:23 +01:00
|
|
|
import imp
|
2009-04-22 17:12:13 +02:00
|
|
|
import types
|
2009-02-01 23:39:07 +01:00
|
|
|
import re
|
2009-04-22 17:12:13 +02:00
|
|
|
import shutil
|
2009-04-22 23:06:31 +02:00
|
|
|
import urllib
|
|
|
|
import urllib2
|
2009-08-28 19:27:15 +02:00
|
|
|
import buildscripts
|
2010-01-02 14:59:54 +01:00
|
|
|
import buildscripts.bb
|
2011-06-29 21:06:12 +02:00
|
|
|
import stat
|
2010-02-11 23:17:36 +01:00
|
|
|
from buildscripts import utils
|
2010-01-02 14:59:54 +01:00
|
|
|
|
|
|
|
buildscripts.bb.checkOk()
|
2009-01-06 00:19:56 +01:00
|
|
|
|
2010-12-21 17:54:46 +01:00
|
|
|
def findSettingsSetup():
|
|
|
|
sys.path.append( "." )
|
|
|
|
sys.path.append( ".." )
|
|
|
|
sys.path.append( "../../" )
|
|
|
|
|
2011-11-15 00:05:08 +01:00
|
|
|
def getThirdPartyShortNames():
|
|
|
|
lst = []
|
2011-12-24 21:33:26 +01:00
|
|
|
for x in os.listdir( "src/third_party" ):
|
2011-11-15 00:05:08 +01:00
|
|
|
if not x.endswith( ".py" ) or x.find( "#" ) >= 0:
|
|
|
|
continue
|
|
|
|
|
|
|
|
lst.append( x.rpartition( "." )[0] )
|
|
|
|
return lst
|
|
|
|
|
|
|
|
|
2009-01-14 16:58:32 +01:00
|
|
|
# --- options ----
|
2010-11-30 04:34:42 +01:00
|
|
|
|
2010-11-30 04:48:31 +01:00
|
|
|
options = {}
|
|
|
|
|
2011-08-20 00:09:18 +02:00
|
|
|
options_topass = {}
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
def add_option( name, help , nargs , contibutesToVariantDir , dest=None ):
|
|
|
|
|
|
|
|
if dest is None:
|
|
|
|
dest = name
|
|
|
|
|
|
|
|
AddOption( "--" + name ,
|
|
|
|
dest=dest,
|
|
|
|
type="string",
|
|
|
|
nargs=nargs,
|
|
|
|
action="store",
|
|
|
|
help=help )
|
|
|
|
|
2010-11-30 04:48:31 +01:00
|
|
|
options[name] = { "help" : help ,
|
|
|
|
"nargs" : nargs ,
|
|
|
|
"contibutesToVariantDir" : contibutesToVariantDir ,
|
|
|
|
"dest" : dest }
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
def get_option( name ):
|
|
|
|
return GetOption( name )
|
|
|
|
|
2011-08-20 00:09:18 +02:00
|
|
|
def _has_option( name ):
|
2010-11-30 04:34:42 +01:00
|
|
|
x = get_option( name )
|
|
|
|
if x is None:
|
|
|
|
return False
|
2010-11-30 04:48:31 +01:00
|
|
|
|
|
|
|
if x == False:
|
|
|
|
return False
|
|
|
|
|
2010-12-01 15:52:37 +01:00
|
|
|
if x == "":
|
|
|
|
return False
|
|
|
|
|
2010-11-30 04:48:31 +01:00
|
|
|
return True
|
|
|
|
|
2011-08-20 00:09:18 +02:00
|
|
|
def has_option( name ):
|
|
|
|
x = _has_option(name)
|
2011-12-25 04:48:28 +01:00
|
|
|
|
|
|
|
if name not in options_topass:
|
|
|
|
# if someone already set this, don't overwrite
|
|
|
|
options_topass[name] = x
|
|
|
|
|
2011-08-20 00:09:18 +02:00
|
|
|
return x
|
|
|
|
|
|
|
|
|
2010-11-30 04:48:31 +01:00
|
|
|
def get_variant_dir():
|
|
|
|
|
|
|
|
a = []
|
|
|
|
|
|
|
|
for name in options:
|
|
|
|
o = options[name]
|
|
|
|
if not has_option( o["dest"] ):
|
|
|
|
continue
|
|
|
|
if not o["contibutesToVariantDir"]:
|
|
|
|
continue
|
|
|
|
|
|
|
|
if o["nargs"] == 0:
|
|
|
|
a.append( name )
|
|
|
|
else:
|
|
|
|
a.append( name + "-" + get_option( name ) )
|
|
|
|
|
|
|
|
s = "build/"
|
|
|
|
|
|
|
|
if len(a) > 0:
|
|
|
|
a.sort()
|
|
|
|
s += "/".join( a ) + "/"
|
2011-12-25 04:48:28 +01:00
|
|
|
else:
|
|
|
|
s += "normal/"
|
2010-11-30 04:48:31 +01:00
|
|
|
return s
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
# installation/packaging
|
|
|
|
add_option( "prefix" , "installation prefix" , 1 , False )
|
|
|
|
add_option( "distname" , "dist name (0.8.0)" , 1 , False )
|
|
|
|
add_option( "distmod", "additional piece for full dist name" , 1 , False )
|
|
|
|
add_option( "nostrip", "do not strip installed binaries" , 0 , False )
|
|
|
|
|
|
|
|
add_option( "sharedclient", "build a libmongoclient.so/.dll" , 0 , False )
|
|
|
|
add_option( "full", "include client and headers when doing scons install", 0 , False )
|
|
|
|
|
2010-12-01 15:52:37 +01:00
|
|
|
# linking options
|
|
|
|
add_option( "release" , "release build" , 0 , True )
|
|
|
|
add_option( "static" , "fully static build" , 0 , True )
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
# base compile flags
|
|
|
|
add_option( "64" , "whether to force 64 bit" , 0 , True , "force64" )
|
|
|
|
add_option( "32" , "whether to force 32 bit" , 0 , True , "force32" )
|
|
|
|
|
|
|
|
add_option( "cxx", "compiler to use" , 1 , True )
|
2011-08-22 08:17:21 +02:00
|
|
|
add_option( "cc", "compiler to use for c" , 1 , True )
|
2010-11-30 04:34:42 +01:00
|
|
|
|
|
|
|
add_option( "cpppath", "Include path if you have headers in a nonstandard directory" , 1 , True )
|
|
|
|
add_option( "libpath", "Library path if you have libraries in a nonstandard directory" , 1 , True )
|
|
|
|
|
|
|
|
add_option( "extrapath", "comma separated list of add'l paths (--extrapath /opt/foo/,/foo) static linking" , 1 , True )
|
|
|
|
add_option( "extrapathdyn", "comma separated list of add'l paths (--extrapath /opt/foo/,/foo) dynamic linking" , 1 , True )
|
|
|
|
add_option( "extralib", "comma separated list of libraries (--extralib js_static,readline" , 1 , True )
|
|
|
|
add_option( "staticlib", "comma separated list of libs to link statically (--staticlib js_static,boost_program_options-mt,..." , 1 , True )
|
|
|
|
add_option( "staticlibpath", "comma separated list of dirs to search for staticlib arguments" , 1 , True )
|
|
|
|
|
|
|
|
add_option( "boost-compiler", "compiler used for boost (gcc41)" , 1 , True , "boostCompiler" )
|
|
|
|
add_option( "boost-version", "boost version for linking(1_38)" , 1 , True , "boostVersion" )
|
|
|
|
|
2011-10-27 20:15:17 +02:00
|
|
|
add_option( "no-glibc-check" , "don't check for new versions of glibc" , 0 , False )
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
# experimental features
|
|
|
|
add_option( "mm", "use main memory instead of memory mapped files" , 0 , True )
|
|
|
|
add_option( "asio" , "Use Asynchronous IO (NOT READY YET)" , 0 , True )
|
2011-07-14 00:37:26 +02:00
|
|
|
add_option( "ssl" , "Enable SSL" , 0 , True )
|
2010-11-30 04:34:42 +01:00
|
|
|
|
|
|
|
# library choices
|
|
|
|
add_option( "usesm" , "use spider monkey for javascript" , 0 , True )
|
|
|
|
add_option( "usev8" , "use v8 for javascript" , 0 , True )
|
|
|
|
|
|
|
|
# mongo feature options
|
|
|
|
add_option( "noshell", "don't build shell" , 0 , True )
|
|
|
|
add_option( "safeshell", "don't let shell scripts run programs (still, don't run untrusted scripts)" , 0 , True )
|
2011-08-04 23:53:28 +02:00
|
|
|
add_option( "win2008plus", "use newer operating system API features" , 0 , False )
|
2010-11-30 04:34:42 +01:00
|
|
|
|
2011-11-07 19:40:35 +01:00
|
|
|
# dev optoins
|
2010-11-30 04:34:42 +01:00
|
|
|
add_option( "d", "debug build no optimization, etc..." , 0 , True , "debugBuild" )
|
|
|
|
add_option( "dd", "debug build no optimization, additional debug logging, etc..." , 0 , False , "debugBuildAndLogging" )
|
2011-01-07 16:41:54 +01:00
|
|
|
add_option( "durableDefaultOn" , "have durable default to on" , 0 , True )
|
2011-07-31 14:36:46 +02:00
|
|
|
add_option( "durableDefaultOff" , "have durable default to off" , 0 , True )
|
2010-11-30 04:34:42 +01:00
|
|
|
|
|
|
|
add_option( "pch" , "use precompiled headers to speed up the build (experimental)" , 0 , True , "usePCH" )
|
|
|
|
add_option( "distcc" , "use distcc for distributing builds" , 0 , False )
|
2011-03-11 23:06:41 +01:00
|
|
|
add_option( "clang" , "use clang++ rather than g++ (experimental)" , 0 , True )
|
2010-11-30 04:34:42 +01:00
|
|
|
|
|
|
|
# debugging/profiling help
|
|
|
|
|
2009-12-08 23:00:17 +01:00
|
|
|
# to use CPUPROFILE=/tmp/profile
|
2009-12-21 20:45:18 +01:00
|
|
|
# to view pprof -gv mongod /tmp/profile
|
2010-11-30 04:34:42 +01:00
|
|
|
add_option( "pg", "link against profiler" , 0 , False , "profile" )
|
2011-03-11 22:10:17 +01:00
|
|
|
add_option( "tcmalloc" , "link against tcmalloc" , 0 , False )
|
2010-11-30 04:34:42 +01:00
|
|
|
add_option( "gdbserver" , "build in gdb server support" , 0 , True )
|
|
|
|
add_option( "heapcheck", "link to heap-checking malloc-lib and look for memory leaks during tests" , 0 , False )
|
|
|
|
|
|
|
|
add_option("smokedbprefix", "prefix to dbpath et al. for smoke tests", 1 , False )
|
2010-11-29 08:36:54 +01:00
|
|
|
|
2011-11-15 00:05:08 +01:00
|
|
|
for shortName in getThirdPartyShortNames():
|
|
|
|
add_option( "use-system-" + shortName , "use system version of library " + shortName , 0 , True )
|
|
|
|
|
|
|
|
add_option( "use-system-all" , "use all system libraries " + shortName , 0 , True )
|
|
|
|
|
2011-12-05 23:00:02 +01:00
|
|
|
|
|
|
|
# don't run configure if user calls --help
|
|
|
|
if GetOption('help'):
|
|
|
|
Return()
|
|
|
|
|
2009-01-14 16:58:32 +01:00
|
|
|
# --- environment setup ---
|
|
|
|
|
2009-07-24 02:48:23 +02:00
|
|
|
def removeIfInList( lst , thing ):
|
|
|
|
if thing in lst:
|
|
|
|
lst.remove( thing )
|
|
|
|
|
2009-03-18 19:26:27 +01:00
|
|
|
def printLocalInfo():
|
|
|
|
import sys, SCons
|
|
|
|
print( "scons version: " + SCons.__version__ )
|
|
|
|
print( "python version: " + " ".join( [ `i` for i in sys.version_info ] ) )
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-03-18 19:26:27 +01:00
|
|
|
printLocalInfo()
|
|
|
|
|
2009-01-06 00:19:56 +01:00
|
|
|
boostLibs = [ "thread" , "filesystem" , "program_options" ]
|
|
|
|
|
2009-04-28 22:44:17 +02:00
|
|
|
onlyServer = len( COMMAND_LINE_TARGETS ) == 0 or ( len( COMMAND_LINE_TARGETS ) == 1 and str( COMMAND_LINE_TARGETS[0] ) in [ "mongod" , "mongos" , "test" ] )
|
2009-04-23 22:51:51 +02:00
|
|
|
nix = False
|
|
|
|
linux = False
|
|
|
|
linux64 = False
|
|
|
|
darwin = False
|
|
|
|
windows = False
|
2009-05-22 09:58:03 +02:00
|
|
|
freebsd = False
|
2010-06-20 22:29:03 +02:00
|
|
|
openbsd = False
|
2009-06-01 22:09:16 +02:00
|
|
|
solaris = False
|
2010-11-30 04:34:42 +01:00
|
|
|
force64 = has_option( "force64" )
|
2009-06-30 19:45:55 +02:00
|
|
|
if not force64 and os.getcwd().endswith( "mongo-64" ):
|
|
|
|
force64 = True
|
|
|
|
print( "*** assuming you want a 64-bit build b/c of directory *** " )
|
2009-07-24 20:27:35 +02:00
|
|
|
msarch = None
|
|
|
|
if force64:
|
|
|
|
msarch = "amd64"
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
force32 = has_option( "force32" )
|
|
|
|
release = has_option( "release" )
|
|
|
|
static = has_option( "static" )
|
2009-04-23 22:51:51 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
debugBuild = has_option( "debugBuild" ) or has_option( "debugBuildAndLogging" )
|
|
|
|
debugLogging = has_option( "debugBuildAndLogging" )
|
|
|
|
noshell = has_option( "noshell" )
|
2009-05-08 23:02:32 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
usesm = has_option( "usesm" )
|
|
|
|
usev8 = has_option( "usev8" )
|
2009-05-08 23:02:32 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
asio = has_option( "asio" )
|
2009-12-14 18:38:53 +01:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
usePCH = has_option( "usePCH" )
|
2010-07-24 03:46:35 +02:00
|
|
|
|
2010-03-08 22:36:44 +01:00
|
|
|
justClientLib = (COMMAND_LINE_TARGETS == ['mongoclient'])
|
|
|
|
|
2009-09-09 15:46:12 +02:00
|
|
|
env = Environment( MSVS_ARCH=msarch , tools = ["default", "gch"], toolpath = '.' )
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "cxx" ):
|
|
|
|
env["CC"] = get_option( "cxx" )
|
|
|
|
env["CXX"] = get_option( "cxx" )
|
2011-03-11 23:06:41 +01:00
|
|
|
elif has_option("clang"):
|
|
|
|
env["CC"] = 'clang'
|
|
|
|
env["CXX"] = 'clang++'
|
|
|
|
|
2011-08-22 08:17:21 +02:00
|
|
|
if has_option( "cc" ):
|
|
|
|
env["CC"] = get_option( "cc" )
|
|
|
|
|
2009-07-24 20:27:35 +02:00
|
|
|
env["LIBPATH"] = []
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "libpath" ):
|
|
|
|
env["LIBPATH"] = [get_option( "libpath" )]
|
2010-05-03 22:44:16 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "cpppath" ):
|
|
|
|
env["CPPPATH"] = [get_option( "cpppath" )]
|
2010-05-03 22:44:16 +02:00
|
|
|
|
2010-04-23 23:52:10 +02:00
|
|
|
env.Append( CPPDEFINES=[ "_SCONS" , "MONGO_EXPOSE_MACROS" ] )
|
2011-12-24 21:33:26 +01:00
|
|
|
env.Append( CPPPATH=[ "./src/mongo" ] )
|
|
|
|
env.Append( CPPPATH=[ "./src/" ] )
|
2009-07-24 20:27:35 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "safeshell" ):
|
2010-02-13 04:16:12 +01:00
|
|
|
env.Append( CPPDEFINES=[ "MONGO_SAFE_SHELL" ] )
|
2009-07-24 20:27:35 +02:00
|
|
|
|
2011-01-07 16:41:54 +01:00
|
|
|
if has_option( "durableDefaultOn" ):
|
|
|
|
env.Append( CPPDEFINES=[ "_DURABLEDEFAULTON" ] )
|
|
|
|
|
2011-07-31 14:36:46 +02:00
|
|
|
if has_option( "durableDefaultOff" ):
|
|
|
|
env.Append( CPPDEFINES=[ "_DURABLEDEFAULTOFF" ] )
|
|
|
|
|
2009-07-07 16:44:43 +02:00
|
|
|
boostCompiler = GetOption( "boostCompiler" )
|
|
|
|
if boostCompiler is None:
|
|
|
|
boostCompiler = ""
|
|
|
|
else:
|
|
|
|
boostCompiler = "-" + boostCompiler
|
|
|
|
|
2009-08-31 20:56:49 +02:00
|
|
|
boostVersion = GetOption( "boostVersion" )
|
|
|
|
if boostVersion is None:
|
|
|
|
boostVersion = ""
|
|
|
|
else:
|
|
|
|
boostVersion = "-" + boostVersion
|
|
|
|
|
2010-05-23 18:33:34 +02:00
|
|
|
if ( not ( usesm or usev8 or justClientLib) ):
|
2009-05-11 17:05:39 +02:00
|
|
|
usesm = True
|
2011-08-20 00:09:18 +02:00
|
|
|
options_topass["usesm"] = True
|
2009-04-23 22:51:51 +02:00
|
|
|
|
2010-05-24 05:30:52 +02:00
|
|
|
distBuild = len( COMMAND_LINE_TARGETS ) == 1 and ( str( COMMAND_LINE_TARGETS[0] ) == "s3dist" or str( COMMAND_LINE_TARGETS[0] ) == "dist" )
|
|
|
|
|
2009-12-09 20:58:37 +01:00
|
|
|
extraLibPlaces = []
|
|
|
|
|
2009-12-09 21:16:28 +01:00
|
|
|
def addExtraLibs( s ):
|
2009-12-09 23:41:14 +01:00
|
|
|
for x in s.split(","):
|
2009-06-30 22:08:42 +02:00
|
|
|
env.Append( CPPPATH=[ x + "/include" ] )
|
|
|
|
env.Append( LIBPATH=[ x + "/lib" ] )
|
2010-01-14 22:45:03 +01:00
|
|
|
env.Append( LIBPATH=[ x + "/lib64" ] )
|
2009-12-09 23:34:18 +01:00
|
|
|
extraLibPlaces.append( x + "/lib" )
|
2009-12-09 21:16:28 +01:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "extrapath" ):
|
2009-12-09 21:16:28 +01:00
|
|
|
addExtraLibs( GetOption( "extrapath" ) )
|
2010-11-30 04:34:42 +01:00
|
|
|
release = True # this is so we force using .a
|
2009-07-22 19:42:21 +02:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "extrapathdyn" ):
|
2009-12-09 21:16:28 +01:00
|
|
|
addExtraLibs( GetOption( "extrapathdyn" ) )
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "extralib" ):
|
2009-10-16 08:20:08 +02:00
|
|
|
for x in GetOption( "extralib" ).split( "," ):
|
|
|
|
env.Append( LIBS=[ x ] )
|
|
|
|
|
2010-05-24 05:30:52 +02:00
|
|
|
class InstallSetup:
|
|
|
|
binaries = False
|
|
|
|
clientSrc = False
|
|
|
|
headers = False
|
|
|
|
bannerDir = None
|
|
|
|
headerRoot = "include"
|
2010-05-23 18:33:34 +02:00
|
|
|
|
2010-05-24 05:30:52 +02:00
|
|
|
def __init__(self):
|
|
|
|
self.default()
|
|
|
|
|
|
|
|
def default(self):
|
|
|
|
self.binaries = True
|
2010-07-26 20:29:30 +02:00
|
|
|
self.libraries = False
|
2010-05-24 05:30:52 +02:00
|
|
|
self.clientSrc = False
|
|
|
|
self.headers = False
|
|
|
|
self.bannerDir = None
|
|
|
|
self.headerRoot = "include"
|
2010-07-23 18:52:59 +02:00
|
|
|
self.clientTestsDir = None
|
2010-05-24 05:30:52 +02:00
|
|
|
|
|
|
|
def justClient(self):
|
|
|
|
self.binaries = False
|
2010-07-28 18:24:34 +02:00
|
|
|
self.libraries = False
|
2010-05-24 05:30:52 +02:00
|
|
|
self.clientSrc = True
|
|
|
|
self.headers = True
|
|
|
|
self.bannerDir = "distsrc/client/"
|
|
|
|
self.headerRoot = ""
|
2011-12-24 21:33:26 +01:00
|
|
|
self.clientTestsDir = "src/mongo/client/examples/"
|
2010-05-23 18:33:34 +02:00
|
|
|
|
2010-05-24 05:30:52 +02:00
|
|
|
installSetup = InstallSetup()
|
|
|
|
if distBuild:
|
|
|
|
installSetup.bannerDir = "distsrc"
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "full" ):
|
2010-07-26 20:15:46 +02:00
|
|
|
installSetup.headers = True
|
2010-07-26 20:29:30 +02:00
|
|
|
installSetup.libraries = True
|
2010-07-26 20:15:46 +02:00
|
|
|
|
2010-05-23 18:33:34 +02:00
|
|
|
|
2011-12-25 07:24:30 +01:00
|
|
|
#env.VariantDir( get_variant_dir() , "src" , duplicate=0 )
|
2011-12-25 04:48:28 +01:00
|
|
|
|
2009-04-23 22:51:51 +02:00
|
|
|
# ------ SOURCE FILE SETUP -----------
|
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
commonFiles = [ "src/mongo/pch.cpp" , "src/mongo/buildinfo.cpp" , "src/mongo/db/indexkey.cpp" , "src/mongo/db/jsobj.cpp" , "src/mongo/bson/oid.cpp" , "src/mongo/db/json.cpp" , "src/mongo/db/lasterror.cpp" , "src/mongo/db/nonce.cpp" , "src/mongo/db/queryutil.cpp" , "src/mongo/db/querypattern.cpp" , "src/mongo/db/projection.cpp" , "src/mongo/shell/mongo.cpp" ]
|
|
|
|
commonFiles += [ "src/mongo/util/background.cpp" , "src/mongo/util/intrusive_counter.cpp",
|
|
|
|
"src/mongo/util/util.cpp" , "src/mongo/util/file_allocator.cpp" ,
|
|
|
|
"src/mongo/util/assert_util.cpp" , "src/mongo/util/log.cpp" , "src/mongo/util/ramlog.cpp" , "src/mongo/util/md5main.cpp" , "src/mongo/util/base64.cpp", "src/mongo/util/concurrency/vars.cpp", "src/mongo/util/concurrency/task.cpp", "src/mongo/util/debug_util.cpp",
|
|
|
|
"src/mongo/util/concurrency/thread_pool.cpp", "src/mongo/util/password.cpp", "src/mongo/util/version.cpp", "src/mongo/util/signal_handlers.cpp",
|
2011-12-27 21:06:21 +01:00
|
|
|
"src/mongo/util/concurrency/rwlockimpl.cpp", "src/mongo/util/histogram.cpp", "src/mongo/util/concurrency/spin_lock.cpp", "src/mongo/util/text.cpp" , "src/mongo/util/stringutils.cpp" ,
|
2011-12-24 21:33:26 +01:00
|
|
|
"src/mongo/util/concurrency/synchronization.cpp" ]
|
|
|
|
commonFiles += [ "src/mongo/util/net/sock.cpp" , "src/mongo/util/net/httpclient.cpp" , "src/mongo/util/net/message.cpp" , "src/mongo/util/net/message_port.cpp" , "src/mongo/util/net/listen.cpp" ]
|
|
|
|
commonFiles += Glob( "src/mongo/util/*.c" )
|
|
|
|
commonFiles += [ "src/mongo/client/connpool.cpp" , "src/mongo/client/dbclient.cpp" , "src/mongo/client/dbclient_rs.cpp" , "src/mongo/client/dbclientcursor.cpp" , "src/mongo/client/model.cpp" , "src/mongo/client/syncclusterconnection.cpp" , "src/mongo/client/distlock.cpp" , "src/mongo/s/shardconnection.cpp" ]
|
2009-01-06 00:19:56 +01:00
|
|
|
|
2010-08-06 19:13:49 +02:00
|
|
|
#mmap stuff
|
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
coreDbFiles = [ "src/mongo/db/commands.cpp" ]
|
|
|
|
coreServerFiles = [ "src/mongo/util/net/message_server_port.cpp" ,
|
|
|
|
"src/mongo/client/parallel.cpp" , "src/mongo/db/common.cpp",
|
|
|
|
"src/mongo/util/net/miniwebserver.cpp" , "src/mongo/db/dbwebserver.cpp" ,
|
|
|
|
"src/mongo/db/matcher.cpp" , "src/mongo/db/dbcommands_generic.cpp" , "src/mongo/db/commands/cloud.cpp", "src/mongo/db/dbmessage.cpp" ]
|
2009-01-15 16:08:20 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
mmapFiles = [ "src/mongo/util/mmap.cpp" ]
|
2011-03-07 22:28:10 +01:00
|
|
|
|
|
|
|
if has_option( "mm" ):
|
2011-12-24 21:33:26 +01:00
|
|
|
mmapFiles += [ "src/mongo/util/mmap_mm.cpp" ]
|
2011-03-07 22:28:10 +01:00
|
|
|
elif os.sys.platform == "win32":
|
2011-12-24 21:33:26 +01:00
|
|
|
mmapFiles += [ "src/mongo/util/mmap_win.cpp" ]
|
2011-03-07 22:28:10 +01:00
|
|
|
else:
|
2011-12-24 21:33:26 +01:00
|
|
|
mmapFiles += [ "src/mongo/util/mmap_posix.cpp" ]
|
2011-03-07 22:28:10 +01:00
|
|
|
|
2011-12-19 21:47:11 +01:00
|
|
|
#coreServerFiles += mmapFiles
|
2011-03-07 22:28:10 +01:00
|
|
|
|
2011-11-02 02:25:26 +01:00
|
|
|
# handle processinfo*
|
2011-12-24 21:33:26 +01:00
|
|
|
processInfoFiles = [ "src/mongo/util/processinfo.cpp" ]
|
2011-01-26 20:19:40 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
if os.path.exists( "src/mongo/util/processinfo_" + os.sys.platform + ".cpp" ):
|
|
|
|
processInfoFiles += [ "src/mongo/util/processinfo_" + os.sys.platform + ".cpp" ]
|
2011-07-29 01:54:51 +02:00
|
|
|
elif os.sys.platform == "linux3":
|
2011-12-24 21:33:26 +01:00
|
|
|
processInfoFiles += [ "src/mongo/util/processinfo_linux2.cpp" ]
|
2011-01-26 17:21:16 +01:00
|
|
|
else:
|
2011-12-24 21:33:26 +01:00
|
|
|
processInfoFiles += [ "src/mongo/util/processinfo_none.cpp" ]
|
2011-01-26 20:19:40 +01:00
|
|
|
|
|
|
|
coreServerFiles += processInfoFiles
|
2011-01-26 17:21:16 +01:00
|
|
|
|
2011-11-02 02:25:26 +01:00
|
|
|
# handle systeminfo*
|
|
|
|
systemInfoFiles = [ ]
|
2011-12-24 21:33:26 +01:00
|
|
|
if os.path.exists( "src/mongo/util/systeminfo_" + os.sys.platform + ".cpp" ):
|
|
|
|
systemInfoFiles += [ "src/mongo/util/systeminfo_" + os.sys.platform + ".cpp" ]
|
2011-11-02 02:25:26 +01:00
|
|
|
elif os.sys.platform == "linux3":
|
2011-12-24 21:33:26 +01:00
|
|
|
systemInfoFiles += [ "src/mongo/util/systeminfo_linux2.cpp" ]
|
2011-11-02 02:25:26 +01:00
|
|
|
else:
|
2011-12-24 21:33:26 +01:00
|
|
|
systemInfoFiles += [ "src/mongo/util/systeminfo_none.cpp" ]
|
2011-11-02 02:25:26 +01:00
|
|
|
|
|
|
|
coreServerFiles += systemInfoFiles
|
|
|
|
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "asio" ):
|
2011-12-24 21:33:26 +01:00
|
|
|
coreServerFiles += [ "src/mongo/util/net/message_server_asio.cpp" ]
|
2010-06-08 17:06:34 +02:00
|
|
|
|
2011-05-15 02:16:24 +02:00
|
|
|
# mongod files - also files used in tools. present in dbtests, but not in mongos and not in client libs.
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles = [ "src/mongo/db/curop.cpp" , "src/mongo/db/d_globals.cpp" , "src/mongo/db/pagefault.cpp" , "src/mongo/util/compress.cpp" , "src/mongo/db/d_concurrency.cpp" , "src/mongo/db/key.cpp" , "src/mongo/db/btreebuilder.cpp" , "src/mongo/util/logfile.cpp" , "src/mongo/util/alignedbuilder.cpp" , "src/mongo/db/mongommf.cpp" , "src/mongo/db/dur.cpp" , "src/mongo/db/durop.cpp" , "src/mongo/db/dur_writetodatafiles.cpp" , "src/mongo/db/dur_preplogbuffer.cpp" , "src/mongo/db/dur_commitjob.cpp" , "src/mongo/db/dur_recover.cpp" , "src/mongo/db/dur_journal.cpp" , "src/mongo/db/introspect.cpp" , "src/mongo/db/btree.cpp" , "src/mongo/db/clientcursor.cpp" , "src/mongo/db/tests.cpp" , "src/mongo/db/repl.cpp" , "src/mongo/db/repl/rs.cpp" , "src/mongo/db/repl/consensus.cpp" , "src/mongo/db/repl/rs_initiate.cpp" , "src/mongo/db/repl/replset_commands.cpp" , "src/mongo/db/repl/manager.cpp" , "src/mongo/db/repl/health.cpp" , "src/mongo/db/repl/heartbeat.cpp" , "src/mongo/db/repl/rs_config.cpp" , "src/mongo/db/repl/rs_rollback.cpp" , "src/mongo/db/repl/rs_sync.cpp" , "src/mongo/db/repl/rs_initialsync.cpp" , "src/mongo/db/oplog.cpp" , "src/mongo/db/repl_block.cpp" , "src/mongo/db/btreecursor.cpp" , "src/mongo/db/cloner.cpp" , "src/mongo/db/namespace.cpp" , "src/mongo/db/cap.cpp" , "src/mongo/db/matcher_covered.cpp" , "src/mongo/db/dbeval.cpp" , "src/mongo/db/restapi.cpp" , "src/mongo/db/dbhelpers.cpp" , "src/mongo/db/instance.cpp" , "src/mongo/db/client.cpp" , "src/mongo/db/database.cpp" , "src/mongo/db/pdfile.cpp" , "src/mongo/db/record.cpp" , "src/mongo/db/cursor.cpp" , "src/mongo/db/security.cpp" , "src/mongo/db/queryoptimizer.cpp" , "src/mongo/db/queryoptimizercursor.cpp" , "src/mongo/db/extsort.cpp" , "src/mongo/db/cmdline.cpp" ]
|
2010-04-13 21:44:48 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles += [ "src/mongo/db/index.cpp" , "src/mongo/db/scanandorder.cpp" ] + Glob( "src/mongo/db/geo/*.cpp" ) + Glob( "src/mongo/db/ops/*.cpp" )
|
2009-12-29 19:45:46 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles += [ "src/mongo/db/dbcommands.cpp" , "src/mongo/db/dbcommands_admin.cpp" ]
|
2011-04-05 20:35:45 +02:00
|
|
|
|
|
|
|
# most commands are only for mongod
|
|
|
|
serverOnlyFiles += [
|
2011-12-24 21:33:26 +01:00
|
|
|
"src/mongo/db/commands/distinct.cpp",
|
|
|
|
"src/mongo/db/commands/find_and_modify.cpp",
|
|
|
|
"src/mongo/db/commands/group.cpp",
|
|
|
|
"src/mongo/db/commands/mr.cpp",
|
|
|
|
"src/mongo/db/commands/pipeline_command.cpp",
|
|
|
|
"src/mongo/db/commands/document_source_cursor.cpp" ]
|
|
|
|
# "src/mongo/db/commands/isself.cpp",
|
|
|
|
#serverOnlyFiles += [ "src/mongo/db/commands/%s.cpp" % x for x in ["distinct","find_and_modify","group","mr"] ]
|
2011-10-13 01:56:11 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles += [ "src/mongo/db/driverHelpers.cpp" ]
|
2011-04-05 20:35:45 +02:00
|
|
|
|
2011-12-19 21:47:11 +01:00
|
|
|
serverOnlyFiles += mmapFiles
|
|
|
|
|
2011-04-05 20:35:45 +02:00
|
|
|
# but the pipeline command works everywhere
|
2011-12-24 21:33:26 +01:00
|
|
|
coreServerFiles += [ "src/mongo/db/commands/pipeline.cpp" ]
|
|
|
|
coreServerFiles += Glob("src/mongo/db/pipeline/*.cpp")
|
2011-04-05 20:35:45 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles += [ "src/mongo/db/stats/snapshots.cpp" ]
|
|
|
|
############coreServerFiles += "src/mongo/db/stats/snapshots.cpp"
|
|
|
|
coreServerFiles += [ "src/mongo/db/stats/counters.cpp", "src/mongo/db/stats/service_stats.cpp", "src/mongo/db/stats/top.cpp" ]
|
|
|
|
#coreServerFiles += Glob( "src/mongo/db/stats/*.cpp" )
|
|
|
|
coreServerFiles += [ "src/mongo/db/commands/isself.cpp", "src/mongo/db/security_common.cpp", "src/mongo/db/security_commands.cpp" ]
|
2009-04-23 22:51:51 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
scriptingFiles = [ "src/mongo/scripting/engine.cpp" , "src/mongo/scripting/utils.cpp" , "src/mongo/scripting/bench.cpp" ]
|
2010-05-24 18:52:28 +02:00
|
|
|
|
2009-04-23 23:40:43 +02:00
|
|
|
if usesm:
|
2011-12-24 21:33:26 +01:00
|
|
|
scriptingFiles += [ "src/mongo/scripting/engine_spidermonkey.cpp" ]
|
2009-10-10 07:30:00 +02:00
|
|
|
elif usev8:
|
2011-12-24 21:33:26 +01:00
|
|
|
scriptingFiles += [ Glob( "src/mongo/scripting/*v8*.cpp" ) ]
|
2009-04-23 22:51:51 +02:00
|
|
|
else:
|
2011-12-24 21:33:26 +01:00
|
|
|
scriptingFiles += [ "src/mongo/scripting/engine_none.cpp" ]
|
2010-05-24 18:52:28 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
coreShardFiles = [ "src/mongo/s/config.cpp" , "src/mongo/s/grid.cpp" , "src/mongo/s/chunk.cpp" , "src/mongo/s/shard.cpp" , "src/mongo/s/shardkey.cpp" ]
|
|
|
|
shardServerFiles = coreShardFiles + Glob( "src/mongo/s/strategy*.cpp" ) + [ "src/mongo/s/commands_admin.cpp" , "src/mongo/s/commands_public.cpp" , "src/mongo/s/request.cpp" , "src/mongo/s/client.cpp" , "src/mongo/s/cursors.cpp" , "src/mongo/s/server.cpp" , "src/mongo/s/config_migrate.cpp" , "src/mongo/s/s_only.cpp" , "src/mongo/s/stats.cpp" , "src/mongo/s/balance.cpp" , "src/mongo/s/balancer_policy.cpp" , "src/mongo/db/cmdline.cpp" , "src/mongo/s/writeback_listener.cpp" , "src/mongo/s/shard_version.cpp", "src/mongo/s/mr_shard.cpp", "src/mongo/s/security.cpp" ]
|
|
|
|
serverOnlyFiles += coreShardFiles + [ "src/mongo/s/d_logic.cpp" , "src/mongo/s/d_writeback.cpp" , "src/mongo/s/d_migrate.cpp" , "src/mongo/s/d_state.cpp" , "src/mongo/s/d_split.cpp" , "src/mongo/client/distlock_test.cpp" , "src/mongo/s/d_chunk_manager.cpp", "src/mongo/s/default_version.cpp" ]
|
2009-03-11 22:28:49 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
serverOnlyFiles += [ "src/mongo/db/module.cpp" ] + Glob( "src/mongo/db/modules/*.cpp" )
|
2009-11-19 18:40:23 +01:00
|
|
|
|
|
|
|
modules = []
|
2010-05-26 17:11:15 +02:00
|
|
|
moduleNames = []
|
2009-11-19 18:40:23 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
for x in os.listdir( "src/mongo/db/modules/" ):
|
2009-11-18 23:19:26 +01:00
|
|
|
if x.find( "." ) >= 0:
|
|
|
|
continue
|
2009-11-19 18:40:23 +01:00
|
|
|
print( "adding module: " + x )
|
2010-05-26 17:11:15 +02:00
|
|
|
moduleNames.append( x )
|
2011-12-24 21:33:26 +01:00
|
|
|
modRoot = "src/mongo/db/modules/" + x + "/"
|
2011-02-15 09:02:45 +01:00
|
|
|
|
2009-11-19 18:40:23 +01:00
|
|
|
modBuildFile = modRoot + "build.py"
|
2011-02-15 09:02:45 +01:00
|
|
|
myModule = None
|
2009-11-19 18:40:23 +01:00
|
|
|
if os.path.exists( modBuildFile ):
|
2011-02-15 09:02:45 +01:00
|
|
|
myModule = imp.load_module( "module_" + x , open( modBuildFile , "r" ) , modBuildFile , ( ".py" , "r" , imp.PY_SOURCE ) )
|
|
|
|
modules.append( myModule )
|
|
|
|
|
|
|
|
if myModule and "customIncludes" in dir(myModule) and myModule.customIncludes:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
serverOnlyFiles += Glob( modRoot + "src/*.cpp" )
|
|
|
|
|
2011-12-25 04:48:28 +01:00
|
|
|
mongodOnlyFiles = [ "src/mongo/db/db.cpp", "src/mongo/db/compact.cpp" ]
|
|
|
|
if "win32" == os.sys.platform:
|
|
|
|
mongodOnlyFiles.append( "src/mongo/util/ntservice.cpp" )
|
|
|
|
|
|
|
|
def fixBuildDir( lst ):
|
|
|
|
for i in xrange(0,len(lst)):
|
|
|
|
x = str(lst[i])
|
|
|
|
if not x.startswith( "src/" ):
|
|
|
|
continue
|
2011-12-25 07:24:30 +01:00
|
|
|
#x = get_variant_dir() + "/" + x.partition( "src/" )[2]
|
|
|
|
#x = x.replace( "//" , "/" )
|
|
|
|
#lst[i] = x
|
2011-12-25 04:48:28 +01:00
|
|
|
|
|
|
|
|
2009-11-18 18:53:56 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
allClientFiles = commonFiles + coreDbFiles + [ "src/mongo/client/clientOnly.cpp" , "src/mongo/client/gridfs.cpp" ];
|
2009-01-06 00:19:56 +01:00
|
|
|
|
2011-12-25 04:48:28 +01:00
|
|
|
fixBuildDir( commonFiles )
|
|
|
|
fixBuildDir( coreDbFiles )
|
|
|
|
fixBuildDir( allClientFiles )
|
|
|
|
fixBuildDir( coreServerFiles )
|
|
|
|
fixBuildDir( serverOnlyFiles )
|
|
|
|
fixBuildDir( mongodOnlyFiles )
|
|
|
|
fixBuildDir( shardServerFiles )
|
|
|
|
|
2009-04-23 22:51:51 +02:00
|
|
|
# ---- other build setup -----
|
2009-01-20 16:22:09 +01:00
|
|
|
|
2009-02-06 16:48:39 +01:00
|
|
|
platform = os.sys.platform
|
2009-02-10 16:07:18 +01:00
|
|
|
if "uname" in dir(os):
|
|
|
|
processor = os.uname()[4]
|
|
|
|
else:
|
|
|
|
processor = "i386"
|
2009-02-06 16:48:39 +01:00
|
|
|
|
|
|
|
if force32:
|
|
|
|
processor = "i386"
|
|
|
|
if force64:
|
|
|
|
processor = "x86_64"
|
|
|
|
|
2010-07-23 19:17:22 +02:00
|
|
|
DEFAULT_INSTALL_DIR = "/usr/local"
|
|
|
|
installDir = DEFAULT_INSTALL_DIR
|
2009-01-22 15:12:58 +01:00
|
|
|
nixLibPrefix = "lib"
|
2009-01-07 19:27:01 +01:00
|
|
|
|
2009-02-11 03:37:18 +01:00
|
|
|
distName = GetOption( "distname" )
|
2009-05-29 16:21:43 +02:00
|
|
|
dontReplacePackage = False
|
2009-02-11 03:37:18 +01:00
|
|
|
|
2009-02-01 23:51:00 +01:00
|
|
|
if distBuild:
|
|
|
|
release = True
|
|
|
|
|
2010-07-31 00:56:05 +02:00
|
|
|
def isDriverBuild():
|
|
|
|
return GetOption( "prefix" ) and GetOption( "prefix" ).find( "mongo-cxx-driver" ) >= 0
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "prefix" ):
|
2009-02-01 23:51:00 +01:00
|
|
|
installDir = GetOption( "prefix" )
|
2010-07-31 00:56:05 +02:00
|
|
|
if isDriverBuild():
|
2010-05-24 05:30:52 +02:00
|
|
|
installSetup.justClient()
|
|
|
|
|
2009-02-01 23:51:00 +01:00
|
|
|
|
2009-01-09 18:16:32 +01:00
|
|
|
def findVersion( root , choices ):
|
2010-05-03 23:29:49 +02:00
|
|
|
if not isinstance(root, list):
|
|
|
|
root = [root]
|
|
|
|
for r in root:
|
|
|
|
for c in choices:
|
|
|
|
if ( os.path.exists( r + c ) ):
|
|
|
|
return r + c
|
|
|
|
raise RuntimeError("can't find a version of [" + repr(root) + "] choices: " + repr(choices))
|
2009-01-09 18:16:32 +01:00
|
|
|
|
2009-04-12 03:19:29 +02:00
|
|
|
def choosePathExist( choices , default=None):
|
|
|
|
for c in choices:
|
2009-04-28 14:47:56 +02:00
|
|
|
if c != None and os.path.exists( c ):
|
2009-04-12 03:19:29 +02:00
|
|
|
return c
|
|
|
|
return default
|
|
|
|
|
2010-01-28 22:36:47 +01:00
|
|
|
def filterExists(paths):
|
|
|
|
return filter(os.path.exists, paths)
|
|
|
|
|
2009-01-06 00:19:56 +01:00
|
|
|
if "darwin" == os.sys.platform:
|
2009-01-28 23:27:12 +01:00
|
|
|
darwin = True
|
2009-02-06 16:48:39 +01:00
|
|
|
platform = "osx" # prettier than darwin
|
2009-01-28 23:27:12 +01:00
|
|
|
|
2009-10-16 08:20:08 +02:00
|
|
|
if env["CXX"] is None:
|
2010-11-29 08:36:54 +01:00
|
|
|
print( "YO" )
|
2009-10-16 08:20:08 +02:00
|
|
|
if os.path.exists( "/usr/bin/g++-4.2" ):
|
|
|
|
env["CXX"] = "g++-4.2"
|
2009-01-06 00:53:46 +01:00
|
|
|
|
2009-01-07 19:27:01 +01:00
|
|
|
nix = True
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-01-25 16:01:43 +01:00
|
|
|
if force64:
|
2009-01-26 22:29:19 +01:00
|
|
|
env.Append( CPPPATH=["/usr/64/include"] )
|
|
|
|
env.Append( LIBPATH=["/usr/64/lib"] )
|
2010-07-23 19:17:22 +02:00
|
|
|
if installDir == DEFAULT_INSTALL_DIR and not distBuild:
|
2009-02-01 23:51:00 +01:00
|
|
|
installDir = "/usr/64/"
|
2009-01-25 16:01:43 +01:00
|
|
|
else:
|
2010-01-28 22:36:47 +01:00
|
|
|
env.Append( CPPPATH=filterExists(["/sw/include" , "/opt/local/include"]) )
|
|
|
|
env.Append( LIBPATH=filterExists(["/sw/lib/", "/opt/local/lib"]) )
|
2009-01-25 16:01:43 +01:00
|
|
|
|
2011-10-25 16:31:52 +02:00
|
|
|
elif os.sys.platform.startswith("linux"):
|
2009-03-25 18:22:09 +01:00
|
|
|
linux = True
|
2009-02-06 22:53:08 +01:00
|
|
|
platform = "linux"
|
2009-02-01 15:06:49 +01:00
|
|
|
|
2009-01-22 16:14:03 +01:00
|
|
|
if os.uname()[4] == "x86_64" and not force32:
|
2009-01-27 17:27:34 +01:00
|
|
|
linux64 = True
|
2009-01-22 15:12:58 +01:00
|
|
|
nixLibPrefix = "lib64"
|
2009-04-01 04:08:55 +02:00
|
|
|
env.Append( LIBPATH=["/usr/lib64" , "/lib64" ] )
|
2009-02-05 18:42:35 +01:00
|
|
|
env.Append( LIBS=["pthread"] )
|
2009-07-22 19:42:21 +02:00
|
|
|
|
2009-08-30 03:13:11 +02:00
|
|
|
force64 = False
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-01-27 04:19:15 +01:00
|
|
|
if force32:
|
2009-01-27 14:57:15 +01:00
|
|
|
env.Append( LIBPATH=["/usr/lib32"] )
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2009-01-07 19:27:01 +01:00
|
|
|
nix = True
|
|
|
|
|
2009-07-07 17:12:39 +02:00
|
|
|
if static:
|
|
|
|
env.Append( LINKFLAGS=" -static " )
|
|
|
|
|
2009-02-01 15:06:49 +01:00
|
|
|
elif "sunos5" == os.sys.platform:
|
|
|
|
nix = True
|
2009-06-01 22:09:16 +02:00
|
|
|
solaris = True
|
2010-04-27 21:48:38 +02:00
|
|
|
env.Append( CPPDEFINES=[ "__sunos__" ] )
|
2009-07-17 17:21:42 +02:00
|
|
|
env.Append( LIBS=["socket","resolv"] )
|
2009-02-01 15:06:49 +01:00
|
|
|
|
2009-11-02 02:19:00 +01:00
|
|
|
elif os.sys.platform.startswith( "freebsd" ):
|
2009-05-27 16:44:45 +02:00
|
|
|
nix = True
|
|
|
|
freebsd = True
|
|
|
|
env.Append( CPPPATH=[ "/usr/local/include" ] )
|
|
|
|
env.Append( LIBPATH=[ "/usr/local/lib" ] )
|
|
|
|
env.Append( CPPDEFINES=[ "__freebsd__" ] )
|
|
|
|
|
2010-06-20 22:29:03 +02:00
|
|
|
elif os.sys.platform.startswith( "openbsd" ):
|
|
|
|
nix = True
|
|
|
|
openbsd = True
|
|
|
|
env.Append( CPPPATH=[ "/usr/local/include" ] )
|
|
|
|
env.Append( LIBPATH=[ "/usr/local/lib" ] )
|
|
|
|
env.Append( CPPDEFINES=[ "__openbsd__" ] )
|
|
|
|
|
2009-01-07 21:51:42 +01:00
|
|
|
elif "win32" == os.sys.platform:
|
2009-02-10 16:07:18 +01:00
|
|
|
windows = True
|
2010-06-01 23:25:25 +02:00
|
|
|
#if force64:
|
|
|
|
# release = True
|
2009-07-27 19:50:25 +02:00
|
|
|
|
2011-08-04 23:53:28 +02:00
|
|
|
if has_option( "win2008plus" ):
|
2011-07-08 23:38:29 +02:00
|
|
|
env.Append( CPPDEFINES=[ "MONGO_USE_SRW_ON_WINDOWS" ] )
|
|
|
|
|
2009-12-29 20:23:48 +01:00
|
|
|
for pathdir in env['ENV']['PATH'].split(os.pathsep):
|
|
|
|
if os.path.exists(os.path.join(pathdir, 'cl.exe')):
|
2010-05-03 01:17:35 +02:00
|
|
|
print( "found visual studio at " + pathdir )
|
2009-12-29 20:23:48 +01:00
|
|
|
break
|
|
|
|
else:
|
|
|
|
#use current environment
|
|
|
|
env['ENV'] = dict(os.environ)
|
|
|
|
|
2009-12-29 18:12:47 +01:00
|
|
|
def find_boost():
|
2010-02-12 17:44:21 +01:00
|
|
|
for x in ('', ' (x86)'):
|
2010-04-28 00:28:10 +02:00
|
|
|
boostDir = "C:/Program Files" + x + "/boost/latest"
|
2010-04-26 23:14:09 +02:00
|
|
|
if os.path.exists( boostDir ):
|
|
|
|
return boostDir
|
2010-02-12 17:44:21 +01:00
|
|
|
for bv in reversed( range(33,50) ):
|
|
|
|
for extra in ('', '_0', '_1'):
|
|
|
|
boostDir = "C:/Program Files" + x + "/Boost/boost_1_" + str(bv) + extra
|
|
|
|
if os.path.exists( boostDir ):
|
|
|
|
return boostDir
|
2010-04-29 17:32:22 +02:00
|
|
|
if os.path.exists( "C:/boost" ):
|
|
|
|
return "C:/boost"
|
|
|
|
if os.path.exists( "/boost" ):
|
|
|
|
return "/boost"
|
2010-02-12 17:44:21 +01:00
|
|
|
return None
|
2009-12-29 18:12:47 +01:00
|
|
|
|
|
|
|
boostDir = find_boost()
|
|
|
|
if boostDir is None:
|
2009-02-10 16:07:18 +01:00
|
|
|
print( "can't find boost" )
|
|
|
|
Exit(1)
|
2010-06-23 01:58:26 +02:00
|
|
|
else:
|
|
|
|
print( "boost found at '" + boostDir + "'" )
|
2009-02-10 16:07:18 +01:00
|
|
|
|
|
|
|
boostLibs = []
|
|
|
|
|
2010-06-14 18:40:39 +02:00
|
|
|
env.Append( CPPDEFINES=[ "_UNICODE" ] )
|
|
|
|
env.Append( CPPDEFINES=[ "UNICODE" ] )
|
2009-05-22 19:40:32 +02:00
|
|
|
|
2010-05-03 23:29:49 +02:00
|
|
|
winSDKHome = findVersion( [ "C:/Program Files/Microsoft SDKs/Windows/", "C:/Program Files (x86)/Microsoft SDKs/Windows/" ] ,
|
2011-02-22 20:23:07 +01:00
|
|
|
[ "v7.1", "v7.0A", "v7.0", "v6.1", "v6.0a", "v6.0" ] )
|
2010-07-04 06:32:56 +02:00
|
|
|
print( "Windows SDK Root '" + winSDKHome + "'" )
|
2009-01-07 21:51:42 +01:00
|
|
|
|
2011-08-18 16:49:50 +02:00
|
|
|
env.Append( CPPPATH=[ boostDir , winSDKHome + "/Include" ] )
|
2009-01-07 21:51:42 +01:00
|
|
|
|
2010-06-01 23:25:25 +02:00
|
|
|
# consider adding /MP build with multiple processes option.
|
|
|
|
|
|
|
|
# /EHsc exception handling style for visual studio
|
|
|
|
# /W3 warning level
|
2009-02-10 21:12:15 +01:00
|
|
|
env.Append( CPPFLAGS=" /EHsc /W3 " )
|
2010-06-01 23:25:25 +02:00
|
|
|
|
|
|
|
# some warnings we don't like:
|
|
|
|
env.Append( CPPFLAGS=" /wd4355 /wd4800 /wd4267 /wd4244 " )
|
2010-06-02 00:40:31 +02:00
|
|
|
|
2011-05-30 06:30:10 +02:00
|
|
|
# PSAPI_VERSION relates to process api dll Psapi.dll.
|
2011-08-18 16:49:50 +02:00
|
|
|
env.Append( CPPDEFINES=["_CONSOLE","_CRT_SECURE_NO_WARNINGS","PSAPI_VERSION=1" ] )
|
2009-01-08 00:05:22 +01:00
|
|
|
|
2011-05-30 06:30:10 +02:00
|
|
|
# this would be for pre-compiled headers, could play with it later
|
|
|
|
#env.Append( CPPFLAGS=' /Yu"pch.h" ' )
|
2009-06-01 17:28:03 +02:00
|
|
|
|
2011-05-30 06:30:10 +02:00
|
|
|
# docs say don't use /FD from command line (minimal rebuild)
|
|
|
|
# /Gy function level linking
|
2010-06-01 23:25:25 +02:00
|
|
|
# /Gm is minimal rebuild, but may not work in parallel mode.
|
2009-02-10 21:12:15 +01:00
|
|
|
if release:
|
|
|
|
env.Append( CPPDEFINES=[ "NDEBUG" ] )
|
2011-08-24 17:09:26 +02:00
|
|
|
env.Append( CPPFLAGS= " /O2 /Gy " )
|
|
|
|
env.Append( CPPFLAGS= " /MT /Zi /TP /errorReport:none " )
|
2010-05-02 02:30:15 +02:00
|
|
|
# TODO: this has caused some linking problems :
|
2010-06-01 23:25:25 +02:00
|
|
|
# /GL whole program optimization
|
2010-06-03 20:29:11 +02:00
|
|
|
# /LTCG link time code generation
|
2010-05-02 02:30:15 +02:00
|
|
|
env.Append( CPPFLAGS= " /GL " )
|
|
|
|
env.Append( LINKFLAGS=" /LTCG " )
|
2011-12-23 23:28:36 +01:00
|
|
|
# /DEBUG will tell the linker to create a .pdb file
|
|
|
|
# which WinDbg and Visual Studio will use to resolve
|
|
|
|
# symbols if you want to debug a release-mode image
|
|
|
|
env.Append( LINKFLAGS=" /DEBUG " )
|
2009-02-10 21:12:15 +01:00
|
|
|
else:
|
2010-05-02 02:30:15 +02:00
|
|
|
# /Od disable optimization
|
2011-12-23 23:28:36 +01:00
|
|
|
# /Z7 debug info goes into each individual .obj file -- no .pdb created
|
2010-06-01 23:25:25 +02:00
|
|
|
# /TP it's a c++ file
|
2010-05-02 02:30:15 +02:00
|
|
|
# RTC1 /GZ (Enable Stack Frame Run-Time Error Checking)
|
2010-08-14 06:09:26 +02:00
|
|
|
env.Append( CPPFLAGS=" /RTC1 /MDd /Z7 /TP /errorReport:none " )
|
|
|
|
|
|
|
|
if debugBuild:
|
|
|
|
env.Append( LINKFLAGS=" /debug " )
|
|
|
|
env.Append( CPPFLAGS=" /Od " )
|
|
|
|
|
|
|
|
if debugLogging:
|
|
|
|
env.Append( CPPDEFINES=[ "_DEBUG" ] )
|
2009-01-07 21:51:42 +01:00
|
|
|
|
2010-05-03 01:17:35 +02:00
|
|
|
if force64 and os.path.exists( boostDir + "/lib/vs2010_64" ):
|
|
|
|
env.Append( LIBPATH=[ boostDir + "/lib/vs2010_64" ] )
|
|
|
|
elif not force64 and os.path.exists( boostDir + "/lib/vs2010_32" ):
|
|
|
|
env.Append( LIBPATH=[ boostDir + "/lib/vs2010_32" ] )
|
|
|
|
else:
|
|
|
|
env.Append( LIBPATH=[ boostDir + "/Lib" ] )
|
|
|
|
|
2009-07-27 22:24:09 +02:00
|
|
|
if force64:
|
2009-07-24 20:27:35 +02:00
|
|
|
env.Append( LIBPATH=[ winSDKHome + "/Lib/x64" ] )
|
|
|
|
else:
|
|
|
|
env.Append( LIBPATH=[ winSDKHome + "/Lib" ] )
|
|
|
|
|
2010-06-18 12:44:11 +02:00
|
|
|
if release:
|
2010-07-03 05:21:50 +02:00
|
|
|
#env.Append( LINKFLAGS=" /NODEFAULTLIB:MSVCPRT /NODEFAULTLIB:MSVCRTD " )
|
|
|
|
env.Append( LINKFLAGS=" /NODEFAULTLIB:MSVCPRT " )
|
2010-06-18 12:44:11 +02:00
|
|
|
else:
|
|
|
|
env.Append( LINKFLAGS=" /NODEFAULTLIB:MSVCPRT /NODEFAULTLIB:MSVCRT " )
|
2010-06-18 12:36:33 +02:00
|
|
|
|
2010-01-11 12:53:39 +01:00
|
|
|
winLibString = "ws2_32.lib kernel32.lib advapi32.lib Psapi.lib"
|
|
|
|
|
2009-07-27 19:50:25 +02:00
|
|
|
if force64:
|
2010-06-03 20:29:11 +02:00
|
|
|
|
|
|
|
winLibString += ""
|
|
|
|
#winLibString += " LIBCMT LIBCPMT "
|
|
|
|
|
2009-07-27 19:50:25 +02:00
|
|
|
else:
|
|
|
|
winLibString += " user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib "
|
|
|
|
winLibString += " odbc32.lib odbccp32.lib uuid.lib "
|
2010-01-11 12:53:39 +01:00
|
|
|
|
2009-07-24 20:27:35 +02:00
|
|
|
env.Append( LIBS=Split(winLibString) )
|
2009-07-27 22:24:09 +02:00
|
|
|
|
2010-06-02 00:40:31 +02:00
|
|
|
# dm these should automatically be defined by the compiler. commenting out to see if works. jun2010
|
|
|
|
#if force64:
|
|
|
|
# env.Append( CPPDEFINES=["_AMD64_=1"] )
|
|
|
|
#else:
|
|
|
|
# env.Append( CPPDEFINES=["_X86_=1"] )
|
2009-07-27 22:24:09 +02:00
|
|
|
|
2009-08-07 23:02:47 +02:00
|
|
|
env.Append( CPPPATH=["../winpcap/Include"] )
|
|
|
|
env.Append( LIBPATH=["../winpcap/Lib"] )
|
|
|
|
|
2009-01-06 00:53:46 +01:00
|
|
|
else:
|
|
|
|
print( "No special config for [" + os.sys.platform + "] which probably means it won't work" )
|
2009-01-06 00:19:56 +01:00
|
|
|
|
2009-01-07 19:27:01 +01:00
|
|
|
if nix:
|
2010-11-29 08:36:54 +01:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "distcc" ):
|
2010-11-29 08:36:54 +01:00
|
|
|
env["CXX"] = "distcc " + env["CXX"]
|
|
|
|
|
2011-07-01 23:57:34 +02:00
|
|
|
# -Winvalid-pch Warn if a precompiled header (see Precompiled Headers) is found in the search path but can't be used.
|
2010-11-30 04:09:07 +01:00
|
|
|
env.Append( CPPFLAGS="-fPIC -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch" )
|
|
|
|
# env.Append( " -Wconversion" ) TODO: this doesn't really work yet
|
2010-07-29 04:37:09 +02:00
|
|
|
if linux:
|
2011-09-26 18:05:00 +02:00
|
|
|
env.Append( CPPFLAGS=" -Werror -pipe " )
|
2011-03-11 23:06:41 +01:00
|
|
|
if not has_option('clang'):
|
|
|
|
env.Append( CPPFLAGS=" -fno-builtin-memcmp " ) # glibc's memcmp is faster than gcc's
|
|
|
|
|
2011-08-02 03:47:14 +02:00
|
|
|
env.Append( CPPDEFINES="_FILE_OFFSET_BITS=64" )
|
2009-04-06 22:10:31 +02:00
|
|
|
env.Append( CXXFLAGS=" -Wnon-virtual-dtor " )
|
2009-11-03 15:42:49 +01:00
|
|
|
env.Append( LINKFLAGS=" -fPIC -pthread -rdynamic" )
|
2009-02-17 18:24:47 +01:00
|
|
|
env.Append( LIBS=[] )
|
2009-01-08 00:05:22 +01:00
|
|
|
|
2010-09-11 00:59:29 +02:00
|
|
|
#make scons colorgcc friendly
|
|
|
|
env['ENV']['HOME'] = os.environ['HOME']
|
|
|
|
env['ENV']['TERM'] = os.environ['TERM']
|
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if linux and has_option( "sharedclient" ):
|
2010-07-26 23:17:20 +02:00
|
|
|
env.Append( LINKFLAGS=" -Wl,--as-needed -Wl,-zdefs " )
|
|
|
|
|
2009-02-18 05:29:28 +01:00
|
|
|
if debugBuild:
|
2010-02-06 00:06:11 +01:00
|
|
|
env.Append( CPPFLAGS=" -O0 -fstack-protector " );
|
2010-05-26 04:08:45 +02:00
|
|
|
env['ENV']['GLIBCXX_FORCE_NEW'] = 1; # play nice with valgrind
|
2009-01-30 16:29:07 +01:00
|
|
|
else:
|
2011-08-03 02:59:22 +02:00
|
|
|
env.Append( CPPFLAGS=" -O3 " )
|
2010-09-14 22:48:31 +02:00
|
|
|
#env.Append( CPPFLAGS=" -fprofile-generate" )
|
|
|
|
#env.Append( LINKFLAGS=" -fprofile-generate" )
|
|
|
|
# then:
|
|
|
|
#env.Append( CPPFLAGS=" -fprofile-use" )
|
|
|
|
#env.Append( LINKFLAGS=" -fprofile-use" )
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-03-12 16:53:50 +01:00
|
|
|
if debugLogging:
|
|
|
|
env.Append( CPPFLAGS=" -D_DEBUG" );
|
2009-01-30 16:29:07 +01:00
|
|
|
|
2009-01-20 16:22:09 +01:00
|
|
|
if force64:
|
2009-01-30 16:29:07 +01:00
|
|
|
env.Append( CFLAGS="-m64" )
|
2009-01-20 16:22:09 +01:00
|
|
|
env.Append( CXXFLAGS="-m64" )
|
2009-01-22 16:14:03 +01:00
|
|
|
env.Append( LINKFLAGS="-m64" )
|
2009-01-20 16:22:09 +01:00
|
|
|
|
2009-01-22 15:12:58 +01:00
|
|
|
if force32:
|
2009-01-30 16:29:07 +01:00
|
|
|
env.Append( CFLAGS="-m32" )
|
2009-01-22 15:12:58 +01:00
|
|
|
env.Append( CXXFLAGS="-m32" )
|
2009-01-22 16:14:03 +01:00
|
|
|
env.Append( LINKFLAGS="-m32" )
|
2009-01-20 16:22:09 +01:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "profile" ):
|
2009-11-24 19:08:36 +01:00
|
|
|
env.Append( LIBS=[ "profiler" ] )
|
2009-01-20 16:22:09 +01:00
|
|
|
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "gdbserver" ):
|
2010-01-29 20:23:54 +01:00
|
|
|
env.Append( CPPDEFINES=["USE_GDBSERVER"] )
|
|
|
|
|
2009-09-09 15:46:12 +02:00
|
|
|
# pre-compiled headers
|
2010-07-24 03:46:35 +02:00
|
|
|
if usePCH and 'Gch' in dir( env ):
|
2009-09-09 15:46:12 +02:00
|
|
|
print( "using precompiled headers" )
|
2011-03-11 23:06:41 +01:00
|
|
|
if has_option('clang'):
|
|
|
|
#env['GCHSUFFIX'] = '.pch' # clang++ uses pch.h.pch rather than pch.h.gch
|
|
|
|
#env.Prepend( CXXFLAGS=' -include pch.h ' ) # clang++ only uses pch from command line
|
|
|
|
print( "ERROR: clang pch is broken for now" )
|
|
|
|
Exit(1)
|
2010-04-27 21:27:52 +02:00
|
|
|
env['Gch'] = env.Gch( [ "pch.h" ] )[0]
|
2011-11-01 17:35:49 +01:00
|
|
|
env['GchSh'] = env.GchSh( [ "pch.h" ] )[0]
|
2011-12-24 21:33:26 +01:00
|
|
|
elif os.path.exists( "src/mongo/pch.h.gch" ):
|
2010-07-24 03:46:35 +02:00
|
|
|
print( "removing precompiled headers" )
|
2011-12-24 21:33:26 +01:00
|
|
|
os.unlink( "src/mongo/pch.h.gch" ) # gcc uses the file if it exists
|
2009-09-25 18:17:59 +02:00
|
|
|
|
2009-10-10 07:30:00 +02:00
|
|
|
if usev8:
|
2011-05-06 01:30:55 +02:00
|
|
|
env.Prepend( CPPPATH=["../v8/include/"] )
|
|
|
|
env.Prepend( LIBPATH=["../v8/"] )
|
2009-09-09 15:46:12 +02:00
|
|
|
|
2009-08-28 22:44:03 +02:00
|
|
|
if "uname" in dir(os):
|
|
|
|
hacks = buildscripts.findHacks( os.uname() )
|
|
|
|
if hacks is not None:
|
|
|
|
hacks.insert( env , { "linux64" : linux64 } )
|
2009-09-25 18:17:59 +02:00
|
|
|
|
2011-07-14 00:37:26 +02:00
|
|
|
if has_option( "ssl" ):
|
|
|
|
env.Append( CPPDEFINES=["MONGO_SSL"] )
|
|
|
|
env.Append( LIBS=["ssl"] )
|
2011-09-02 05:16:21 +02:00
|
|
|
if darwin:
|
|
|
|
env.Append( LIBS=["crypto"] )
|
2011-07-14 00:37:26 +02:00
|
|
|
|
2009-08-05 21:38:58 +02:00
|
|
|
try:
|
|
|
|
umask = os.umask(022)
|
|
|
|
except OSError:
|
|
|
|
pass
|
|
|
|
|
2011-06-29 21:06:12 +02:00
|
|
|
if not windows:
|
|
|
|
for keysuffix in [ "1" , "2" ]:
|
|
|
|
keyfile = "jstests/libs/key%s" % keysuffix
|
|
|
|
os.chmod( keyfile , stat.S_IWUSR|stat.S_IRUSR )
|
|
|
|
|
2011-10-11 16:30:10 +02:00
|
|
|
moduleFiles = {}
|
2011-11-15 00:05:08 +01:00
|
|
|
for shortName in getThirdPartyShortNames():
|
2011-12-24 21:33:26 +01:00
|
|
|
path = "src/third_party/%s.py" % shortName
|
|
|
|
myModule = imp.load_module( "src/third_party_%s" % shortName , open( path , "r" ) , path , ( ".py" , "r" , imp.PY_SOURCE ) )
|
2011-10-11 16:30:10 +02:00
|
|
|
fileLists = { "commonFiles" : commonFiles , "serverOnlyFiles" : serverOnlyFiles , "scriptingFiles" : scriptingFiles, "moduleFiles" : moduleFiles }
|
2011-08-18 19:24:59 +02:00
|
|
|
|
2011-08-20 00:09:18 +02:00
|
|
|
options_topass["windows"] = windows
|
|
|
|
options_topass["nix"] = nix
|
2011-08-18 19:24:59 +02:00
|
|
|
|
2011-11-15 00:05:08 +01:00
|
|
|
if has_option( "use-system-" + shortName ) or has_option( "use-system-all" ):
|
|
|
|
print( "using system version of: " + shortName )
|
|
|
|
myModule.configureSystem( env , fileLists , options_topass )
|
|
|
|
else:
|
|
|
|
myModule.configure( env , fileLists , options_topass )
|
2011-08-20 00:09:18 +02:00
|
|
|
|
2011-12-25 04:48:28 +01:00
|
|
|
fixBuildDir( scriptingFiles )
|
2011-08-20 00:09:18 +02:00
|
|
|
coreServerFiles += scriptingFiles
|
2011-08-18 19:12:37 +02:00
|
|
|
|
2011-12-25 04:48:28 +01:00
|
|
|
|
2009-01-18 21:32:00 +01:00
|
|
|
# --- check system ---
|
|
|
|
|
2009-03-18 19:15:52 +01:00
|
|
|
def getSysInfo():
|
|
|
|
if windows:
|
2009-03-19 13:51:04 +01:00
|
|
|
return "windows " + str( sys.getwindowsversion() )
|
2009-03-18 19:15:52 +01:00
|
|
|
else:
|
|
|
|
return " ".join( os.uname() )
|
|
|
|
|
2009-10-01 18:06:04 +02:00
|
|
|
def add_exe(target):
|
|
|
|
if windows:
|
|
|
|
return target + ".exe"
|
|
|
|
return target
|
|
|
|
|
2009-03-18 19:29:14 +01:00
|
|
|
def setupBuildInfoFile( outFile ):
|
2010-07-19 21:37:19 +02:00
|
|
|
version = utils.getGitVersion()
|
2010-05-26 17:11:15 +02:00
|
|
|
if len(moduleNames) > 0:
|
|
|
|
version = version + " modules: " + ','.join( moduleNames )
|
2009-03-18 19:15:52 +01:00
|
|
|
sysInfo = getSysInfo()
|
2009-11-24 17:13:13 +01:00
|
|
|
contents = '\n'.join([
|
2010-04-27 21:27:52 +02:00
|
|
|
'#include "pch.h"',
|
2009-11-24 17:13:13 +01:00
|
|
|
'#include <iostream>',
|
|
|
|
'#include <boost/version.hpp>',
|
|
|
|
'namespace mongo { const char * gitVersion(){ return "' + version + '"; } }',
|
2010-05-03 01:17:35 +02:00
|
|
|
'namespace mongo { string sysInfo(){ return "' + sysInfo + ' BOOST_LIB_VERSION=" BOOST_LIB_VERSION ; } }',
|
2009-11-24 17:13:13 +01:00
|
|
|
])
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-11-30 16:42:50 +01:00
|
|
|
contents += '\n';
|
|
|
|
|
2009-03-17 15:22:26 +01:00
|
|
|
if os.path.exists( outFile ) and open( outFile ).read().strip() == contents.strip():
|
|
|
|
return
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-11-30 16:42:50 +01:00
|
|
|
contents += '\n';
|
|
|
|
|
2009-03-17 15:22:26 +01:00
|
|
|
out = open( outFile , 'w' )
|
|
|
|
out.write( contents )
|
2009-03-18 19:15:52 +01:00
|
|
|
out.close()
|
2009-03-17 15:22:26 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
setupBuildInfoFile( "src/mongo/buildinfo.cpp" )
|
2009-03-17 15:22:26 +01:00
|
|
|
|
2009-04-28 14:47:56 +02:00
|
|
|
def bigLibString( myenv ):
|
|
|
|
s = str( myenv["LIBS"] )
|
|
|
|
if 'SLIBS' in myenv._dict:
|
|
|
|
s += str( myenv["SLIBS"] )
|
|
|
|
return s
|
2009-06-01 17:28:03 +02:00
|
|
|
|
2009-04-28 14:47:56 +02:00
|
|
|
|
2011-08-18 16:49:50 +02:00
|
|
|
def doConfigure( myenv , shell=False ):
|
2009-02-01 23:39:07 +01:00
|
|
|
conf = Configure(myenv)
|
2009-02-04 15:41:52 +01:00
|
|
|
myenv["LINKFLAGS_CLEAN"] = list( myenv["LINKFLAGS"] )
|
|
|
|
myenv["LIBS_CLEAN"] = list( myenv["LIBS"] )
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-05-28 19:19:02 +02:00
|
|
|
if 'CheckCXX' in dir( conf ):
|
|
|
|
if not conf.CheckCXX():
|
2009-05-28 19:19:19 +02:00
|
|
|
print( "c++ compiler not installed!" )
|
2009-05-28 19:19:02 +02:00
|
|
|
Exit(1)
|
2009-05-28 19:16:03 +02:00
|
|
|
|
2009-02-17 18:24:47 +01:00
|
|
|
if nix and not shell:
|
|
|
|
if not conf.CheckLib( "stdc++" ):
|
|
|
|
print( "can't find stdc++ library which is needed" );
|
|
|
|
Exit(1)
|
|
|
|
|
2010-05-23 18:33:34 +02:00
|
|
|
def myCheckLib( poss , failIfNotFound=False , staticOnly=False):
|
2009-01-28 23:27:12 +01:00
|
|
|
|
2009-02-01 23:39:07 +01:00
|
|
|
if type( poss ) != types.ListType :
|
|
|
|
poss = [poss]
|
2009-01-28 23:27:12 +01:00
|
|
|
|
2009-02-04 00:08:38 +01:00
|
|
|
allPlaces = [];
|
2009-12-09 20:58:37 +01:00
|
|
|
allPlaces += extraLibPlaces
|
2009-02-04 00:08:38 +01:00
|
|
|
if nix and release:
|
2009-02-01 23:39:07 +01:00
|
|
|
allPlaces += myenv["LIBPATH"]
|
|
|
|
if not force64:
|
|
|
|
allPlaces += [ "/usr/lib" , "/usr/local/lib" ]
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-02-01 23:39:07 +01:00
|
|
|
for p in poss:
|
|
|
|
for loc in allPlaces:
|
|
|
|
fullPath = loc + "/lib" + p + ".a"
|
|
|
|
if os.path.exists( fullPath ):
|
2009-02-08 16:42:10 +01:00
|
|
|
myenv['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)} $SLIBS'
|
|
|
|
myenv.Append( SLIBS=" " + fullPath + " " )
|
2009-02-01 23:39:07 +01:00
|
|
|
return True
|
2009-01-18 21:32:00 +01:00
|
|
|
|
2009-02-04 15:21:39 +01:00
|
|
|
|
2010-05-23 18:33:34 +02:00
|
|
|
if release and not windows and failIfNotFound:
|
2009-05-29 13:32:30 +02:00
|
|
|
print( "ERROR: can't find static version of: " + str( poss ) + " in: " + str( allPlaces ) )
|
2009-02-04 15:49:57 +01:00
|
|
|
Exit(1)
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-04-01 04:05:53 +02:00
|
|
|
res = not staticOnly and conf.CheckLib( poss )
|
2009-02-04 15:21:39 +01:00
|
|
|
if res:
|
|
|
|
return True
|
|
|
|
|
|
|
|
if failIfNotFound:
|
2010-05-11 22:21:24 +02:00
|
|
|
print( "can't find or link against library " + str( poss ) + " in " + str( myenv["LIBPATH"] ) )
|
|
|
|
print( "see config.log for more information" )
|
2010-07-13 00:04:34 +02:00
|
|
|
if windows:
|
|
|
|
print( "use scons --64 when cl.exe is 64 bit compiler" )
|
2009-02-04 15:21:39 +01:00
|
|
|
Exit(1)
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-02-04 15:21:39 +01:00
|
|
|
return False
|
2009-02-01 23:39:07 +01:00
|
|
|
|
|
|
|
if not conf.CheckCXXHeader( "boost/filesystem/operations.hpp" ):
|
|
|
|
print( "can't find boost headers" )
|
2009-02-03 23:19:00 +01:00
|
|
|
if shell:
|
|
|
|
print( "\tshell might not compile" )
|
|
|
|
else:
|
|
|
|
Exit(1)
|
2009-01-27 17:38:41 +01:00
|
|
|
|
2009-12-30 20:58:42 +01:00
|
|
|
if asio:
|
|
|
|
if conf.CheckCXXHeader( "boost/asio.hpp" ):
|
|
|
|
myenv.Append( CPPDEFINES=[ "USE_ASIO" ] )
|
|
|
|
else:
|
|
|
|
print( "WARNING: old version of boost - you should consider upgrading" )
|
2009-03-02 19:35:34 +01:00
|
|
|
|
2010-08-10 15:48:27 +02:00
|
|
|
# this will add it if it exists and works
|
|
|
|
myCheckLib( [ "boost_system" + boostCompiler + "-mt" + boostVersion ,
|
|
|
|
"boost_system" + boostCompiler + boostVersion ] )
|
2009-12-17 16:23:23 +01:00
|
|
|
|
2010-08-10 15:48:27 +02:00
|
|
|
for b in boostLibs:
|
|
|
|
l = "boost_" + b
|
|
|
|
myCheckLib( [ l + boostCompiler + "-mt" + boostVersion ,
|
|
|
|
l + boostCompiler + boostVersion ] ,
|
|
|
|
release or not shell)
|
2009-07-07 16:44:43 +02:00
|
|
|
|
2009-08-12 20:54:53 +02:00
|
|
|
if not conf.CheckCXXHeader( "execinfo.h" ):
|
|
|
|
myenv.Append( CPPDEFINES=[ "NOEXECINFO" ] )
|
|
|
|
|
2009-08-07 23:02:47 +02:00
|
|
|
myenv["_HAVEPCAP"] = myCheckLib( ["pcap", "wpcap"] )
|
2009-07-24 02:48:23 +02:00
|
|
|
removeIfInList( myenv["LIBS"] , "pcap" )
|
2009-08-07 23:02:47 +02:00
|
|
|
removeIfInList( myenv["LIBS"] , "wpcap" )
|
2009-03-12 14:30:14 +01:00
|
|
|
|
2009-11-19 18:40:23 +01:00
|
|
|
for m in modules:
|
2011-02-15 09:02:45 +01:00
|
|
|
if "customIncludes" in dir(m) and m.customIncludes:
|
|
|
|
m.configure( conf , myenv , serverOnlyFiles )
|
|
|
|
else:
|
|
|
|
m.configure( conf , myenv )
|
2009-11-03 23:15:14 +01:00
|
|
|
|
2009-08-28 17:50:20 +02:00
|
|
|
if solaris:
|
|
|
|
conf.CheckLib( "nsl" )
|
|
|
|
|
2009-10-10 07:30:00 +02:00
|
|
|
if usev8:
|
2009-10-13 22:12:43 +02:00
|
|
|
if debugBuild:
|
|
|
|
myCheckLib( [ "v8_g" , "v8" ] , True )
|
|
|
|
else:
|
|
|
|
myCheckLib( "v8" , True )
|
2009-10-10 07:30:00 +02:00
|
|
|
|
2009-05-27 16:44:45 +02:00
|
|
|
# requires ports devel/libexecinfo to be installed
|
2010-06-20 22:29:03 +02:00
|
|
|
if freebsd or openbsd:
|
2009-05-27 16:44:45 +02:00
|
|
|
myCheckLib( "execinfo", True )
|
|
|
|
env.Append( LIBS=[ "execinfo" ] )
|
|
|
|
|
2010-01-29 20:46:05 +01:00
|
|
|
# Handle staticlib,staticlibpath options.
|
|
|
|
staticlibfiles = []
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option( "staticlib" ):
|
2010-01-29 20:46:05 +01:00
|
|
|
# FIXME: probably this loop ought to do something clever
|
|
|
|
# depending on whether we want to use 32bit or 64bit
|
|
|
|
# libraries. For now, we sort of rely on the user supplying a
|
|
|
|
# sensible staticlibpath option. (myCheckLib implements an
|
|
|
|
# analogous search, but it also does other things I don't
|
|
|
|
# understand, so I'm not using it.)
|
2010-11-30 04:34:42 +01:00
|
|
|
if has_option ( "staticlibpath" ):
|
2010-01-29 20:46:05 +01:00
|
|
|
dirs = GetOption ( "staticlibpath" ).split( "," )
|
|
|
|
else:
|
|
|
|
dirs = [ "/usr/lib64", "/usr/lib" ]
|
|
|
|
|
|
|
|
for l in GetOption( "staticlib" ).split( "," ):
|
|
|
|
removeIfInList(myenv["LIBS"], l)
|
|
|
|
found = False
|
|
|
|
for d in dirs:
|
|
|
|
f= "%s/lib%s.a" % ( d, l )
|
|
|
|
if os.path.exists( f ):
|
|
|
|
staticlibfiles.append(f)
|
|
|
|
found = True
|
|
|
|
break
|
|
|
|
if not found:
|
2011-09-28 21:49:48 +02:00
|
|
|
raise RuntimeError("can't find a static %s" % l)
|
2010-01-29 20:46:05 +01:00
|
|
|
|
2010-08-10 17:07:41 +02:00
|
|
|
# 'tcmalloc' needs to be the last library linked. Please, add new libraries before this
|
|
|
|
# point.
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option( "heapcheck" ) and not shell:
|
2010-08-10 17:07:41 +02:00
|
|
|
if ( not debugBuild ) and ( not debugLogging ):
|
|
|
|
print( "--heapcheck needs --d or --dd" )
|
|
|
|
Exit( 1 )
|
|
|
|
|
|
|
|
if not conf.CheckCXXHeader( "google/heap-checker.h" ):
|
|
|
|
print( "--heapcheck neads header 'google/heap-checker.h'" )
|
|
|
|
Exit( 1 )
|
|
|
|
|
|
|
|
myCheckLib( "tcmalloc" , True ); # if successful, appedded 'tcmalloc' to myenv[ LIBS ]
|
|
|
|
myenv.Append( CPPDEFINES=[ "HEAP_CHECKING" ] )
|
|
|
|
myenv.Append( CPPFLAGS="-fno-omit-frame-pointer" )
|
|
|
|
|
|
|
|
# FIXME doConfigure() is being called twice, in the case of the shell. So if it is called
|
|
|
|
# with shell==True, it'd be on its second call and it would need to rearrange the libraries'
|
|
|
|
# order. The following removes tcmalloc from the LIB's list and reinserts it at the end.
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option( "heapcheck" ) and shell:
|
2010-08-10 17:07:41 +02:00
|
|
|
removeIfInList( myenv["LIBS"] , "tcmalloc" )
|
|
|
|
myenv.Append( LIBS="tcmalloc" )
|
|
|
|
|
2010-01-29 20:46:05 +01:00
|
|
|
myenv.Append(LINKCOM=" $STATICFILES")
|
|
|
|
myenv.Append(STATICFILES=staticlibfiles)
|
|
|
|
|
2011-03-11 22:10:17 +01:00
|
|
|
if has_option( "tcmalloc" ):
|
|
|
|
myCheckLib( "tcmalloc" , True ); # if successful, appedded 'tcmalloc' to myenv[ LIBS ]
|
|
|
|
|
|
|
|
|
2009-02-01 23:39:07 +01:00
|
|
|
return conf.Finish()
|
|
|
|
|
|
|
|
env = doConfigure( env )
|
2009-01-27 04:19:15 +01:00
|
|
|
|
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
# --- jsh ---
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
def jsToH(target, source, env):
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
outFile = str( target[0] )
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
h = ['#include "bson/stringdata.h"'
|
|
|
|
,'namespace mongo {'
|
|
|
|
,'struct JSFile{ const char* name; const StringData& source; };'
|
|
|
|
,'namespace JSFiles{'
|
|
|
|
]
|
2009-12-10 03:30:09 +01:00
|
|
|
|
2010-08-10 21:15:59 +02:00
|
|
|
def cppEscape(s):
|
|
|
|
s = s.strip()
|
|
|
|
s = s.replace( '\\' , '\\\\' )
|
|
|
|
s = s.replace( '"' , r'\"' )
|
|
|
|
return s
|
|
|
|
|
2009-01-27 04:19:15 +01:00
|
|
|
for s in source:
|
2010-08-10 20:35:02 +02:00
|
|
|
filename = str(s)
|
2010-08-10 21:03:25 +02:00
|
|
|
objname = os.path.split(filename)[1].split('.')[0]
|
2010-08-10 20:35:02 +02:00
|
|
|
stringname = '_jscode_raw_' + objname
|
2010-07-16 21:42:28 +02:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
h.append('const StringData ' + stringname + " = ")
|
2010-07-16 21:42:28 +02:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
for l in open( filename , 'r' ):
|
2010-08-10 21:15:59 +02:00
|
|
|
h.append( '"' + cppEscape(l) + r'\n" ' )
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
h.append(";")
|
|
|
|
h.append('extern const JSFile %s;'%objname) #symbols aren't exported w/o this
|
2010-08-12 02:25:36 +02:00
|
|
|
h.append('const JSFile %s = { "%s" , %s };'%(objname, filename.replace('\\', '/'), stringname))
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
h.append("} // namespace JSFiles")
|
|
|
|
h.append("} // namespace mongo")
|
2010-08-10 21:04:30 +02:00
|
|
|
h.append("")
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2010-08-10 20:35:02 +02:00
|
|
|
text = '\n'.join(h);
|
2009-01-27 04:19:15 +01:00
|
|
|
|
2010-08-04 21:43:43 +02:00
|
|
|
out = open( outFile , 'wb' )
|
2010-08-10 20:35:02 +02:00
|
|
|
out.write( text )
|
2010-07-13 01:02:44 +02:00
|
|
|
out.close()
|
|
|
|
|
2009-01-27 04:19:15 +01:00
|
|
|
return None
|
|
|
|
|
2011-12-25 07:18:55 +01:00
|
|
|
jshBuilder = Builder(action = jsToH )
|
|
|
|
# suffix = '.cpp',
|
|
|
|
# src_suffix = '.js')
|
2009-01-27 04:19:15 +01:00
|
|
|
|
|
|
|
env.Append( BUILDERS={'JSHeader' : jshBuilder})
|
|
|
|
|
|
|
|
|
2009-01-18 21:32:00 +01:00
|
|
|
# --- targets ----
|
2009-01-08 00:05:22 +01:00
|
|
|
|
2011-06-01 02:53:00 +02:00
|
|
|
# profile guided
|
|
|
|
#if windows:
|
|
|
|
# if release:
|
|
|
|
# env.Append( LINKFLAGS="/PGD:test.pgd" )
|
|
|
|
# env.Append( LINKFLAGS="/LTCG:PGINSTRUMENT" )
|
|
|
|
# env.Append( LINKFLAGS="/LTCG:PGOPTIMIZE" )
|
|
|
|
|
2009-01-15 16:08:20 +01:00
|
|
|
testEnv = env.Clone()
|
|
|
|
testEnv.Append( CPPPATH=["../"] )
|
2009-09-18 20:33:21 +02:00
|
|
|
testEnv.Prepend( LIBS=[ "mongotestfiles" ] )
|
2009-07-13 19:44:11 +02:00
|
|
|
testEnv.Prepend( LIBPATH=["."] )
|
2009-01-15 16:08:20 +01:00
|
|
|
|
2009-01-12 21:27:55 +01:00
|
|
|
# ----- TARGETS ------
|
|
|
|
|
2009-12-28 22:43:43 +01:00
|
|
|
def checkErrorCodes():
|
|
|
|
import buildscripts.errorcodes as x
|
|
|
|
if x.checkErrorCodes() == False:
|
2009-12-28 23:06:07 +01:00
|
|
|
print( "next id to use:" + str( x.getNextCode() ) )
|
2009-12-28 22:43:43 +01:00
|
|
|
Exit(-1)
|
|
|
|
|
|
|
|
checkErrorCodes()
|
2009-01-06 00:19:56 +01:00
|
|
|
|
2009-01-12 16:34:12 +01:00
|
|
|
# main db target
|
2010-08-21 18:00:21 +02:00
|
|
|
mongod = env.Program( "mongod" , commonFiles + coreDbFiles + coreServerFiles + serverOnlyFiles + mongodOnlyFiles )
|
2009-03-27 18:45:48 +01:00
|
|
|
Default( mongod )
|
2009-01-12 16:34:12 +01:00
|
|
|
|
|
|
|
# tools
|
2011-12-24 21:33:26 +01:00
|
|
|
allToolFiles = commonFiles + coreDbFiles + coreServerFiles + serverOnlyFiles + [ "src/mongo/client/gridfs.cpp", "src/mongo/tools/tool.cpp" , "src/mongo/tools/stat_util.cpp" ]
|
2011-09-15 16:49:45 +02:00
|
|
|
normalTools = [ "dump" , "restore" , "export" , "import" , "files" , "stat" , "top" , "oplog" ]
|
2010-04-25 05:03:14 +02:00
|
|
|
env.Alias( "tools" , [ add_exe( "mongo" + x ) for x in normalTools ] )
|
2010-02-23 18:21:16 +01:00
|
|
|
for x in normalTools:
|
2011-12-24 21:33:26 +01:00
|
|
|
env.Program( "mongo" + x , allToolFiles + [ "src/mongo/tools/" + x + ".cpp" ] )
|
2009-02-08 16:37:39 +01:00
|
|
|
|
2010-06-09 17:31:30 +02:00
|
|
|
#some special tools
|
2011-12-24 21:33:26 +01:00
|
|
|
env.Program( "bsondump" , allToolFiles + [ "src/mongo/tools/bsondump.cpp" ] )
|
|
|
|
env.Program( "mongobridge" , allToolFiles + [ "src/mongo/tools/bridge.cpp" ] )
|
|
|
|
env.Program( "mongoperf" , allToolFiles + [ "src/mongo/client/examples/mongoperf.cpp" ] )
|
2009-04-02 21:10:52 +02:00
|
|
|
|
2009-02-13 15:22:04 +01:00
|
|
|
# mongos
|
2009-03-11 22:28:49 +01:00
|
|
|
mongos = env.Program( "mongos" , commonFiles + coreDbFiles + coreServerFiles + shardServerFiles )
|
2009-03-02 15:13:20 +01:00
|
|
|
|
2009-01-12 16:34:12 +01:00
|
|
|
# c++ library
|
2011-10-17 22:10:48 +02:00
|
|
|
clientLib = env.Library( "mongoclient" , allClientFiles )
|
|
|
|
clientLibName = str( clientLib[0] )
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option( "sharedclient" ):
|
2010-02-17 20:16:49 +01:00
|
|
|
sharedClientLibName = str( env.SharedLibrary( "mongoclient" , allClientFiles )[0] )
|
2011-12-24 21:33:26 +01:00
|
|
|
env.Library( "mongotestfiles" , commonFiles + coreDbFiles + coreServerFiles + serverOnlyFiles + ["src/mongo/client/gridfs.cpp"])
|
2010-05-24 05:30:52 +02:00
|
|
|
env.Library( "mongoshellfiles" , allClientFiles + coreServerFiles )
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2011-10-17 22:10:48 +02:00
|
|
|
clientEnv = env.Clone();
|
|
|
|
clientEnv.Append( CPPPATH=["../"] )
|
|
|
|
clientEnv.Prepend( LIBS=[ clientLib ] )
|
|
|
|
clientEnv.Prepend( LIBPATH=["."] )
|
|
|
|
clientEnv["CPPDEFINES"].remove( "MONGO_EXPOSE_MACROS" )
|
|
|
|
l = clientEnv[ "LIBS" ]
|
|
|
|
|
2009-01-29 15:19:51 +01:00
|
|
|
clientTests = []
|
|
|
|
|
2009-01-13 15:15:47 +01:00
|
|
|
# examples
|
2011-12-24 21:33:26 +01:00
|
|
|
clientTests += [ clientEnv.Program( "firstExample" , [ "src/mongo/client/examples/first.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "rsExample" , [ "src/mongo/client/examples/rs.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "secondExample" , [ "src/mongo/client/examples/second.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "whereExample" , [ "src/mongo/client/examples/whereExample.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "authTest" , [ "src/mongo/client/examples/authTest.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "httpClientTest" , [ "src/mongo/client/examples/httpClientTest.cpp" ] ) ]
|
|
|
|
clientTests += [ clientEnv.Program( "bsondemo" , [ "src/mongo/bson/bsondemo/bsondemo.cpp" ] ) ]
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2011-05-30 06:30:10 +02:00
|
|
|
# dbtests test binary
|
2011-12-24 21:33:26 +01:00
|
|
|
test = testEnv.Program( "test" , Glob( "src/mongo/dbtests/*.cpp" ) )
|
2010-04-25 05:03:14 +02:00
|
|
|
if windows:
|
|
|
|
testEnv.Alias( "test" , "test.exe" )
|
2011-12-24 21:33:26 +01:00
|
|
|
perftest = testEnv.Program( "perftest", [ "src/mongo/dbtests/framework.cpp" , "src/mongo/dbtests/perf/perftest.cpp" ] )
|
|
|
|
clientTests += [ clientEnv.Program( "clientTest" , [ "src/mongo/client/examples/clientTest.cpp" ] ) ]
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2009-02-13 22:18:57 +01:00
|
|
|
# --- sniffer ---
|
2009-07-22 19:56:51 +02:00
|
|
|
mongosniff_built = False
|
2009-03-12 14:30:14 +01:00
|
|
|
if darwin or clientEnv["_HAVEPCAP"]:
|
2009-07-22 19:56:51 +02:00
|
|
|
mongosniff_built = True
|
2011-03-07 22:28:10 +01:00
|
|
|
sniffEnv = env.Clone()
|
2010-09-07 20:41:46 +02:00
|
|
|
sniffEnv.Append( CPPDEFINES="MONGO_EXPOSE_MACROS" )
|
2011-03-07 22:28:10 +01:00
|
|
|
|
2009-08-07 23:02:47 +02:00
|
|
|
if not windows:
|
|
|
|
sniffEnv.Append( LIBS=[ "pcap" ] )
|
|
|
|
else:
|
|
|
|
sniffEnv.Append( LIBS=[ "wpcap" ] )
|
2011-03-07 22:28:10 +01:00
|
|
|
|
|
|
|
sniffEnv.Prepend( LIBPATH=["."] )
|
2011-11-01 17:45:34 +01:00
|
|
|
sniffEnv.Prepend( LIBS=[ "mongotestfiles" ] )
|
2011-03-07 22:28:10 +01:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
sniffEnv.Program( "mongosniff" , "src/mongo/tools/sniffer.cpp" )
|
2009-02-13 22:18:57 +01:00
|
|
|
|
2009-01-27 17:27:34 +01:00
|
|
|
# --- shell ---
|
|
|
|
|
2011-11-20 04:49:37 +01:00
|
|
|
# note, if you add a file here, you need to add it in scripting/engine.cpp and shell/msvc/createCPPfromJavaScriptFiles.js as well
|
2011-12-25 07:18:55 +01:00
|
|
|
env.Depends( "src/mongo/shell/dbshell.cpp" ,
|
|
|
|
env.JSHeader( "src/mongo/shell/mongo.cpp" ,
|
|
|
|
Glob( "src/mongo/shell/utils*.js" ) +
|
|
|
|
[ "src/mongo/shell/db.js","src/mongo/shell/mongo.js","src/mongo/shell/mr.js","src/mongo/shell/query.js","src/mongo/shell/collection.js"] ) )
|
2009-05-02 03:25:26 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
env.JSHeader( "src/mongo/shell/mongo-server.cpp" , [ "src/mongo/shell/servers.js"] )
|
2009-12-18 22:53:44 +01:00
|
|
|
|
2009-01-27 17:27:34 +01:00
|
|
|
shellEnv = env.Clone();
|
2009-02-01 23:39:07 +01:00
|
|
|
|
2009-02-05 18:42:35 +01:00
|
|
|
if release and ( ( darwin and force64 ) or linux64 ):
|
2009-02-01 23:39:07 +01:00
|
|
|
shellEnv["LINKFLAGS"] = env["LINKFLAGS_CLEAN"]
|
|
|
|
shellEnv["LIBS"] = env["LIBS_CLEAN"]
|
2009-02-05 18:42:35 +01:00
|
|
|
shellEnv["SLIBS"] = ""
|
2009-02-01 23:39:07 +01:00
|
|
|
|
2009-02-09 20:30:45 +01:00
|
|
|
if noshell:
|
|
|
|
print( "not building shell" )
|
2009-02-12 03:05:28 +01:00
|
|
|
elif not onlyServer:
|
2009-01-27 17:27:34 +01:00
|
|
|
l = shellEnv["LIBS"]
|
2009-02-02 00:41:25 +01:00
|
|
|
|
2009-02-12 03:05:28 +01:00
|
|
|
if windows:
|
|
|
|
shellEnv.Append( LIBS=["winmm.lib"] )
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
coreShellFiles = [ "src/mongo/shell/dbshell.cpp" , "src/mongo/shell/shell_utils.cpp" , "src/mongo/shell/mongo-server.cpp" ]
|
2009-05-08 15:15:56 +02:00
|
|
|
|
2011-12-24 21:33:26 +01:00
|
|
|
coreShellFiles.append( "src/third_party/linenoise/linenoise.cpp" )
|
2009-02-02 00:26:18 +01:00
|
|
|
|
2011-03-24 21:33:20 +01:00
|
|
|
shellEnv.Prepend( LIBPATH=[ "." ] )
|
|
|
|
|
2011-08-18 16:49:50 +02:00
|
|
|
shellEnv = doConfigure( shellEnv , shell=True )
|
2009-02-02 00:26:18 +01:00
|
|
|
|
2011-03-24 21:33:20 +01:00
|
|
|
shellEnv.Prepend( LIBS=[ "mongoshellfiles"] )
|
2011-11-15 00:05:08 +01:00
|
|
|
|
|
|
|
shellFilesToUse = coreShellFiles
|
|
|
|
if "pcre" in moduleFiles:
|
|
|
|
shellFilesToUse += moduleFiles["pcre"]
|
|
|
|
|
|
|
|
mongo = shellEnv.Program( "mongo" , shellFilesToUse )
|
2009-08-14 04:44:55 +02:00
|
|
|
|
2009-01-27 17:27:34 +01:00
|
|
|
|
2009-01-17 15:22:55 +01:00
|
|
|
# ---- RUNNING TESTS ----
|
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv = testEnv.Clone()
|
|
|
|
smokeEnv['ENV']['PATH']=os.environ['PATH']
|
|
|
|
smokeEnv.Alias( "dummySmokeSideEffect", [], [] )
|
2009-03-13 19:32:38 +01:00
|
|
|
|
2010-06-09 19:10:59 +02:00
|
|
|
smokeFlags = []
|
|
|
|
|
2010-06-11 21:40:02 +02:00
|
|
|
# Ugh. Frobbing the smokeFlags must precede using them to construct
|
|
|
|
# actions, I think.
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option( 'smokedbprefix'):
|
2010-06-09 19:10:59 +02:00
|
|
|
smokeFlags += ['--smoke-db-prefix', GetOption( 'smokedbprefix')]
|
2010-06-11 21:40:02 +02:00
|
|
|
|
|
|
|
if 'startMongodSmallOplog' in COMMAND_LINE_TARGETS:
|
|
|
|
smokeFlags += ["--small-oplog"]
|
|
|
|
|
2010-06-09 19:10:59 +02:00
|
|
|
def addTest(name, deps, actions):
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( name, deps, actions )
|
|
|
|
smokeEnv.AlwaysBuild( name )
|
2009-03-13 15:12:52 +01:00
|
|
|
# Prevent smoke tests from running in parallel
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.SideEffect( "dummySmokeSideEffect", name )
|
2009-03-13 15:12:52 +01:00
|
|
|
|
2010-06-09 19:10:59 +02:00
|
|
|
def addSmoketest( name, deps ):
|
2010-08-26 22:01:24 +02:00
|
|
|
# Convert from smoke to test, smokeJs to js, and foo to foo
|
|
|
|
target = name
|
|
|
|
if name.startswith("smoke"):
|
|
|
|
if name == "smoke":
|
|
|
|
target = "test"
|
|
|
|
else:
|
|
|
|
target = name[5].lower() + name[6:]
|
|
|
|
|
|
|
|
addTest(name, deps, [ "python buildscripts/smoke.py " + " ".join(smokeFlags) + ' ' + target ])
|
2010-06-09 19:10:59 +02:00
|
|
|
|
|
|
|
addSmoketest( "smoke", [ add_exe( "test" ) ] )
|
|
|
|
addSmoketest( "smokePerf", [ "perftest" ] )
|
|
|
|
addSmoketest( "smokeClient" , clientTests )
|
|
|
|
addSmoketest( "mongosTest" , [ mongos[0].abspath ] )
|
2009-05-11 19:40:55 +02:00
|
|
|
|
2009-03-13 15:12:52 +01:00
|
|
|
# These tests require the mongo shell
|
2009-03-26 19:55:00 +01:00
|
|
|
if not onlyServer and not noshell:
|
2010-06-09 19:10:59 +02:00
|
|
|
addSmoketest( "smokeJs", [add_exe("mongo")] )
|
|
|
|
addSmoketest( "smokeClone", [ "mongo", "mongod" ] )
|
|
|
|
addSmoketest( "smokeRepl", [ "mongo", "mongod", "mongobridge" ] )
|
2010-07-29 19:42:12 +02:00
|
|
|
addSmoketest( "smokeReplSets", [ "mongo", "mongod", "mongobridge" ] )
|
2011-05-09 21:45:13 +02:00
|
|
|
addSmoketest( "smokeDur", [ add_exe( "mongo" ) , add_exe( "mongod" ) , add_exe('mongorestore') ] )
|
2010-11-02 02:22:09 +01:00
|
|
|
addSmoketest( "smokeDisk", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe( "mongodump" ), add_exe( "mongorestore" ) ] )
|
2010-06-09 19:10:59 +02:00
|
|
|
addSmoketest( "smokeAuth", [ add_exe( "mongo" ), add_exe( "mongod" ) ] )
|
|
|
|
addSmoketest( "smokeParallel", [ add_exe( "mongo" ), add_exe( "mongod" ) ] )
|
|
|
|
addSmoketest( "smokeSharding", [ "mongo", "mongod", "mongos" ] )
|
|
|
|
addSmoketest( "smokeJsPerf", [ "mongo" ] )
|
2010-12-20 20:28:46 +01:00
|
|
|
addSmoketest( "smokeJsSlowNightly", [add_exe("mongo")])
|
|
|
|
addSmoketest( "smokeJsSlowWeekly", [add_exe("mongo")])
|
2010-06-09 19:10:59 +02:00
|
|
|
addSmoketest( "smokeQuota", [ "mongo" ] )
|
2010-12-09 23:08:40 +01:00
|
|
|
addSmoketest( "smokeTool", [ add_exe( "mongo" ), add_exe("mongod"), "tools" ] )
|
2010-06-09 19:10:59 +02:00
|
|
|
|
|
|
|
# Note: although the test running logic has been moved to
|
|
|
|
# buildscripts/smoke.py, the interface to running the tests has been
|
|
|
|
# something like 'scons startMongod <suite>'; startMongod is now a
|
|
|
|
# no-op, and should go away eventually.
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "startMongod", [add_exe("mongod")]);
|
|
|
|
smokeEnv.AlwaysBuild( "startMongod" );
|
|
|
|
smokeEnv.SideEffect( "dummySmokeSideEffect", "startMongod" )
|
2009-03-13 15:12:52 +01:00
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "startMongodSmallOplog", [add_exe("mongod")], [] );
|
|
|
|
smokeEnv.AlwaysBuild( "startMongodSmallOplog" );
|
|
|
|
smokeEnv.SideEffect( "dummySmokeSideEffect", "startMongodSmallOplog" )
|
2010-03-16 21:04:35 +01:00
|
|
|
|
2009-03-13 15:12:52 +01:00
|
|
|
def addMongodReqTargets( env, target, source ):
|
2010-05-26 18:11:21 +02:00
|
|
|
mongodReqTargets = [ "smokeClient", "smokeJs" ]
|
2009-03-13 15:12:52 +01:00
|
|
|
for target in mongodReqTargets:
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Depends( target, "startMongod" )
|
|
|
|
smokeEnv.Depends( "smokeAll", target )
|
2009-03-13 15:12:52 +01:00
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "addMongodReqTargets", [], [addMongodReqTargets] )
|
|
|
|
smokeEnv.AlwaysBuild( "addMongodReqTargets" )
|
2009-03-13 15:12:52 +01:00
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "smokeAll", [ "smoke", "mongosTest", "smokeClone", "smokeRepl", "addMongodReqTargets", "smokeDisk", "smokeAuth", "smokeSharding", "smokeTool" ] )
|
|
|
|
smokeEnv.AlwaysBuild( "smokeAll" )
|
2009-03-13 15:12:52 +01:00
|
|
|
|
2009-04-02 22:56:39 +02:00
|
|
|
def addMongodReqNoJsTargets( env, target, source ):
|
|
|
|
mongodReqTargets = [ "smokeClient" ]
|
|
|
|
for target in mongodReqTargets:
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Depends( target, "startMongod" )
|
|
|
|
smokeEnv.Depends( "smokeAllNoJs", target )
|
2009-04-02 22:56:39 +02:00
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "addMongodReqNoJsTargets", [], [addMongodReqNoJsTargets] )
|
|
|
|
smokeEnv.AlwaysBuild( "addMongodReqNoJsTargets" )
|
2009-04-02 22:56:39 +02:00
|
|
|
|
2010-06-17 22:43:14 +02:00
|
|
|
smokeEnv.Alias( "smokeAllNoJs", [ "smoke", "mongosTest", "addMongodReqNoJsTargets" ] )
|
|
|
|
smokeEnv.AlwaysBuild( "smokeAllNoJs" )
|
2009-04-02 22:56:39 +02:00
|
|
|
|
2009-08-26 22:48:10 +02:00
|
|
|
def run_shell_tests(env, target, source):
|
2009-09-25 18:17:59 +02:00
|
|
|
from buildscripts import test_shell
|
2009-08-26 22:48:10 +02:00
|
|
|
test_shell.mongo_path = windows and "mongo.exe" or "mongo"
|
|
|
|
test_shell.run_tests()
|
|
|
|
|
|
|
|
env.Alias("test_shell", [], [run_shell_tests])
|
|
|
|
env.AlwaysBuild("test_shell")
|
|
|
|
|
2010-07-14 19:50:39 +02:00
|
|
|
# ---- Docs ----
|
|
|
|
def build_docs(env, target, source):
|
|
|
|
from buildscripts import docs
|
|
|
|
docs.main()
|
|
|
|
|
|
|
|
env.Alias("docs", [], [build_docs])
|
|
|
|
env.AlwaysBuild("docs")
|
|
|
|
|
2010-12-29 08:04:19 +01:00
|
|
|
# ---- astyle ----
|
|
|
|
|
|
|
|
def doStyling( env , target , source ):
|
2011-01-04 07:52:48 +01:00
|
|
|
|
|
|
|
res = utils.execsys( "astyle --version" )
|
2011-01-04 07:56:07 +01:00
|
|
|
res = " ".join(res)
|
|
|
|
if res.count( "2." ) == 0:
|
|
|
|
print( "astyle 2.x needed, found:" + res )
|
2011-01-04 07:52:48 +01:00
|
|
|
Exit(-1)
|
|
|
|
|
2011-01-04 05:40:03 +01:00
|
|
|
files = utils.getAllSourceFiles()
|
|
|
|
files = filter( lambda x: not x.endswith( ".c" ) , files )
|
2011-01-26 00:22:24 +01:00
|
|
|
|
2011-01-04 05:40:03 +01:00
|
|
|
cmd = "astyle --options=mongo_astyle " + " ".join( files )
|
2010-12-29 08:04:19 +01:00
|
|
|
res = utils.execsys( cmd )
|
|
|
|
print( res[0] )
|
|
|
|
print( res[1] )
|
|
|
|
|
|
|
|
|
2011-01-04 05:40:03 +01:00
|
|
|
env.Alias( "style" , [] , [ doStyling ] )
|
|
|
|
env.AlwaysBuild( "style" )
|
2010-12-29 08:04:19 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
2009-01-12 21:27:55 +01:00
|
|
|
# ---- INSTALL -------
|
|
|
|
|
2009-08-14 16:55:52 +02:00
|
|
|
def getSystemInstallName():
|
|
|
|
n = platform + "-" + processor
|
|
|
|
if static:
|
|
|
|
n += "-static"
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option("nostrip"):
|
2010-07-28 06:55:58 +02:00
|
|
|
n += "-debugsymbols"
|
2009-08-14 20:29:59 +02:00
|
|
|
if nix and os.uname()[2].startswith( "8." ):
|
2009-08-14 16:55:52 +02:00
|
|
|
n += "-tiger"
|
2010-05-26 22:58:54 +02:00
|
|
|
|
|
|
|
if len(moduleNames) > 0:
|
|
|
|
n += "-" + "-".join( moduleNames )
|
2009-08-14 16:55:52 +02:00
|
|
|
|
2009-11-20 19:47:22 +01:00
|
|
|
try:
|
2010-12-21 17:54:46 +01:00
|
|
|
findSettingsSetup()
|
2009-11-20 19:47:22 +01:00
|
|
|
import settings
|
|
|
|
if "distmod" in dir( settings ):
|
|
|
|
n = n + "-" + str( settings.distmod )
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
2010-01-29 16:43:02 +01:00
|
|
|
|
|
|
|
dn = GetOption( "distmod" )
|
|
|
|
if dn and len(dn) > 0:
|
|
|
|
n = n + "-" + dn
|
|
|
|
|
2009-11-20 19:47:22 +01:00
|
|
|
return n
|
2009-08-14 16:55:52 +02:00
|
|
|
|
2009-05-29 04:35:26 +02:00
|
|
|
def getCodeVersion():
|
2011-12-24 21:33:26 +01:00
|
|
|
fullSource = open( "src/mongo/util/version.cpp" , "r" ).read()
|
2009-05-29 04:35:26 +02:00
|
|
|
allMatches = re.findall( r"versionString.. = \"(.*?)\"" , fullSource );
|
|
|
|
if len(allMatches) != 1:
|
|
|
|
print( "can't find version # in code" )
|
|
|
|
return None
|
|
|
|
return allMatches[0]
|
|
|
|
|
2010-05-28 17:49:07 +02:00
|
|
|
if getCodeVersion() == None:
|
|
|
|
Exit(-1)
|
|
|
|
|
2009-05-29 04:35:26 +02:00
|
|
|
def getDistName( sofar ):
|
|
|
|
global distName
|
2009-05-29 16:21:43 +02:00
|
|
|
global dontReplacePackage
|
|
|
|
|
2009-05-29 04:35:26 +02:00
|
|
|
if distName is not None:
|
|
|
|
return distName
|
|
|
|
|
|
|
|
if str( COMMAND_LINE_TARGETS[0] ) == "s3dist":
|
|
|
|
version = getCodeVersion()
|
2009-08-28 08:09:14 +02:00
|
|
|
if not version.endswith( "+" ) and not version.endswith("-"):
|
2009-05-29 16:21:43 +02:00
|
|
|
print( "got real code version, doing release build for: " + version )
|
|
|
|
dontReplacePackage = True
|
|
|
|
distName = version
|
|
|
|
return version
|
2009-05-29 04:35:26 +02:00
|
|
|
|
2009-12-05 17:54:36 +01:00
|
|
|
|
2010-07-19 21:37:19 +02:00
|
|
|
return utils.getGitBranchString( "" , "-" ) + today.strftime( "%Y-%m-%d" )
|
2009-12-05 17:54:36 +01:00
|
|
|
|
2009-05-29 04:35:26 +02:00
|
|
|
|
2009-02-06 16:48:39 +01:00
|
|
|
if distBuild:
|
2010-07-31 00:56:05 +02:00
|
|
|
if isDriverBuild():
|
|
|
|
installDir = GetOption( "prefix" )
|
|
|
|
else:
|
|
|
|
from datetime import date
|
|
|
|
today = date.today()
|
|
|
|
installDir = "mongodb-" + getSystemInstallName() + "-"
|
|
|
|
installDir += getDistName( installDir )
|
|
|
|
print "going to make dist: " + installDir
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2009-02-08 16:37:39 +01:00
|
|
|
# binaries
|
|
|
|
|
2009-07-07 16:44:43 +02:00
|
|
|
def checkGlibc(target,source,env):
|
|
|
|
import subprocess
|
|
|
|
stringProcess = subprocess.Popen( [ "strings" , str( target[0] ) ] , stdout=subprocess.PIPE )
|
|
|
|
stringResult = stringProcess.communicate()[0]
|
|
|
|
if stringResult.count( "GLIBC_2.4" ) > 0:
|
2009-12-30 21:22:13 +01:00
|
|
|
print( "************* " + str( target[0] ) + " has GLIBC_2.4 dependencies!" )
|
2009-07-07 16:44:43 +02:00
|
|
|
Exit(-3)
|
|
|
|
|
2009-05-16 13:17:12 +02:00
|
|
|
allBinaries = []
|
|
|
|
|
2009-02-10 16:48:52 +01:00
|
|
|
def installBinary( e , name ):
|
2010-05-24 05:30:52 +02:00
|
|
|
if not installSetup.binaries:
|
|
|
|
return
|
|
|
|
|
2009-05-16 13:17:12 +02:00
|
|
|
global allBinaries
|
2009-05-29 19:23:25 +02:00
|
|
|
|
2009-02-10 16:48:52 +01:00
|
|
|
if windows:
|
2009-11-19 17:20:03 +01:00
|
|
|
e.Alias( name , name + ".exe" )
|
2009-02-10 16:48:52 +01:00
|
|
|
name += ".exe"
|
2009-05-29 19:23:25 +02:00
|
|
|
|
|
|
|
inst = e.Install( installDir + "/bin" , name )
|
2009-07-22 19:42:21 +02:00
|
|
|
|
2009-07-07 16:44:43 +02:00
|
|
|
fullInstallName = installDir + "/bin/" + name
|
2009-05-29 19:23:25 +02:00
|
|
|
|
2009-05-16 13:17:12 +02:00
|
|
|
allBinaries += [ name ]
|
2010-12-21 07:23:31 +01:00
|
|
|
if (solaris or linux) and (not has_option("nostrip")):
|
2009-07-07 16:44:43 +02:00
|
|
|
e.AddPostAction( inst, e.Action( 'strip ' + fullInstallName ) )
|
2009-07-22 19:42:21 +02:00
|
|
|
|
2011-10-27 20:15:17 +02:00
|
|
|
if not has_option( "no-glibc-check" ) and linux and len( COMMAND_LINE_TARGETS ) == 1 and str( COMMAND_LINE_TARGETS[0] ) == "s3dist":
|
2009-07-07 16:44:43 +02:00
|
|
|
e.AddPostAction( inst , checkGlibc )
|
2009-02-08 16:37:39 +01:00
|
|
|
|
2009-08-05 21:38:58 +02:00
|
|
|
if nix:
|
|
|
|
e.AddPostAction( inst , e.Action( 'chmod 755 ' + fullInstallName ) )
|
|
|
|
|
2010-02-23 18:21:16 +01:00
|
|
|
for x in normalTools:
|
|
|
|
installBinary( env , "mongo" + x )
|
2010-08-03 21:18:47 +02:00
|
|
|
installBinary( env , "bsondump" )
|
2011-11-07 21:36:45 +01:00
|
|
|
installBinary( env , "mongoperf" )
|
2009-02-10 16:48:52 +01:00
|
|
|
|
2009-07-22 19:56:51 +02:00
|
|
|
if mongosniff_built:
|
|
|
|
installBinary(env, "mongosniff")
|
2009-07-22 19:42:57 +02:00
|
|
|
|
2009-02-10 16:48:52 +01:00
|
|
|
installBinary( env , "mongod" )
|
2009-04-22 18:58:39 +02:00
|
|
|
installBinary( env , "mongos" )
|
2009-02-08 16:37:39 +01:00
|
|
|
|
2009-02-09 20:30:45 +01:00
|
|
|
if not noshell:
|
2009-02-10 16:48:52 +01:00
|
|
|
installBinary( env , "mongo" )
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2009-05-16 13:17:12 +02:00
|
|
|
env.Alias( "all" , allBinaries )
|
2010-04-26 06:05:02 +02:00
|
|
|
env.Alias( "core" , [ add_exe( "mongo" ) , add_exe( "mongod" ) , add_exe( "mongos" ) ] )
|
2009-05-16 13:17:12 +02:00
|
|
|
|
2009-01-12 21:27:55 +01:00
|
|
|
#headers
|
2010-05-24 05:30:52 +02:00
|
|
|
if installSetup.headers:
|
2011-12-25 16:41:34 +01:00
|
|
|
for id in [ "mongo/" , "mongo/util/", "mongo/util/net/", "mongo/util/mongoutils/", "mongo/util/concurrency/", "mongo/db/" , "mongo/db/stats/" , "mongo/db/repl/" , "mongo/db/ops/" , "mongo/client/" , "mongo/bson/", "mongo/bson/util/" , "mongo/s/" , "mongo/scripting/" ]:
|
|
|
|
env.Install( installDir + "/" + installSetup.headerRoot + "/" + id , Glob( "src/" + id + "*.h" ) )
|
|
|
|
env.Install( installDir + "/" + installSetup.headerRoot + "/" + id , Glob( "src/" + id + "*.hpp" ) )
|
2010-05-24 05:30:52 +02:00
|
|
|
|
|
|
|
if installSetup.clientSrc:
|
|
|
|
for x in allClientFiles:
|
|
|
|
x = str(x)
|
|
|
|
env.Install( installDir + "/mongo/" + x.rpartition( "/" )[0] , x )
|
2009-01-12 21:27:55 +01:00
|
|
|
|
|
|
|
#lib
|
2010-07-26 20:29:30 +02:00
|
|
|
if installSetup.libraries:
|
2010-05-24 05:30:52 +02:00
|
|
|
env.Install( installDir + "/" + nixLibPrefix, clientLibName )
|
2010-12-21 07:23:31 +01:00
|
|
|
if has_option( "sharedclient" ):
|
2010-06-25 03:40:13 +02:00
|
|
|
env.Install( installDir + "/" + nixLibPrefix, sharedClientLibName )
|
|
|
|
|
2009-01-12 21:27:55 +01:00
|
|
|
|
2009-02-11 12:39:00 +01:00
|
|
|
#textfiles
|
2010-05-24 05:30:52 +02:00
|
|
|
if installSetup.bannerDir:
|
|
|
|
for x in os.listdir( installSetup.bannerDir ):
|
|
|
|
full = installSetup.bannerDir + "/" + x
|
|
|
|
if os.path.isdir( full ):
|
|
|
|
continue
|
|
|
|
if x.find( "~" ) >= 0:
|
|
|
|
continue
|
|
|
|
env.Install( installDir , full )
|
2009-02-11 12:39:00 +01:00
|
|
|
|
2010-07-23 18:52:59 +02:00
|
|
|
if installSetup.clientTestsDir:
|
|
|
|
for x in os.listdir( installSetup.clientTestsDir ):
|
|
|
|
full = installSetup.clientTestsDir + "/" + x
|
|
|
|
if os.path.isdir( full ):
|
|
|
|
continue
|
|
|
|
if x.find( "~" ) >= 0:
|
|
|
|
continue
|
|
|
|
env.Install( installDir + '/' + installSetup.clientTestsDir , full )
|
|
|
|
|
2009-01-12 21:27:55 +01:00
|
|
|
#final alias
|
|
|
|
env.Alias( "install" , installDir )
|
|
|
|
|
2009-11-19 17:20:03 +01:00
|
|
|
# aliases
|
2010-12-21 07:23:31 +01:00
|
|
|
env.Alias( "mongoclient" , has_option( "sharedclient" ) and sharedClientLibName or clientLibName )
|
2009-11-19 17:20:03 +01:00
|
|
|
|
|
|
|
|
2009-01-17 15:22:55 +01:00
|
|
|
# ---- CONVENIENCE ----
|
|
|
|
|
|
|
|
def tabs( env, target, source ):
|
|
|
|
from subprocess import Popen, PIPE
|
|
|
|
from re import search, match
|
|
|
|
diff = Popen( [ "git", "diff", "-U0", "origin", "master" ], stdout=PIPE ).communicate()[ 0 ]
|
|
|
|
sourceFile = False
|
|
|
|
for line in diff.split( "\n" ):
|
|
|
|
if match( "diff --git", line ):
|
2009-01-18 16:23:57 +01:00
|
|
|
sourceFile = not not search( "\.(h|hpp|c|cpp)\s*$", line )
|
2009-01-17 16:33:43 +01:00
|
|
|
if sourceFile and match( "\+ *\t", line ):
|
2009-01-17 15:22:55 +01:00
|
|
|
return True
|
|
|
|
return False
|
|
|
|
env.Alias( "checkSource", [], [ tabs ] )
|
|
|
|
env.AlwaysBuild( "checkSource" )
|
|
|
|
|
|
|
|
def gitPush( env, target, source ):
|
|
|
|
import subprocess
|
|
|
|
return subprocess.call( [ "git", "push" ] )
|
2009-01-26 22:29:19 +01:00
|
|
|
env.Alias( "push", [ ".", "smoke", "checkSource" ], gitPush )
|
2009-01-17 15:22:55 +01:00
|
|
|
env.AlwaysBuild( "push" )
|
2009-01-27 19:08:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
# ---- deploying ---
|
|
|
|
|
2009-02-11 03:37:18 +01:00
|
|
|
def s3push( localName , remoteName=None , remotePrefix=None , fixName=True , platformDir=True ):
|
|
|
|
|
|
|
|
if remotePrefix is None:
|
|
|
|
if distName is None:
|
2010-07-19 21:37:19 +02:00
|
|
|
remotePrefix = utils.getGitBranchString( "-" ) + "-latest"
|
2009-02-11 03:37:18 +01:00
|
|
|
else:
|
|
|
|
remotePrefix = "-" + distName
|
|
|
|
|
2010-12-21 17:54:46 +01:00
|
|
|
findSettingsSetup()
|
2009-01-27 19:08:44 +01:00
|
|
|
|
|
|
|
import simples3
|
|
|
|
import settings
|
|
|
|
|
2009-02-02 15:54:11 +01:00
|
|
|
s = simples3.S3Bucket( settings.bucket , settings.id , settings.key )
|
2009-01-27 19:08:44 +01:00
|
|
|
|
|
|
|
if remoteName is None:
|
|
|
|
remoteName = localName
|
2009-04-22 17:12:13 +02:00
|
|
|
|
2009-02-02 04:11:26 +01:00
|
|
|
if fixName:
|
2009-02-06 16:48:39 +01:00
|
|
|
(root,dot,suffix) = localName.rpartition( "." )
|
2009-08-14 16:55:52 +02:00
|
|
|
name = remoteName + "-" + getSystemInstallName()
|
2009-07-07 17:12:39 +02:00
|
|
|
name += remotePrefix
|
2009-02-06 16:48:39 +01:00
|
|
|
if dot == "." :
|
|
|
|
name += "." + suffix
|
2009-02-02 04:11:26 +01:00
|
|
|
name = name.lower()
|
|
|
|
else:
|
|
|
|
name = remoteName
|
2010-07-31 00:56:05 +02:00
|
|
|
|
|
|
|
if isDriverBuild():
|
|
|
|
name = "cxx-driver/" + name
|
|
|
|
elif platformDir:
|
2009-02-06 16:48:39 +01:00
|
|
|
name = platform + "/" + name
|
|
|
|
|
2009-02-11 03:37:18 +01:00
|
|
|
print( "uploading " + localName + " to http://s3.amazonaws.com/" + s.name + "/" + name )
|
2009-05-29 16:21:43 +02:00
|
|
|
if dontReplacePackage:
|
|
|
|
for ( key , modify , etag , size ) in s.listdir( prefix=name ):
|
|
|
|
print( "error: already a file with that name, not uploading" )
|
|
|
|
Exit(2)
|
2009-02-10 16:54:43 +01:00
|
|
|
s.put( name , open( localName , "rb" ).read() , acl="public-read" );
|
2009-02-11 03:37:18 +01:00
|
|
|
print( " done uploading!" )
|
2009-01-27 19:08:44 +01:00
|
|
|
|
|
|
|
def s3shellpush( env , target , source ):
|
|
|
|
s3push( "mongo" , "mongo-shell" )
|
|
|
|
|
|
|
|
env.Alias( "s3shell" , [ "mongo" ] , [ s3shellpush ] )
|
|
|
|
env.AlwaysBuild( "s3shell" )
|
2009-02-02 00:27:04 +01:00
|
|
|
|
|
|
|
def s3dist( env , target , source ):
|
2009-02-11 16:53:51 +01:00
|
|
|
s3push( distFile , "mongodb" )
|
2009-02-02 01:11:45 +01:00
|
|
|
|
|
|
|
env.Append( TARFLAGS=" -z " )
|
2009-02-02 00:27:04 +01:00
|
|
|
|
2010-05-05 16:56:44 +02:00
|
|
|
if installDir[-1] != "/":
|
|
|
|
if windows:
|
|
|
|
distFile = installDir + ".zip"
|
|
|
|
env.Zip( distFile , installDir )
|
|
|
|
else:
|
|
|
|
distFile = installDir + ".tgz"
|
|
|
|
env.Tar( distFile , installDir )
|
|
|
|
|
|
|
|
env.Alias( "dist" , distFile )
|
|
|
|
env.Alias( "s3dist" , [ "install" , distFile ] , [ s3dist ] )
|
|
|
|
env.AlwaysBuild( "s3dist" )
|
2009-02-02 00:27:04 +01:00
|
|
|
|
2010-07-23 23:20:53 +02:00
|
|
|
|
|
|
|
# client dist
|
|
|
|
def build_and_test_client(env, target, source):
|
|
|
|
from subprocess import call
|
|
|
|
|
2010-07-28 16:57:31 +02:00
|
|
|
if GetOption("extrapath") is not None:
|
2010-07-28 20:02:26 +02:00
|
|
|
scons_command = ["scons", "--extrapath=" + GetOption("extrapath")]
|
2010-07-28 16:57:31 +02:00
|
|
|
else:
|
2010-07-28 20:02:26 +02:00
|
|
|
scons_command = ["scons"]
|
|
|
|
|
|
|
|
call(scons_command + ["libmongoclient.a", "clientTests"], cwd=installDir)
|
|
|
|
|
2010-07-23 23:32:23 +02:00
|
|
|
return bool(call(["python", "buildscripts/smoke.py",
|
2010-08-27 16:44:23 +02:00
|
|
|
"--test-path", installDir, "client"]))
|
2010-07-23 23:20:53 +02:00
|
|
|
env.Alias("clientBuild", [mongod, installDir], [build_and_test_client])
|
|
|
|
env.AlwaysBuild("clientBuild")
|
|
|
|
|
2009-04-22 17:12:13 +02:00
|
|
|
def clean_old_dist_builds(env, target, source):
|
|
|
|
prefix = "mongodb-%s-%s" % (platform, processor)
|
|
|
|
filenames = sorted(os.listdir("."))
|
|
|
|
filenames = [x for x in filenames if x.startswith(prefix)]
|
|
|
|
to_keep = [x for x in filenames if x.endswith(".tgz") or x.endswith(".zip")][-2:]
|
|
|
|
for filename in [x for x in filenames if x not in to_keep]:
|
2009-04-22 17:15:22 +02:00
|
|
|
print "removing %s" % filename
|
2009-04-22 17:12:13 +02:00
|
|
|
try:
|
|
|
|
shutil.rmtree(filename)
|
|
|
|
except:
|
|
|
|
os.remove(filename)
|
|
|
|
|
|
|
|
env.Alias("dist_clean", [], [clean_old_dist_builds])
|
|
|
|
env.AlwaysBuild("dist_clean")
|
2010-02-02 18:36:58 +01:00
|
|
|
|
|
|
|
# --- an uninstall target ---
|
|
|
|
if len(COMMAND_LINE_TARGETS) > 0 and 'uninstall' in COMMAND_LINE_TARGETS:
|
|
|
|
SetOption("clean", 1)
|
|
|
|
# By inspection, changing COMMAND_LINE_TARGETS here doesn't do
|
|
|
|
# what we want, but changing BUILD_TARGETS does.
|
|
|
|
BUILD_TARGETS.remove("uninstall")
|
|
|
|
BUILD_TARGETS.append("install")
|