diff options
author | Chia-I Wu <[email protected]> | 2011-08-18 17:12:29 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2011-08-23 09:11:58 +0800 |
commit | 582b5d869c0f05814d4d567636a743d3fdddf431 (patch) | |
tree | e6fbbd7e6acb045f3cd950dc63342d45953e64eb /scons/custom.py | |
parent | 6c8ea1eed66e9da82fb2b49b1e7f6d7f6064dbc4 (diff) |
scons: add ParseSourceList method
ParseSourceList() can be used to parse a source list file and returns
the source files defined in it. It is supposed to be used like this
# get the list of source files from C_SOURCES in Makefile.sources
sources = env.ParseSourceList('Makefile.sources', 'C_SOURCES')
The syntax of a source list file is compatible with GNU Make. This
effectively allows SConscript and Makefile to share the source lists.
Acked-by: José Fonseca <[email protected]>
Acked-by: Chad Versace <[email protected]>
Diffstat (limited to 'scons/custom.py')
-rw-r--r-- | scons/custom.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/scons/custom.py b/scons/custom.py index df7ac93bb00..b6d716cf437 100644 --- a/scons/custom.py +++ b/scons/custom.py @@ -42,6 +42,7 @@ import SCons.Scanner import fixes +import source_list def quietCommandLines(env): # Quiet command lines @@ -229,6 +230,40 @@ def createPkgConfigMethods(env): env.AddMethod(pkg_use_modules, 'PkgUseModules') +def parse_source_list(env, filename, names=None): + # parse the source list file + parser = source_list.SourceListParser() + src = env.File(filename).srcnode() + sym_table = parser.parse(src.abspath) + + if names: + if isinstance(names, basestring): + names = [names] + + symbols = names + else: + symbols = sym_table.keys() + + # convert the symbol table to source lists + src_lists = {} + for sym in symbols: + val = sym_table[sym] + src_lists[sym] = [f for f in val.split(' ') if f] + + # if names are given, concatenate the lists + if names: + srcs = [] + for name in names: + srcs.extend(src_lists[name]) + + return srcs + else: + return src_lists + +def createParseSourceListMethod(env): + env.AddMethod(parse_source_list, 'ParseSourceList') + + def generate(env): """Common environment generation code""" @@ -240,6 +275,7 @@ def generate(env): createConvenienceLibBuilder(env) createCodeGenerateMethod(env) createPkgConfigMethods(env) + createParseSourceListMethod(env) # for debugging #print env.Dump() |