Allow LIBS to contain lists of lists.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 18 Sep 2004 15:24:28 +0000 (15:24 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 18 Sep 2004 15:24:28 +0000 (15:24 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1083 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/engine/SCons/Defaults.py
src/engine/SCons/Scanner/Prog.py
src/engine/SCons/Scanner/ProgTests.py
test/LIBS.py

index 6ebc6ebb58509a65df60d3a3be4e823060903dcb..381b0ae73c0045f00261e3786552276ae24630ba 100644 (file)
@@ -232,6 +232,8 @@ def _concat(prefix, list, suffix, env, f=lambda x: x):
     if not list:
         return list
 
+    if SCons.Util.is_List(list):
+        list = SCons.Util.flatten(list)
     list = f(env.subst_path(list))
 
     result = []
index 6efb44ac70b44d0220c14dfc825391b5684d5867..78b7233050f83e2bac151f0e18c9cf5992ccd025 100644 (file)
@@ -52,7 +52,9 @@ def scan(node, env, libpath = (), fs = SCons.Node.FS.default_fs):
         return []
     if SCons.Util.is_String(libs):
         libs = string.split(libs)
-    elif not SCons.Util.is_List(libs):
+    elif SCons.Util.is_List(libs):
+        libs = SCons.Util.flatten(libs)
+    else:
         libs = [libs]
 
     try:
index 1100f34939ec4878654e5a133f0890f0fbf227ee..f7064ffc09dc4845dc58f3785b16e2ff0fa0018d 100644 (file)
@@ -190,15 +190,26 @@ class ProgScanTestCase8(unittest.TestCase):
         
         class DummyNode:
             pass
-        n = DummyNode()
+
+        n1 = DummyNode()
+        env = DummyEnvironment(LIBPATH=[ test.workpath("dir") ],
+                               LIBS=[n1],
+                               LIBPREFIXES=['p1-', 'p2-'],
+                               LIBSUFFIXES=['.1', '2'])
+        s = SCons.Scanner.Prog.ProgScan(node_class = DummyNode)
+        path = s.path(env)
+        deps = s('dummy', env, path)
+        assert deps == [n1], deps
+
+        n2 = DummyNode()
         env = DummyEnvironment(LIBPATH=[ test.workpath("dir") ],
-                               LIBS=[n],
+                               LIBS=[n1, [n2]],
                                LIBPREFIXES=['p1-', 'p2-'],
                                LIBSUFFIXES=['.1', '2'])
         s = SCons.Scanner.Prog.ProgScan(node_class = DummyNode)
         path = s.path(env)
         deps = s('dummy', env, path)
-        assert deps == [n], deps
+        assert deps == [n1, n2], deps
 
 def suite():
     suite = unittest.TestSuite()
index cc31cad11b0fdcda671b000c7e065933ea82727c..3ff26e0d3104979425da6e5b2aa2882ae4ca545a 100644 (file)
@@ -43,6 +43,7 @@ foo2_exe = test.workpath('foo2' + _exe)
 foo3_exe = test.workpath('foo3' + _exe)
 foo4_exe = test.workpath('foo4' + _exe)
 foo5_exe = test.workpath('foo5' + _exe)
+slprog_exe = test.workpath('slprog' + _exe)
 
 test.write('SConstruct', """
 env = Environment(LIBS=['bar'], LIBPATH = '.')
@@ -55,6 +56,8 @@ env4 = Environment(LIBS=File(r'%s'), LIBPATH = '.')
 env4.Program(target='foo4', source='foo4.c')
 env5 = Environment(LIBS=['bar', '$UNSPECIFIED'], LIBPATH = '.')
 env5.Program(target='foo5', source='foo5.c')
+sl = env.StaticLibrary('sl.c')
+env.Program(target='slprog.c', LIBS=[sl])
 SConscript('sub1/SConscript', 'env')
 SConscript('sub2/SConscript', 'env')
 """ % (bar_lib, bar_lib))
@@ -89,6 +92,24 @@ test.write('foo3.c', foo_contents)
 test.write('foo4.c', foo_contents)
 test.write('foo5.c', foo_contents)
 
+test.write('sl.c', """\
+void
+sl(void)
+{
+        printf("sl.c\\n");
+}
+""")
+
+test.write('slprog.c', """\
+int
+main(int argc, char *argv[])
+{
+        sl();
+        printf("slprog.c\\n");
+        exit (0);
+}
+""")
+
 test.write(['sub1', 'bar.c'], r"""
 #include <stdio.h>
 
@@ -124,6 +145,7 @@ test.run(program=foo2_exe, stdout='sub1/bar.c\nsub1/baz.c\n')
 test.run(program=foo3_exe, stdout='sub1/bar.c\nsub1/baz.c\n')
 test.run(program=foo4_exe, stdout='sub1/bar.c\nsub1/baz.c\n')
 test.run(program=foo5_exe, stdout='sub1/bar.c\nsub1/baz.c\n')
+test.run(program=slprog_exe, stdout='sl.c\nslprog.c\n')
 
 #
 test.write('SConstruct', """