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