Scons developers,
I've written a test case that demonstrates the problem of building
interdependent Java sources from two directories.
Unfortunately, I'm a bit stumped in my efforts to fix the problem, so any
suggestions would be appreciated.
I'm hoping that this can be fixed in the next release, which would allow my
product to use the latest unaltered tools. We are currently stuck using Python
2.5 with a patched version of scons 0.97, which doesn't have this particular
problem. I see that sometime since release 0.97 the Java builder was entirely
rewritten, which seems to be when this feature stopped working.
Thanks,
Robert Boehne
From: Scons-dev
<[email protected]<mailto:[email protected]>> on behalf of
Bill Deegan <[email protected]<mailto:[email protected]>>
Reply-To: SCons developer list <[email protected]<mailto:[email protected]>>
Date: Wednesday, April 6, 2016 at 8:16 PM
To: SCons developer list <[email protected]<mailto:[email protected]>>
Subject: Re: [Scons-dev] Java tests
Files in test which call Jar()..
Java/JAR.py:env.Jar(target = 'test1.jar', source = 'test1.class')
Java/JAR.py:env.Jar(target = 'test2.jar', source = 'test2.CLASS')
Java/JAR.py:env.Jar(target = 'classes.jar', source = [ 'testdir/bar.class',
Java/JAR.py:foo.Jar(target = 'foo', source = 'classes/com/sub/foo')
Java/JAR.py:bar.Jar(target = 'bar', source = 'classes/com/sub/bar')
Java/jar_not_in_PATH.py:env.Jar(target = 'test1.jar', source = 'test1.class')
Java/JARCHDIR.py:jar = env.Jar(File('c.jar', dir), bin)
Java/JARCHDIR.py:inner = env.Jar('inner.jar', 'Inner$$Class.class')
Java/JARCHDIR.py:target_env.Jar('out/t.jar', 'in/t.class')
Java/JARCHDIR.py:source_env.Jar('out/s.jar', 'in/s.class')
Java/JARCOM.py:env.Jar(target = 'test1', source = ['file1.in<http://file1.in>',
'file2.in<http://file2.in>', 'file3.in<http://file3.in>'])
Java/JARCOMSTR.py: JARCOMSTR = "Jar'ing up $TARGET from
$SOURCES")
Java/JARCOMSTR.py:env.Jar(target = 'test1', source =
['file1.in<http://file1.in>', 'file2.in<http://file2.in>',
'file3.in<http://file3.in>'])
Java/JARCOMSTR.py:Jar'ing up test1.jar from
file1.in<http://file1.in>file2.in<http://file2.in> file3.in<http://file3.in>
Java/JARFLAGS.py:env.Jar(target = 'test.jar', source = class_files)
Java/multi-step.py:denv.Jar('HelloApplet',classes)
Java/multi-step.py:denv.Jar('myid','MyID.java')
Java/multi-step.py:denv.Jar(['Sample.i','A.java'])
Java/nested-classes.py:env.Jar(target = 'anon.jar', source = classes)
Java/no-JARCHDIR.py:Verify the Jar() behavior when we have no JARCHDIR set (it
should
Java/no-JARCHDIR.py:jar = env.Jar('x.jar', env.Java(target = 'classes', source
= 'src'))
Java/no-JARCHDIR.py:jar = env.Jar('x.jar', env.Java(target = 'classes', source
= 'src'))
Java/swig-dependencies.py:foopack_jar = env.Jar(target = 'foopack.jar', source
= 'classes')
VariantDir/include-subdir.py:Test case supplied by Jared Grubb, based on a
minimal example supplied
Note that the JARCOMSTR has a fake jar python script so likely that's not what
you're looking for.
-Bill
On Wed, Apr 6, 2016 at 9:14 PM, William Blevins
<[email protected]<mailto:[email protected]>> wrote:
Rob,
Tests exist under #test with Java-related integration tests under #test/Java.
Not sure if all of them build jars.
Information on the SCons test framework can be found under #QMTest as a
README.txt and some *.rst file(s).
https://bitbucket.org/scons/scons/wiki/DeveloperGuide/TestingMethodology
V/R,
William
On Wed, Apr 6, 2016 at 4:13 PM, Rob Boehne
<[email protected]<mailto:[email protected]>> wrote:
All,
I'm working on fixing an issue with scons, and It would help if someone could
point me to a test currently in the test suite that compiles java into a jar.
Thanks,
Robert Boehne
_______________________________________________
Scons-dev mailing list
[email protected]<mailto:[email protected]>
https://pairlist2.pair.net/mailman/listinfo/scons-dev
_______________________________________________
Scons-dev mailing list
[email protected]<mailto:[email protected]>
https://pairlist2.pair.net/mailman/listinfo/scons-dev
#!/usr/bin/env python
#
# __COPYRIGHT__
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
"""
Real world test for compiling dependent classes from different directories.
"""
import os
import TestSCons
test = TestSCons.TestSCons()
where_javac, java_version = test.java_where_javac()
where_javah = test.java_where_javah()
where_java_include=test.java_where_includes()
test.subdir(['src'],
['src', 'Source'],
['src', 'Source', 'Interface'],
['src', 'gen'],
['src', 'gen', 'mymod'],
['src', 'gen', 'mymod', 'java'],
['src', 'build'],
['src', 'build', 'classes'])
test.write(['SConstruct'], """\
import os,sys
env=Environment(tools = ['default', 'javac'],
JAVAC = r'%(where_javac)s')
Export('env')
env.PrependENVPath('PATH',os.environ.get('PATH',[]))
Java('build/classes', [env.Dir('src/gen/mymod/java'), env.Dir('src/Source/Interface')])
""" % locals())
test.write(['src', 'gen', 'mymod', 'java', 'LibraryFlags.java'], """\
package com.mycompany.PROD;
public enum LibraryFlags {
@com.mycompany.metadata.ConstantName("IgnoreDefaultDirectories") IGNORE_DEFAULT_DIRECTORIES(1),
@com.mycompany.metadata.ConstantName("CheckSubFonts") CHECK_SUB_FONTS(4),
@com.mycompany.metadata.ConstantName("InitEdit") INIT_EDIT(32);
final int someValue() {
return someValue;
}
static LibraryFlags someToEnum(int someValue) {
LibraryFlags[] someValues = LibraryFlags.class.getEnumConstants();
if (someValue < someValues.length && someValue >= 0 && someValues[someValue].someValue == someValue)
return someValues[someValue];
for (LibraryFlags someEnum : someValues)
if (someEnum.someValue == someValue)
return someEnum;
throw new IllegalArgumentException("No enum " + LibraryFlags.class + " with value " + someValue);
}
private LibraryFlags() {
this.someValue = 75;
}
private LibraryFlags(int someValue) {
this.someValue = someValue;
}
private LibraryFlags(LibraryFlags someEnum) {
this.someValue = someEnum.someValue;
}
private final int someValue;
}
""")
test.write(['src', 'Source', 'Interface', 'ConstantName.java'], """\
package com.mycompany.metadata;
import java.lang.annotation.*;
/**
* Indicates the canonical name of a constant or enum value
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ConstantName {
String value();
}
""")
test.run(arguments = '.')
test.must_exist(['src', 'build', 'classes', 'com', 'mycompany', 'metadata', 'ConstantName.class'])
test.must_exist(['src', 'build', 'classes', 'com', 'mycompany', 'PROD', 'LibraryFlags.class'])
test.must_exist(['src', 'gen', 'mymod', 'java', 'LibraryFlags.java'])
test.must_exist(['src', 'Source', 'Interface', 'ConstantName.java'])
test.up_to_date(arguments = '.')
test.pass_test()
# Local Variables:
# tab-width:4
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=4 shiftwidth=4:
_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev