Mauve, inner classes and dejagnu magic
Mark Wielaard
mark@klomp.org
Fri Feb 14 16:57:00 GMT 2003
Hi,
I am trying to teach the mauve.exp file about inner classes when
compiling mauve. Normally I rewrite the Mauve tests to not use inner
classes, but in this case the whole point of the test is testing inner
classes (and if I get this working I will never again have to rewrite
Mauve tests just because the [...] dejagnu script doesn't like it).
I believe I am almost there with the following patch:
--- libjava.mauve/mauve.exp 13 Jan 2003 00:23:27 -0000 1.17.2.1
+++ libjava.mauve/mauve.exp 14 Feb 2003 16:51:27 -0000
@@ -46,6 +46,11 @@
foreach file $ufiles {
set file [file rootname $file].o
lappend uses($item) $file
+ # Now add all inner classes
+ foreach inner [glob -nocomplain [file rootname $file]$*.class] {
+ set inner [file rootname $inner].o
+ lappend uses($item) $inner
+ }
}
}
@@ -181,7 +186,7 @@
verbose "compiling $obj for test of $class"
set srcfile [file rootname $obj].class
set x [libjava_prune_warnings \
- [target_compile [pwd]/$srcfile $obj object $compile_args]]
+ [libjava_tcompile [pwd]/$srcfile $obj object $compile_args]]
if {$x != ""} then {
fail "Compile $obj for $class"
set ok 0
@@ -196,7 +201,7 @@
}
set x [libjava_prune_warnings \
- [target_compile [concat $uses($file) $objlist] \
+ [libjava_tcompile [concat $uses($file) $objlist] \
$Executable executable $link_args]]
if {$x != ""} then {
set proc_ok 0
It now correctly finds the inner classes and succeeds to compile them.
But then linking fails:
Executing on host: /opt/src/gcc33-obj/i686-pc-linux-gnu/libjava/testsuite/../libtool --silent --tag=GCJ --mode=compile /opt/src/gcc33-obj/gcc/gcj -B/opt/src/gcc33-obj/gcc/ --encoding=UTF-8 -B/opt/src/gcc33-obj/i686-pc-linux-gnu//libjava/ -c -o gnu/testlet/java/lang/Class/ClassTest.o /opt/src/gcc33-obj/i686-pc-linux-gnu/libjava/testsuite/mauve-build/gnu/testlet/java/lang/Class/ClassTest.class
(timeout = 300)
PASS: Compile gnu/testlet/java/lang/Class/ClassTest.o for gnu.testlet.java.lang.Class.ClassTest
Executing on host: /opt/src/gcc33-obj/i686-pc-linux-gnu/libjava/testsuite/../libtool --silent --tag=GCJ --mode=compile /opt/src/gcc33-obj/gcc/gcj -B/opt/src/gcc33-obj/gcc/ --encoding=UTF-8 -B/opt/src/gcc33-obj/i686-pc-linux-gnu//libjava/ -c -o gnu/testlet/java/lang/Class/ClassTest\$privatetype.o /opt/src/gcc33-obj/i686-pc-linux-gnu/libjava/testsuite/mauve-build/gnu/testlet/java/lang/Class/ClassTest\$privatetype.class (timeout = 300)
PASS: Compile gnu/testlet/java/lang/Class/ClassTest$privatetype.o for gnu.testlet.java.lang.Class.ClassTest
Executing on host: /opt/src/gcc33-obj/i686-pc-linux-gnu/libjava/testsuite/../libtool --silent --tag=GCJ --mode=link /opt/src/gcc33-obj/gcc/gcj -B/opt/src/gcc33-obj/gcc/ --encoding=UTF-8 -B/opt/src/gcc33-obj/i686-pc-linux-gnu//libjava/ gnu/testlet/java/lang/Class/ClassTest.o {gnu/testlet/java/lang/Class/ClassTest\$privatetype.o} DejaGNUTestHarness.o gnu/testlet/SimpleTestHarness.o gnu/testlet/TestHarness.o gnu/testlet/Testlet.o gnu/testlet/ResourceNotFoundException.o gnu/testlet/config.o -no-install --main=DejaGNUTestHarness -g -L/opt/src/gcc33-obj/i686-pc-linux-gnu//libjava/.libs -L/opt/src/gcc33-obj/i686-pc-linux-gnu//boehm-gc/.libs -lm -o DejaGNUTestHarness (timeout = 300)
gcj: gnu/testlet/java/lang/Class/ClassTest$privatetype.o: No such file or directory
compiler exited with status 1
output is:
gcj: gnu/testlet/java/lang/Class/ClassTest$privatetype.o: No such file or directory
FAIL: Link for gnu.testlet.java.lang.Class.ClassTest
There actually is a ClassTest$privatetype.lo file and a
./libs/ClassTest$privatetype.o file but somehow libtool doesn't provide
it to the gcj command :{
Any hints or tips?
Cheers,
Mark
More information about the Java
mailing list