Support multiple source paths in Java. (Tom Epperly)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 2 Apr 2004 04:48:40 +0000 (04:48 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 2 Apr 2004 04:48:40 +0000 (04:48 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@938 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Tool/javac.py
test/JAVAC.py

index 3f8b2820cb015df5b0931b7b5001a148c25f6744..82878cb2f141237ce5304fcdff61c6255cb3df7f 100644 (file)
@@ -1281,7 +1281,7 @@ env.Jar(target = 'foo.jar', source = 'classes')
 .IP Java()
 .IP env.Java()
 Builds one or more Java class files
-from a source tree of .java files.
+from one or more source trees of .java files.
 The class files will be placed underneath
 the specified target directory.
 SCons will parse each source .java file
@@ -1315,6 +1315,7 @@ Example:
 
 .ES
 env.Java(target = 'classes', source = 'src')
+env.Java(target = 'classes', source = ['src1', 'src2'])
 .EE
 
 '\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
index 16f76ba4218ddbf667a6055aa65557f3088a5366..b323e08e9067dcb027cb850ff0b2024ed9487e7f 100644 (file)
@@ -14,6 +14,10 @@ RELEASE 0.96 - XXX
 
   - Make the CacheDir() directory if it doesn't already exist.
 
+  From Tom Epperly:
+
+  - Allow the Java() Builder to take more than one source directory.
+
   From Bob Halley:
 
   - Make the new *FLAGS variable type work with copied Environments.
index b56a11893d0d1d315286687d047291dbc332611b..b4a5ce9b7cb06f4eda865def8d92dc18286f3e94 100644 (file)
@@ -56,14 +56,15 @@ def emit_java_classes(target, source, env):
 
     slist = []
     js = _my_normcase(java_suffix)
-    def visit(arg, dirname, names, js=js, dirnode=source[0].rdir()):
-        java_files = filter(lambda n, js=js:
-                                   _my_normcase(n[-len(js):]) == js,
-                            names)
-        mydir = dirnode.Dir(dirname)
-        java_paths = map(lambda f, d=mydir: d.File(f), java_files)
-        arg.extend(java_paths)
-    os.path.walk(source[0].rdir().get_abspath(), visit, slist)
+    for sdir in source:
+        def visit(arg, dirname, names, js=js, dirnode=sdir.rdir()):
+            java_files = filter(lambda n, js=js:
+                                _my_normcase(n[-len(js):]) == js,
+                                names)
+            mydir = dirnode.Dir(dirname)
+            java_paths = map(lambda f, d=mydir: d.File(f), java_files)
+            arg.extend(java_paths)
+        os.path.walk(sdir.rdir().get_abspath(), visit, slist)
 
     tlist = []
     for file in slist:
index 13d46703b7beef53d46a160ecb39469760391c2f..fafe3a9a20db2a91dbdc322d7a9eb5edbc4865ee 100644 (file)
@@ -111,14 +111,15 @@ javac = foo.Dictionary('JAVAC')
 bar = foo.Copy(JAVAC = r'%s wrapper.py ' + javac)
 foo.Java(target = 'class1', source = 'com/sub/foo')
 bar.Java(target = 'class2', source = 'com/sub/bar')
-foo.Java(target = 'class3', source = 'src')
+foo.Java(target = 'class3', source = ['src1', 'src2'])
 """ % python)
 
 test.subdir('com',
             ['com', 'sub'],
             ['com', 'sub', 'foo'],
             ['com', 'sub', 'bar'],
-            'src')
+            'src1',
+            'src2')
 
 test.write(['com', 'sub', 'foo', 'Example1.java'], """\
 package com.sub.foo;
@@ -204,8 +205,20 @@ public class Example6
 }
 """)
 
+test.write(['src1', 'Example7.java'], """\
+public class Example7
+{
+
+     public static void main(String[] args)
+     {
+
+     }
+
+}
+""")
+
 # Acid-test file for parsing inner Java classes, courtesy Chad Austin.
-test.write(['src', 'Test.java'], """\
+test.write(['src2', 'Test.java'], """\
 class Empty {
 }
 
@@ -265,25 +278,27 @@ class Private {
 
 test.run(arguments = '.')
 
-test.fail_test(test.read('wrapper.out') != "wrapper.py /usr/local/j2sdk1.3.1/bin/javac -d class2 -sourcepath com/sub/bar com/sub/bar/Example4.java com/sub/bar/Example5.java com/sub/bar/Example6.java\n")
-
-test.fail_test(not os.path.exists(test.workpath('class1', 'com', 'sub', 'foo', 'Example1.class')))
-test.fail_test(not os.path.exists(test.workpath('class1', 'com', 'other', 'Example2.class')))
-test.fail_test(not os.path.exists(test.workpath('class1', 'com', 'sub', 'foo', 'Example3.class')))
-
-test.fail_test(not os.path.exists(test.workpath('class2', 'com', 'sub', 'bar', 'Example4.class')))
-test.fail_test(not os.path.exists(test.workpath('class2', 'com', 'other', 'Example5.class')))
-test.fail_test(not os.path.exists(test.workpath('class2', 'com', 'sub', 'bar', 'Example6.class')))
-
-test.fail_test(not os.path.exists(test.workpath('class3', 'Empty.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Listener.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Private.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Private$1.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Test.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Test$1.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Test$2.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Test$3.class')))
-test.fail_test(not os.path.exists(test.workpath('class3', 'Test$Inner.class')))
+test.must_match('wrapper.out', "wrapper.py /usr/local/j2sdk1.3.1/bin/javac -d class2 -sourcepath com/sub/bar com/sub/bar/Example4.java com/sub/bar/Example5.java com/sub/bar/Example6.java\n")
+
+test.must_exist(test.workpath('class1', 'com', 'sub', 'foo', 'Example1.class'))
+test.must_exist(test.workpath('class1', 'com', 'other', 'Example2.class'))
+test.must_exist(test.workpath('class1', 'com', 'sub', 'foo', 'Example3.class'))
+
+test.must_exist(test.workpath('class2', 'com', 'sub', 'bar', 'Example4.class'))
+test.must_exist(test.workpath('class2', 'com', 'other', 'Example5.class'))
+test.must_exist(test.workpath('class2', 'com', 'sub', 'bar', 'Example6.class'))
+
+test.must_exist(test.workpath('class3', 'Example7.class'))
+
+test.must_exist(test.workpath('class3', 'Empty.class'))
+test.must_exist(test.workpath('class3', 'Listener.class'))
+test.must_exist(test.workpath('class3', 'Private.class'))
+test.must_exist(test.workpath('class3', 'Private$1.class'))
+test.must_exist(test.workpath('class3', 'Test.class'))
+test.must_exist(test.workpath('class3', 'Test$1.class'))
+test.must_exist(test.workpath('class3', 'Test$2.class'))
+test.must_exist(test.workpath('class3', 'Test$3.class'))
+test.must_exist(test.workpath('class3', 'Test$Inner.class'))
 
 test.up_to_date(arguments = '.')