scons: Fix MinGW cross compilation.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 15 Aug 2012 18:24:58 +0000 (19:24 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 16 Aug 2012 16:21:52 +0000 (17:21 +0100)
Compensate for the recent changes and assumptions added to
Makefiles.sources

scons/custom.py

index 43e7727aa42f53dea71190aa82d41ee69a2cd1fc..277c05b67975e43d8cbe851df9eaa80c6f0c83d4 100644 (file)
@@ -236,8 +236,13 @@ def parse_source_list(env, filename, names=None):
     parser = source_list.SourceListParser()
     src = env.File(filename).srcnode()
 
-    parser.add_symbol('top_srcdir', env.Dir('#').abspath)
-    parser.add_symbol('top_builddir', env['build_dir'])
+    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)
 
@@ -253,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: