"Dia2Png",
"CopyToDir",
"InstallIncludes",
+ "ProgramNoScan",
]
opts = None
opts.Add('DOCINSTALLDIR', 'Documentation install dir', '$PREFIX/doc')
opts.Add('CPP_INCLUDE_EXTENSIONS', 'File extensions to include in source install',
[ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti', '.mpp' ])
+ opts.Add('CPP_EXCLUDE_EXTENSIONS', 'File extensions to exclude from source install',
+ [ '.test.hh' ])
# A finalizer is any callable object. All finalizers will be called
# in MakeEnvironment. We use them so every finalizer has knowledge of
# libraries are provided by the distribution, you probably don't need
# to specify any parameters. If your configuration is more complex,
# refer to the <a
-# href="http://www.boost.org/tools/build/v1/build_system.htm">Boost.Build</a>
+# href="http://www.boost.org/tools/build/v2/index.html">Boost.Build</a>
# documentation for a definition of the terms used above (toolset,
# variant, runtime ...).
#
if runtime: runtime = "-" + runtime
env['BOOST_VARIANT'] = "-" + env['BOOST_TOOLSET'] + runtime
- env['BOOSTTESTLIB'] = 'libboost_unit_test_framework' + env['BOOST_VARIANT']
- env['BOOSTREGEXLIB'] = 'libboost_regex' + env['BOOST_VARIANT']
+ env['BOOSTTESTLIB'] = 'boost_unit_test_framework' + env['BOOST_VARIANT']
+ env['BOOSTREGEXLIB'] = 'boost_regex' + env['BOOST_VARIANT']
+ env['BOOSTFSLIB'] = 'boost_filesystem' + env['BOOST_VARIANT']
env.Append(LIBPATH = [ '$BOOST_LIBDIR' ],
CPPPATH = [ '$BOOST_INCLUDES' ])
CPPDEFINES = [ 'NDEBUG' ])
else:
env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ],
+ # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails.
+ # CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
LINKFLAGS = [ '-g' ])
env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
#
# \ingroup target
def GlobalTargets(env):
- env.Depends(env.Alias('all'),'#')
+ env.Alias('all', [ 'default', 'all_tests', 'all_docs' ])
## \brief Return path of a built library within $LOCALLIBDIR
# \internal
# provide both \a sources and \a testSources.
#
# \ingroup target
-def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []):
+def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
if type(sources) == type(()):
testSources = sources[1]
sources = sources[0]
objects = None
if sources:
- objects = env.Object([
- source
- for source in sources
- if not str(source).endswith('.o') ]) + [
- source
- for source in sources
- if str(source).endswith('.o') ]
-
+ obsources = [ source
+ for source in sources
+ if not str(source).endswith('.o') ]
+ objects = [ source
+ for source in sources
+ if str(source).endswith('.o') ]
+ if obsources:
+ objects += env.Object(obsources)
if testSources:
test = env.BoostUnitTests(
return objects
def InstallIncludeFiles(env, files):
+ # Hrmpf ... why do I need this in 0.97??
+ if env.GetOption('clean'):
+ return
target = env.Dir(env['INCLUDEINSTALLDIR'])
base = env.Dir(env['INSTALL_BASE'])
for f in files:
src = env.File(f)
env.Alias('install_all', env.Install(target.Dir(src.dir.get_path(base)), src))
+def InstallSourceIncludes(env, sources):
+ target = env.Dir(env['INCLUDEINSTALLDIR']).Dir(
+ env.Dir('.').get_path(env.Dir(env['INSTALL_BASE'])))
+ install = env.InstallIncludes( target = target,
+ source = [ type(x) is str and env.File(x) or x
+ for x in sources ],
+ INSTALL_BASE = env.Dir('.') )
+ env.Alias( 'install_all', install )
+
def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes = False):
if type(sources) is type(()):
sources, testSources = sources
if type(testSources) is not type([]):
testSources = [ testSources ]
- installs = []
- installs.append( env.Install(dir, targets) )
+ installs = [ env.Install(dir, targets) ]
+ env.Alias( 'install_all', installs[:] )
if not no_includes:
- target = env.Dir(env['INCLUDEINSTALLDIR']).Dir(
- env.Dir('.').get_path(env.Dir(env['INSTALL_BASE'])))
- source = targets
+ sources = targets
if testSources:
- source.append( env.File('.test.bin') )
- installs.append(env.InstallIncludes(
- target = target,
- source = targets,
- INSTALL_BASE = env.Dir('.') ))
+ sources.append( env.File('.test.bin') )
+ installs.append(
+ InstallSourceIncludes(env, sources))
return installs
l = len(env.Dir('#').abspath)
if htmlnode:
env.Alias('install_all',
- env.Install( '$DOCINSTALLDIR' + htmlnode.dir.dir.abspath[l:],
- htmlnode.dir ))
+ env.Command('$DOCINSTALLDIR' + htmlnode.dir.abspath[l:], htmlnode.dir,
+ [ SCons.Defaults.Copy('$TARGET','$SOURCE') ]))
if tagnode:
env.Alias('install_all',
env.Install( '$DOCINSTALLDIR' + tagnode.dir.abspath[l:],
lib = env.Library(env.File(LibPath(library)),objects)
env.Default(lib)
env.Append(ALLLIBS = library)
- install = InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
- env.Alias('install_all', install)
+ env.Alias('default', lib)
+ InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
return lib
## \brief Build Object from multiple sources
if objects:
ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES")
env.Default(ob)
- install = InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
- env.Alias('install_all', install)
+ env.Alias('default', ob)
+ InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
return ob
## \brief Build executable
if objects:
progEnv = env.Copy()
progEnv.Prepend(LIBS = LIBS)
- program = progEnv.Program(target=binary,source=objects+OBJECTS)
+ program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS)
env.Default(program)
env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
- install = InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources,
- no_includes)
- env.Alias('install_all', install)
+ env.Alias('default', program)
+ InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, no_includes)
return program
def AllIncludesHH(env, headers):
headers.sort()
- file(env.File("all_includes.hh").abspath,"w").write("".join([ '#include "%s"\n' % f
- for f in headers ]))
- env.Clean('all','all_includes.hh')
-
+ target = env.File("all_includes.hh")
+ file(target.abspath,"w").write("".join([ '#include "%s"\n' % f
+ for f in headers ]))
+ env.Clean('all', target)