# provide both \a sources and \a testSources.
#
# \ingroup target
-def Objects(env, sources, testSources = None, LIBS = []):
+def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []):
if type(sources) == type(()):
testSources = sources[1]
sources = sources[0]
source = sources,
test_source = testSources,
LIBS = LIBS,
+ OBJECTS = OBJECTS,
DEPENDS = [ env.File(LibPath(x)) for x in LIBS ])
env.Alias('all_tests', test)
# Hmm ... here I'd like to use an Alias instead of a file
docs = env.Alias('all_docs')[0].sources
xrefs = [ doc for doc in docs if os.path.splitext(doc.name)[1] == ".xmli" ]
xref = env.Command("doc/html/xref.xml", xrefs,
- [ "echo -e '<?xml version=\"1.0\"?>\\n<xref>' >$TARGET",
+ [ "echo '<?xml version=\"1.0\"?>' > $TARGET",
+ "echo '<xref>' >> $TARGET",
"cat $SOURCES >> $TARGET",
"echo '</xref>' >>$TARGET" ])
# The library is added to the list of default targets.
#
#\ingroup target
-def Lib(env, library, sources, testSources = None, LIBS = []):
- objects = Objects(env,sources,testSources,LIBS=LIBS)
+def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = []):
+ objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
lib = None
if objects:
lib = env.Library(env.File(LibPath(library)),objects)
env.Append(ALLLIBS = library)
return lib
+## \brief Build Object from multiple sources
+def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = []):
+ objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
+ ob = None
+ if objects:
+ ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES")
+ env.Default(ob)
+ return ob
+
## \brief Build executable
#
# This target helper will build the given binary. The \a sources, \a
# construction environment parameters or the framework helpers.
#
# \ingroup target
-def Binary(env, binary, sources, testSources = None, LIBS = []):
- objects = Objects(env,sources,testSources,LIBS=LIBS)
+def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = []):
+ objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
program = None
if objects:
progEnv = env.Copy()
progEnv.Prepend(LIBS = LIBS)
- program = progEnv.Program(target=binary,source=objects)
+ program = progEnv.Program(target=binary,source=objects+OBJECTS)
env.Default(program)
env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
return program