X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=scons%2Fcustom.py;h=277c05b67975e43d8cbe851df9eaa80c6f0c83d4;hb=2d3d0d3a5ae3829260f914462f4e63b2ff4aadbc;hp=cc953bd999a0167aa728436f0b4d4b71670f8e34;hpb=2470e918cc29e5d057a28551ce9c15e7d83fab7e;p=mesa.git diff --git a/scons/custom.py b/scons/custom.py index cc953bd999a..277c05b6797 100644 --- a/scons/custom.py +++ b/scons/custom.py @@ -235,6 +235,15 @@ 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']) + + # 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: @@ -249,7 +258,21 @@ def parse_source_list(env, filename, names=None): src_lists = {} for sym in symbols: val = sym_table[sym] - src_lists[sym] = [f for f in val.split(' ') if f] + 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, bue + # SCons does no, 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 + '/'):] + srcs.append(f) + + src_lists[sym] = srcs # if names are given, concatenate the lists if names: