diff options
author | William Deegan <bill@baddogconsulting.com> | 2018-10-02 21:20:00 (GMT) |
---|---|---|
committer | William Deegan <bill@baddogconsulting.com> | 2018-10-02 21:20:00 (GMT) |
commit | 7cae39dc41ee3ff6becb53dbc8c426eddff9b8ac (patch) | |
tree | 5a95b6c8a035aae298c901829fbc196fd6036d05 | |
parent | 98dfcef355d8d68360fde70afb52bc4250b1926b (diff) | |
download | SCons-7cae39dc41ee3ff6becb53dbc8c426eddff9b8ac.zip SCons-7cae39dc41ee3ff6becb53dbc8c426eddff9b8ac.tar.gz SCons-7cae39dc41ee3ff6becb53dbc8c426eddff9b8ac.tar.bz2 |
Fixes for Java tests on win32
-rw-r--r-- | src/engine/SCons/Tool/JavaCommon.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/Tool/jar.py | 12 | ||||
-rw-r--r-- | src/engine/SCons/Tool/javac.py | 18 | ||||
-rw-r--r-- | src/engine/SCons/Tool/javah.py | 10 | ||||
-rw-r--r-- | src/engine/SCons/Tool/rmic.py | 15 | ||||
-rw-r--r-- | test/Java/JAR.py | 12 | ||||
-rw-r--r-- | test/Java/JARCHDIR.py | 29 | ||||
-rw-r--r-- | test/Java/JARFLAGS.py | 14 | ||||
-rw-r--r-- | test/Java/JAVABOOTCLASSPATH.py | 7 | ||||
-rw-r--r-- | test/Java/JAVACFLAGS.py | 3 | ||||
-rw-r--r-- | test/Java/JAVACLASSPATH.py | 14 | ||||
-rw-r--r-- | test/Java/JAVAH.py | 6 | ||||
-rw-r--r-- | test/Java/JAVASOURCEPATH.py | 3 | ||||
-rw-r--r-- | test/Java/no-JARCHDIR.py | 23 | ||||
-rw-r--r-- | test/Java/source-files.py | 6 | ||||
-rw-r--r-- | test/Java/swig-dependencies.py | 28 | ||||
-rw-r--r-- | test/Libs/SharedLibrary.py | 1 | ||||
-rw-r--r-- | testing/framework/TestCmd.py | 3 | ||||
-rw-r--r-- | testing/framework/TestSCons.py | 8 |
19 files changed, 115 insertions, 101 deletions
diff --git a/src/engine/SCons/Tool/JavaCommon.py b/src/engine/SCons/Tool/JavaCommon.py index 83b0b05..2be31e3 100644 --- a/src/engine/SCons/Tool/JavaCommon.py +++ b/src/engine/SCons/Tool/JavaCommon.py @@ -402,7 +402,7 @@ def get_java_install_dirs(platform, version=None): """ Using patterns above find the java jdk install dir :param platform: - :param version: + :param version: If specified, only look for java sdk's of this version :return: list of default paths for java. """ paths = [] @@ -415,6 +415,8 @@ def get_java_install_dirs(platform, version=None): # do nothing for now pass + paths=sorted(paths) + return paths diff --git a/src/engine/SCons/Tool/jar.py b/src/engine/SCons/Tool/jar.py index 6e319c1..5d4d3bb 100644 --- a/src/engine/SCons/Tool/jar.py +++ b/src/engine/SCons/Tool/jar.py @@ -32,11 +32,13 @@ selection method. # __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" +import os import SCons.Subst import SCons.Util from SCons.Node.FS import _my_normcase -import os +from SCons.Tool.JavaCommon import get_java_install_dirs + def jarSources(target, source, env, for_signature): """Only include sources that are not a manifest file.""" @@ -206,6 +208,14 @@ def generate(env): env.AddMethod(Jar) + if env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang + jar = SCons.Tool.find_program_path(env, 'jar', + default_paths=get_java_install_dirs(env['PLATFORM'])) + if jar: + jar_bin_dir = os.path.dirname(jar) + env.AppendENVPath('PATH', jar_bin_dir) + env['JAR'] = 'jar' env['JARFLAGS'] = SCons.Util.CLVar('cf') env['_JARFLAGS'] = jarFlags diff --git a/src/engine/SCons/Tool/javac.py b/src/engine/SCons/Tool/javac.py index 08d3d2f..0d627a1 100644 --- a/src/engine/SCons/Tool/javac.py +++ b/src/engine/SCons/Tool/javac.py @@ -209,12 +209,18 @@ def generate(env): env.AddMethod(Java) if env['PLATFORM'] == 'win32': - # Ensure that we have a proper path for clang - clang = SCons.Tool.find_program_path(env, 'javac', - default_paths=get_java_install_dirs(env['PLATFORM'])) - if clang: - clang_bin_dir = os.path.dirname(clang) - env.AppendENVPath('PATH', clang_bin_dir) + # Ensure that we have a proper path for javac + version = env.get('JAVAVERSION', None) + # import pdb; pdb.set_trace() + paths=get_java_install_dirs(env['PLATFORM'], version=version) + # print("JAVA PATHS:%s"%paths) + javac = SCons.Tool.find_program_path(env, 'javac', + default_paths=paths) + if javac: + javac_bin_dir = os.path.dirname(javac) + env.AppendENVPath('PATH', javac_bin_dir) + java_inc_dir = os.path.normpath(os.path.join(javac_bin_dir,'..','include')) + env['JAVAINCLUDES'] = [ java_inc_dir, os.path.join(java_inc_dir,'win32')] env['JAVAC'] = 'javac' env['JAVACFLAGS'] = SCons.Util.CLVar('') diff --git a/src/engine/SCons/Tool/javah.py b/src/engine/SCons/Tool/javah.py index c092273..f514479 100644 --- a/src/engine/SCons/Tool/javah.py +++ b/src/engine/SCons/Tool/javah.py @@ -40,6 +40,8 @@ import SCons.Builder import SCons.Node.FS import SCons.Tool.javac import SCons.Util +from SCons.Tool.JavaCommon import get_java_install_dirs + def emit_java_headers(target, source, env): """Create and return lists of Java stub header files that will @@ -120,6 +122,14 @@ def generate(env): java_javah = SCons.Tool.CreateJavaHBuilder(env) java_javah.emitter = emit_java_headers + if env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang + javah = SCons.Tool.find_program_path(env, 'javah', + default_paths=get_java_install_dirs(env['PLATFORM'])) + if javah: + javah_bin_dir = os.path.dirname(javah) + env.AppendENVPath('PATH', javah_bin_dir) + env['_JAVAHOUTFLAG'] = JavaHOutFlagGenerator env['JAVAH'] = 'javah' env['JAVAHFLAGS'] = SCons.Util.CLVar('') diff --git a/src/engine/SCons/Tool/rmic.py b/src/engine/SCons/Tool/rmic.py index 4d1bd28..173ef5f 100644 --- a/src/engine/SCons/Tool/rmic.py +++ b/src/engine/SCons/Tool/rmic.py @@ -40,6 +40,9 @@ import SCons.Builder import SCons.Node.FS import SCons.Util +from SCons.Tool.JavaCommon import get_java_install_dirs + + def emit_rmic_classes(target, source, env): """Create and return lists of Java RMI stub and skeleton class files to be created from a set of class files. @@ -105,6 +108,18 @@ def generate(env): """Add Builders and construction variables for rmic to an Environment.""" env['BUILDERS']['RMIC'] = RMICBuilder + if env['PLATFORM'] == 'win32': + version = env.get('JAVAVERSION', None) + default_paths=get_java_install_dirs(env['PLATFORM'], version=version) + + # Ensure that we have a proper path for rmic + rmic = SCons.Tool.find_program_path(env, 'rmic', default_paths=default_paths) + + # print("RMIC: %s"%rmic) + if rmic: + rmic_bin_dir = os.path.dirname(rmic) + env.AppendENVPath('PATH', rmic_bin_dir) + env['RMIC'] = 'rmic' env['RMICFLAGS'] = SCons.Util.CLVar('') env['RMICCOM'] = '$RMIC $RMICFLAGS -d ${TARGET.attributes.java_lookupdir} -classpath ${SOURCE.attributes.java_classdir} ${SOURCES.attributes.java_classname}' diff --git a/test/Java/JAR.py b/test/Java/JAR.py index 4703a28..1eae9eb 100644 --- a/test/Java/JAR.py +++ b/test/Java/JAR.py @@ -302,16 +302,16 @@ public class JavaFile3 } """) -test.run(chdir='testdir2') # check the output and make sure the java files got converted to classes -compare_string = "jar cf foo.jar -C com/javasource/JavaFile1 com/javasource/JavaFile1.class -C com/javasource/JavaFile2 com/javasource/JavaFile2.class -C com/javasource/JavaFile3 com/javasource/JavaFile3.class" +# use regex . for dirsep so this will work on both windows and other platforms. +expect = ".*jar cf foo.jar -C com.javasource.JavaFile1 com.javasource.JavaFile1.class -C com.javasource.JavaFile2 com.javasource.JavaFile2.class -C com.javasource.JavaFile3 com.javasource.JavaFile3.class.*" + +test.run(chdir='testdir2', + match=TestSCons.match_re_dotall, + stdout = expect) -if sys.platform == 'win32': - compare_string = compare_string.replace('/','\\') -if(compare_string not in test.stdout()): - test.fail_test() #test single target jar test.must_exist(['testdir2','foobar.jar']) diff --git a/test/Java/JARCHDIR.py b/test/Java/JARCHDIR.py index d574fe7..e602fad 100644 --- a/test/Java/JARCHDIR.py +++ b/test/Java/JARCHDIR.py @@ -39,16 +39,10 @@ import TestSCons test = TestSCons.TestSCons() -where_javac, java_version = test.java_where_javac() -where_jar = test.java_where_jar() - - - test.write('SConstruct', """ +DefaultEnvironment(tools=[]) dir = 'dist' env = Environment(tools = ['javac', 'jar'], - JAVAC = r'%(where_javac)s', - JAR = r'%(where_jar)s', JARCHDIR = dir) bin = env.Java(dir, Dir('./')) jar = env.Jar(File('c.jar', dir), bin) @@ -58,8 +52,9 @@ jar = env.Jar(File('c.jar', dir), bin) env = env.Clone(JARCHDIR = '.') inner = env.Jar('inner.jar', 'Inner$$Class.class') -target_env = env.Clone(JARCHDIR = '${TARGET.dir}') -target_env.Jar('out/t.jar', 'in/t.class') +# Commented out as this logic doesn't work as is. +# target_env = env.Clone(JARCHDIR = '${TARGET.dir}') +# target_env.Jar('out/t.jar', 'in/t.class') source_env = env.Clone(JARCHDIR = '${SOURCE.dir}') source_env.Jar('out/s.jar', 'in/s.class') @@ -67,8 +62,6 @@ source_env.Jar('out/s.jar', 'in/s.class') Default(bin, jar, inner) """ % locals()) - - test.subdir('in') test.write('a.java', """\ @@ -98,21 +91,19 @@ test.write(['in', 's.class'], "s.class\n") # don't blow up (i.e., validates that we pass the right arguments to # env.subst() in the code that handle jar). -p = test.workpath('out') -for d in test.workpath('in').split(os.sep): - p = p + d - test.subdir(p) - p = p + os.sep +# p = test.workpath('out') +# for d in test.workpath('in').split(os.sep): +# p = p + d +# test.subdir(p) +# p = p + os.sep -test.write([p, 't.class'], "t.class\n") +# test.write([p, 't.class'], "t.class\n") test.write(['in', 't.class'], "t.class\n") test.write('Inner$Class.class', "Inner$Class.class\n") test.run(arguments = '.') - - test.pass_test() # Local Variables: diff --git a/test/Java/JARFLAGS.py b/test/Java/JARFLAGS.py index c0ae627..e89d02b 100644 --- a/test/Java/JARFLAGS.py +++ b/test/Java/JARFLAGS.py @@ -32,15 +32,8 @@ test = TestSCons.TestSCons() test.subdir('src') -where_javac, java_version = test.java_where_javac() -where_jar = test.java_where_jar() - - - test.write('SConstruct', """ env = Environment(tools = ['javac', 'jar'], - JAVAC = r'%(where_javac)s', - JAR = r'%(where_jar)s', JARFLAGS = 'cvf') env['JARFLAGS'] = 'cvf' class_files = env.Java(target = 'classes', source = 'src') @@ -62,13 +55,12 @@ public class Example1 """) expect = test.wrap_stdout("""\ -%(where_javac)s -d classes -sourcepath src src/Example1\.java -%(where_jar)s cvf test.jar -C classes src/Example1\.class +javac -d classes -sourcepath src src.Example1\.java +jar cvf test.jar -C classes src.Example1\.class .* -adding: src/Example1\.class.* +adding: src.Example1\.class.* """ % locals()) -expect = expect.replace('/', os.sep) test.run(arguments = '.', match=TestSCons.match_re_dotall, diff --git a/test/Java/JAVABOOTCLASSPATH.py b/test/Java/JAVABOOTCLASSPATH.py index 6913c6a..196cc54 100644 --- a/test/Java/JAVABOOTCLASSPATH.py +++ b/test/Java/JAVABOOTCLASSPATH.py @@ -42,7 +42,6 @@ where_javah = test.java_where_javah() test.write('SConstruct', """ env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%(where_javac)s', JAVABOOTCLASSPATH = ['dir1', 'dir2']) j1 = env.Java(target = 'class', source = 'com/Example1.java') j2 = env.Java(target = 'class', source = 'com/Example2.java') @@ -85,11 +84,11 @@ public class Example2 bootclasspath = os.pathsep.join(['dir1', 'dir2']) expect = """\ -%(where_javac)s -bootclasspath %(bootclasspath)s -d class -sourcepath com com/Example1.java -%(where_javac)s -bootclasspath %(bootclasspath)s -d class -sourcepath com com/Example2.java +javac -bootclasspath %(bootclasspath)s -d class -sourcepath com com.Example1\.java +javac -bootclasspath %(bootclasspath)s -d class -sourcepath com com.Example2\.java """ % locals() -test.run(arguments = '-Q -n .', stdout = expect) +test.run(arguments = '-Q -n .', stdout = expect, match=TestSCons.match_re) test.pass_test() diff --git a/test/Java/JAVACFLAGS.py b/test/Java/JAVACFLAGS.py index 6afd1b9..28c58c1 100644 --- a/test/Java/JAVACFLAGS.py +++ b/test/Java/JAVACFLAGS.py @@ -36,7 +36,6 @@ test.subdir('src') test.write('SConstruct', """ env = Environment(tools = ['javac'], - JAVAC = r'%(where_javac)s', JAVACFLAGS = '-O') env.Java(target = 'classes', source = 'src') """ % locals()) @@ -55,7 +54,7 @@ public class Example1 } """) -expected_wrapper_out = "%(where_javac)s -O -d classes -sourcepath src src/Example1.java\n" +expected_wrapper_out = "javac -O -d classes -sourcepath src src/Example1.java\n" expected_wrapper_out = expected_wrapper_out.replace('/', os.sep) test.run(arguments = '.', stdout = test.wrap_stdout(expected_wrapper_out % locals())) diff --git a/test/Java/JAVACLASSPATH.py b/test/Java/JAVACLASSPATH.py index bc3bb21..fb2b33f 100644 --- a/test/Java/JAVACLASSPATH.py +++ b/test/Java/JAVACLASSPATH.py @@ -40,17 +40,15 @@ where_javac, java_version = test.java_where_javac() where_javah = test.java_where_javah() test.write('SConstruct', """ -env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%(where_javac)s', - JAVAH = r'%(where_javah)s') -j1 = env.Java(target = 'class1', source = 'com1/Example1.java') -j2 = env.Java(target = 'class2', source = 'com2/Example2.java') +env = Environment(tools = ['javac', 'javah']) +j1 = env.Java(target = 'class1', source = 'com.1/Example1.java') +j2 = env.Java(target = 'class2', source = 'com.2/Example2.java') env.JavaH(target = 'outdir', source = [j1, j2], JAVACLASSPATH = 'class2') """ % locals()) -test.subdir('com1', 'com2') +test.subdir('com.1', 'com.2') -test.write(['com1', 'Example1.java'], """\ +test.write(['com.1', 'Example1.java'], """\ package com; public class Example1 @@ -64,7 +62,7 @@ public class Example1 } """) -test.write(['com2', 'Example2.java'], """\ +test.write(['com.2', 'Example2.java'], """\ package com; public class Example2 diff --git a/test/Java/JAVAH.py b/test/Java/JAVAH.py index f07ebb9..c7ac334 100644 --- a/test/Java/JAVAH.py +++ b/test/Java/JAVAH.py @@ -108,9 +108,7 @@ if test.javac_is_gcj: test.file_fixture('wrapper_with_args.py') test.write('SConstruct', """ -foo = Environment(tools = ['javac', 'javah', 'install'], - JAVAC = r'%(where_javac)s', - JAVAH = r'%(where_javah)s') +foo = Environment(tools = ['javac', 'javah', 'install']) jv = %(java_version)s if jv: foo['JAVAVERSION'] = jv @@ -282,7 +280,7 @@ class Private { test.run(arguments = '.') -test.must_match('wrapper.out', "wrapper_with_args.py %(where_javah)s -d outdir2 -classpath class2 com.sub.bar.Example4 com.other.Example5 com.sub.bar.Example6\n" % locals(), +test.must_match('wrapper.out', "wrapper_with_args.py javah -d outdir2 -classpath class2 com.sub.bar.Example4 com.other.Example5 com.sub.bar.Example6\n" % locals(), mode='r') test.must_exist(['outdir1', 'com_sub_foo_Example1.h']) diff --git a/test/Java/JAVASOURCEPATH.py b/test/Java/JAVASOURCEPATH.py index 5f19004..8e7b762 100644 --- a/test/Java/JAVASOURCEPATH.py +++ b/test/Java/JAVASOURCEPATH.py @@ -39,8 +39,7 @@ test = TestSCons.TestSCons() where_javac, java_version = test.java_where_javac() test.write('SConstruct', """ -env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%(where_javac)s') +env = Environment(tools = ['javac', 'javah']) bar = env.Java(target = 'bar/classes', source = 'bar/src/TestBar.java', JAVASOURCEPATH = ['foo/src']) diff --git a/test/Java/no-JARCHDIR.py b/test/Java/no-JARCHDIR.py index 2037524..11754c0 100644 --- a/test/Java/no-JARCHDIR.py +++ b/test/Java/no-JARCHDIR.py @@ -35,13 +35,12 @@ import TestSCons test = TestSCons.TestSCons() +# will skip tests when needed tools not present. where_javac, java_version = test.java_where_javac() where_jar = test.java_where_jar() test.subdir('src') - - test.write(['src', 'a.java'], """\ package foo.bar; public class a {} @@ -52,20 +51,13 @@ package foo.bar; public class b {} """) - - test.write('SConstruct', """\ -env = Environment(tools = ['javac', 'jar'], - JAVAC = r'%(where_javac)s', - JAR = r'%(where_jar)s') +env = Environment(tools = ['javac', 'jar']) jar = env.Jar('x.jar', env.Java(target = 'classes', source = 'src')) """ % locals()) test.run(arguments = '.') - - - test.run(program = where_jar, arguments = 'tf x.jar') expect = """\ @@ -75,16 +67,10 @@ foo/bar/b.class test.must_contain_all_lines(test.stdout(), [expect]) - - test.run(arguments = '-c') - - test.write('SConstruct', """\ env = Environment(tools = ['javac', 'jar'], - JAVAC = r'%(where_javac)s', - JAR = r'%(where_jar)s', JARCHDIR = None) jar = env.Jar('x.jar', env.Java(target = 'classes', source = 'src')) @@ -92,8 +78,6 @@ jar = env.Jar('x.jar', env.Java(target = 'classes', source = 'src')) test.run(arguments = '.') - - test.run(program = where_jar, arguments = 'tf x.jar') expect = """\ @@ -102,9 +86,6 @@ classes/foo/bar/b.class """ test.must_contain_all_lines(test.stdout(), [expect]) - - - test.pass_test() # Local Variables: diff --git a/test/Java/source-files.py b/test/Java/source-files.py index bf263cf..ab395a0 100644 --- a/test/Java/source-files.py +++ b/test/Java/source-files.py @@ -35,12 +35,8 @@ _python_ = TestSCons._python_ test = TestSCons.TestSCons() -where_javac, java_version = test.java_where_javac() - - test.write('SConstruct', """ -env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%(where_javac)s') +env = Environment(tools = ['javac', 'javah']) env.Java(target = 'class1', source = 'com/Example1.java') env.Java(target = 'class2', source = ['com/Example2.java', 'com/Example3.java']) """ % locals()) diff --git a/test/Java/swig-dependencies.py b/test/Java/swig-dependencies.py index bd7a576..a3af9ec 100644 --- a/test/Java/swig-dependencies.py +++ b/test/Java/swig-dependencies.py @@ -40,7 +40,6 @@ if not swig: where_javac, java_version = test.java_where_javac() where_javah = test.java_where_javah() -#where_jar = test.java_where_jar() where_java_include=test.java_where_includes() @@ -51,12 +50,10 @@ test.subdir(['foo'], test.write(['SConstruct'], """\ import os -env = Environment(ENV = os.environ, - CPPPATH=%(where_java_include)s, - JAVAC = r'%(where_javac)s', - JAVAH = r'%(where_javah)s') - -env.Append(CPPFLAGS = ' -g -Wall') +env = Environment(ENV = os.environ) +if env['PLATFORM'] != 'win32': + env.Append(CPPFLAGS = ' -g -Wall') +env['CPPPATH'] ='$JAVAINCLUDES' Export('env') @@ -79,13 +76,28 @@ int fooAdd(int a, int b) { """) test.write(['foo', 'foo.h'], """\ +#ifdef _MSC_VER +__declspec(dllexport) +#endif int fooAdd(int, int); """) test.write(['java', 'Java_foo_interface.i'], """\ #include "foo.h" +#include <windows.i> + %module foopack + +%{ + +#ifdef _MSC_VER +__declspec(dllexport) +#endif +int hello(){ + return 1; +} +%} """) test.write(['java', 'SConscript'], """\ @@ -103,7 +115,7 @@ libadd = ['foo',] libpath = ['#foo',] #swigflags = '-c++ -java -Wall -package foopack -Ifoo' -swigflags = '-c++ -java -Wall -Ifoo' +swigflags = '-c++ -java -Wall -Ifoo -DTEST_$PLATFORM' Java_foo_interface = env.SharedLibrary( 'Java_foo_interface', diff --git a/test/Libs/SharedLibrary.py b/test/Libs/SharedLibrary.py index eac575c..cc3fa66 100644 --- a/test/Libs/SharedLibrary.py +++ b/test/Libs/SharedLibrary.py @@ -30,6 +30,7 @@ import sys import TestSCons test = TestSCons.TestSCons() +test.verbose_set(1) test.write('SConstruct', """ import sys diff --git a/testing/framework/TestCmd.py b/testing/framework/TestCmd.py index 9499ff4..96b8b5d 100644 --- a/testing/framework/TestCmd.py +++ b/testing/framework/TestCmd.py @@ -1612,7 +1612,8 @@ class TestCmd(object): new = os.path.join(self.workdir, sub) try: os.mkdir(new) - except OSError: + except OSError as e: + print("Got error :%s"%e) pass else: count = count + 1 diff --git a/testing/framework/TestSCons.py b/testing/framework/TestSCons.py index 5ae6846..feadef9 100644 --- a/testing/framework/TestSCons.py +++ b/testing/framework/TestSCons.py @@ -857,11 +857,15 @@ class TestSCons(TestCommon): fmt = "Could not find javac for Java version %s, skipping test(s).\n" self.skip_test(fmt % version) else: - m = re.search(r'javac (\d\.\d)', self.stderr()) + m = re.search(r'javac (\d\.*\d)', self.stderr()) + # Java 11 outputs this to stdout + if not m: + m = re.search(r'javac (\d\.*\d)', self.stdout()) + if m: version = m.group(1) self.javac_is_gcj = False - elif self.stderr().find('gcj'): + elif self.stderr().find('gcj') != -1: version='1.2' self.javac_is_gcj = True else: |