From 582b5d869c0f05814d4d567636a743d3fdddf431 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 18 Aug 2011 17:12:29 +0800 Subject: scons: add ParseSourceList method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Acked-by: Chad Versace --- scons/custom.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'scons/custom.py') 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() -- cgit v1.2.3