def parse_source_list(env, filename, names=None): # parse the source list file parser = source_list.SourceListParser() src = env.File(filename).srcnode() cur_srcdir = env.Dir('.').srcnode().abspath top_srcdir = env.Dir('#').abspath top_builddir = os.path.join(top_srcdir, env['build_dir']) # Normalize everything to / slashes cur_srcdir = cur_srcdir.replace('\\', '/') top_srcdir = top_srcdir.replace('\\', '/') top_builddir = top_builddir.replace('\\', '/') # Populate the symbol table of the Makefile parser. parser.add_symbol('top_srcdir', top_srcdir) parser.add_symbol('top_builddir', top_builddir) sym_table = parser.parse(src.abspath) if names: if isinstance(names, basestring): names = [names] symbols = names else: symbols = list(sym_table.keys()) # convert the symbol table to source lists src_lists = {} for sym in symbols: val = sym_table[sym] srcs = [] for f in val.split(): if f: # Process source paths if f.startswith(top_builddir + '/src'): # Automake puts build output on a `src` subdirectory, but # SCons does not, so strip it here. f = top_builddir + f[len(top_builddir + '/src'):] if f.startswith(cur_srcdir + '/'): # Prefer relative source paths, as absolute files tend to # cause duplicate actions. f = f[len(cur_srcdir + '/'):] # do not include any headers if f.endswith(tuple(['.h', '.hpp', '.inl'])): continue srcs.append(f) src_lists[sym] = srcs # 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 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