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 <jfonseca@vmware.com> Acked-by: Chad Versace <chad@chad-versace.us>
This commit is contained in:
@@ -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()
|
||||
|
Reference in New Issue
Block a user