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:
Chia-I Wu
2011-08-18 17:12:29 +08:00
parent 6c8ea1eed6
commit 582b5d869c
2 changed files with 159 additions and 0 deletions

View File

@@ -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()