summaryrefslogtreecommitdiffstats
path: root/scons/custom.py
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2011-08-18 17:12:29 +0800
committerChia-I Wu <[email protected]>2011-08-23 09:11:58 +0800
commit582b5d869c0f05814d4d567636a743d3fdddf431 (patch)
treee6fbbd7e6acb045f3cd950dc63342d45953e64eb /scons/custom.py
parent6c8ea1eed66e9da82fb2b49b1e7f6d7f6064dbc4 (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.py36
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()