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

Reply via email to