if subprocess.call(["pkg-config", "--exists", ' '.join(modules)]) != 0:
return
+ # Strip version expressions from modules
+ modules = [module.split(' ', 1)[0] for module in modules]
+
# Other flags may affect the compilation of unrelated targets, so store
# them with a prefix, (e.g., XXX_CFLAGS, XXX_LIBS, etc)
try:
def pkg_check_modules(env, name, modules):
- sys.stdout.write('Checking for %s...' % name)
+ sys.stdout.write('Checking for %s (%s)...' % (name, ' '.join(modules)))
_pkg_check_modules(env, name, modules)
result = env['HAVE_' + name]
sys.stdout.write(' %s\n' % ['no', 'yes'][int(bool(result))])
prefix = name + '_'
if not 'HAVE_' + name in env:
- print 'Attempt to use unknown module %s' % name
- env.Exit(1)
+ raise Exception('Attempt to use unknown module %s' % name)
if not env['HAVE_' + name]:
- print 'Attempt to use unavailable module %s' % name
- env.Exit(1)
+ raise Exception('Attempt to use unavailable module %s' % name)
flags = {}
for flag_name, flag_value in env.Dictionary().iteritems():
# 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:
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, 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 + '/'):]
+ srcs.append(f)
+
+ src_lists[sym] = srcs
# if names are given, concatenate the lists
if names: