opts.Add('EXTRA_DEFINES', 'Additional preprocessor defines', '')
opts.Add('EXTRA_LIBS', 'Additional libraries to link against', '')
opts.Add(SCons.Options.BoolOption('final','Enable optimization',0))
+ opts.Add(SCons.Options.BoolOption('debug','Enable debug symbols in binaries',0))
+ opts.Add(SCons.Options.BoolOption('profile','Enable profiling',0))
opts.Add('PREFIX', 'Installation prefix', '/usr/local')
opts.Add('LIBINSTALLDIR', 'Library install dir', '$PREFIX/lib')
opts.Add('BININSTALLDIR', 'Executable install dir', '$PREFIX/bin')
opts.Add('BOOST_RUNTIME', 'The boost runtime to use', '')
opts.Add('BOOST_DEBUG_RUNTIME', 'The boost debug runtime to use', '')
opts.Add('BOOST_LIBDIR', 'The directory of the boost libraries', '')
+ opts.Add('BOOST_PREFIX', 'The prefix into which boost is installed', '')
+ opts.Add('BOOST_VERSION', 'The version of boost to use', '')
Finalizer(FinalizeBoost)
## \brief Finalize Boost environment
if runtime: runtime = "-" + runtime
env['BOOST_VARIANT'] = "-" + env['BOOST_TOOLSET'] + runtime
+ if env['BOOST_VARIANT'] and env['BOOST_VERSION']:
+ env['BOOST_VARIANT'] = env['BOOST_VARIANT'] + '-%s' % env['BOOST_VERSION'].replace('.','_')
+
env['BOOSTTESTLIB'] = 'boost_unit_test_framework' + env['BOOST_VARIANT']
env['BOOSTREGEXLIB'] = 'boost_regex' + env['BOOST_VARIANT']
env['BOOSTFSLIB'] = 'boost_filesystem' + env['BOOST_VARIANT']
env['BOOSTIOSTREAMSLIB'] = 'boost_iostreams' + env['BOOST_VARIANT']
+ env['BOOSTSIGNALSLIB'] = 'boost_signals' + env['BOOST_VARIANT']
+
+ if env['BOOST_PREFIX']:
+ env['BOOST_LIBDIR'] = os.path.join(env['BOOST_PREFIX'], 'lib')
+ env['BOOST_INCLUDES'] = os.path.join(env['BOOST_PREFIX'],
+ 'include/boost-%s'
+ % env['BOOST_VERSION'].replace('.','_'))
env.Append(LIBPATH = [ '$BOOST_LIBDIR' ],
CPPPATH = [ '$BOOST_INCLUDES' ])
+ if env['BOOST_LIBDIR']:
+ env.Append(ENV = { 'LD_LIBRARY_PATH': env['BOOST_LIBDIR'] })
+
## \brief Use STLPort as STL replacement if available
#
# Use <a href="http://www.stlport.org">STLPort</a> as a replacement
if env['final']:
env.Append(CXXFLAGS = [ '-O3' ])
+ if env['profile']:
+ env.Append(CXXFLAGS = [ '-g', '-pg' ],
+ LINKFLAGS = [ '-g', '-pg' ])
else:
# The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails:
# CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
env.Append(CXXFLAGS = [ '-O0', '-g' ],
- CPPDEFINES = { 'SENF_DEBUG': ''},
- LINKFLAGS = [ '-g', '-rdynamic' ])
+ CPPDEFINES = { 'SENF_DEBUG': ''})
+ if env['profile']:
+ env.Append(CXXFLAGS = [ '-pg' ],
+ LINKFLAGS = [ '-pg' ])
+ if env['debug'] or env['profile']:
+ env.Append(LINKFLAGS = [ '-g', '-rdynamic' ])
+ else:
+ env.Append(LINKFLAGS = [ '-Wl,-S', '-rdynamic' ])
env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
LIBS = [ '$EXTRA_LIBS' ],
- ALLLIBS = [])
+ ALLOBJECTS = [])
return env
# \internal
def LibPath(lib): return '${LOCALLIBDIR}/${LIBPREFIX}%s${LIBADDSUFFIX}${LIBSUFFIX}' % lib
+## \brief Add explicit test
+#
+# This target helper will add an explicit test. This is like a unit test but is
+# built directly against the completed library
+#
+# \ingroup target
def Test(env, sources, LIBS = [], OBJECTS = []):
test = [ env.BoostUnitTests(
target = 'test',
objects = [],
test_sources = sources,
- LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+ LIBS = [ '$LIBSENF' ],
OBJECTS = OBJECTS,
- DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
+ DEPENDS = [ env.File(LibPath(env['LIBSENF'])) ]) ]
compileTestSources = [ src for src in sources
if 'COMPILE_CHECK' in file(src).read() ]
if compileTestSources:
target = 'test',
objects = objects,
test_sources = testSources,
- LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+ LIBS = [ '$LIBSENF' ],
OBJECTS = OBJECTS,
- DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
+ DEPENDS = [ env.File(LibPath(env['LIBSENF'])) ]) ]
compileTestSources = [ src for src in testSources
if 'COMPILE_CHECK' in file(src).read() ]
if compileTestSources:
#\ingroup target
def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
- lib = None
if objects:
- lib = env.Library(env.File(LibPath(library)),objects)
- env.Default(lib)
- env.Append(ALLLIBS = library)
- env.Alias('default', lib)
- InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
- return lib
+ env.Append(ALLOBJECTS = objects)
+ InstallSourceIncludes(env, sources)
+ return objects
## \brief Build Object from multiple sources
def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
ob = env.Command(target+"${OBJADDSUFFIX}${OBJSUFFIX}", objects, "ld -r -o $TARGET $SOURCES")
env.Default(ob)
env.Alias('default', ob)
- InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
+ InstallSourceIncludes(env, sources)
return ob
## \brief Build executable
objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
program = None
if objects:
- progEnv = env.Copy()
- progEnv.Prepend(LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ])
+ progEnv = env.Clone()
+ progEnv.Prepend(LIBS = [ '$LIBSENF' ])
program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS)
env.Default(program)
- env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
+ env.Depends(program, [ env.File(LibPath(env['LIBSENF'])) ])
env.Alias('default', program)
InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, no_includes)
return program