This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: PR 2874
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Subject: Patch: PR 2874
- From: Tom Tromey <tromey at redhat dot com>
- Date: 08 Jun 2001 16:26:13 -0600
- Reply-To: tromey at redhat dot com
I'm checking this in on the trunk.
It changes the test suite to clean up after itself.
It deletes files when a test succeeds.
This fixes PR 2874.
2001-06-08 Tom Tromey <tromey@redhat.com>
Fix for PR libgcj/2874:
* libjava.mauve/mauve.exp (gcj_run_mauve_tests): New proc.
(test_mauve): Return 0 on failure.
* lib/libjava.exp (test_libjava_from_source): Remove generated
files if test is successful.
(test_libjava_from_javac): Likewise.
(gcj_cleanup): New proc.
Tom
Index: lib/libjava.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v
retrieving revision 1.28
diff -u -r1.28 libjava.exp
--- libjava.exp 2001/06/06 02:53:52 1.28
+++ libjava.exp 2001/06/08 22:11:04
@@ -188,6 +188,21 @@
return ""
}
+# Remove a bunch of files.
+proc gcj_cleanup {args} {
+ foreach file $args {
+ if {[string match *.o $file]} {
+ verbose "removing [file rootname $file].lo"
+ file delete -force [file rootname $file].lo
+ }
+ file delete -force -- $file
+ verbose "removing $file"
+ }
+ # It is simplest to do this instead of trying to figure out what
+ # bits in .libs ought to be removed.
+ catch {system "rm -rf .libs"}
+}
+
# Compute arguments needed for compiler. MODE is a libtool mode:
# either compile or link.
proc libjava_arguments {{mode compile}} {
@@ -383,6 +398,8 @@
set errname "$errname $compile_args"
}
+ set removeList [list $executable]
+
set x [prune_warnings \
[libjava_tcompile $srcfile "$executable" $target $args]]
if {[info exists opts(xfail-gcj)]} {
@@ -393,6 +410,7 @@
if {[info exists opts(shouldfail)]} {
pass "$errname compilation from source"
+ eval gcj_cleanup $removeList
return
}
@@ -419,9 +437,11 @@
untested "$errname execution from source compiled test"
untested "$errname output from source compiled test"
}
+ eval gcj_cleanup $removeList
return
}
if {[info exists opts(no-link)]} {
+ eval gcj_cleanup $removeList
return
}
@@ -467,6 +487,7 @@
}
if { $passed == 1 } {
pass "$errname output from source compiled test"
+ eval gcj_cleanup $removeList
} else {
clone_output "expected was $expected"
clone_output "output was $output"
@@ -542,6 +563,8 @@
}
pass "$errname byte compilation"
+ set removeList {}
+
# Find name to use for --main, and name of all class files.
set jvscan [find_jvscan]
verbose "jvscan is $jvscan"
@@ -573,6 +596,8 @@
lappend class_files $objdir/$file.class
}
+ eval lappend removeList $class_files
+
# Usually it is an error for a test program not to have a `main'
# method. However, for no-exec tests it is ok. Treat no-link
# like no-exec here.
@@ -615,18 +640,20 @@
set executable [file rootname [file tail $c_file]].o
set x [prune_warnings \
[libjava_tcompile $c_file "$executable" $type $args]]
+ lappend removeList $executable
if {$x != ""} {
break
}
}
} else {
- # This is no evil: we de-listify CLASS_FILES so that we can
+ # This is so evil: we de-listify CLASS_FILES so that we can
# turn around and quote the `$' in it for the shell. I really
# hate DejaGNU. It is so !@#$!@# unpredictable.
set hack ""
foreach stupid $class_files {
set hack "$hack $stupid"
}
+ lappend removeList $executable
set x [prune_warnings \
[libjava_tcompile $hack "$executable" $type $args]]
}
@@ -650,6 +677,7 @@
untested "$errname execution from bytecode->native test"
untested "$errname output from bytecode->native test"
}
+ eval gcj_cleanup $removeList
return
}
@@ -662,7 +690,7 @@
$status "$errname execution from bytecode->native test"
if { $status != "pass" } {
untested "$errname output from bytecode->native test"
- return;
+ return
}
verbose "resultfile is $resultfile"
@@ -695,6 +723,7 @@
}
if { $passed == 1 } {
pass "$errname output from bytecode->native test"
+ eval gcj_cleanup $removeList
} else {
clone_output "expected was $expected"
clone_output "output was $output"
Index: libjava.mauve/mauve.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp,v
retrieving revision 1.12
diff -u -r1.12 mauve.exp
--- mauve.exp 2001/02/08 12:04:57 1.12
+++ mauve.exp 2001/06/08 22:11:04
@@ -52,13 +52,14 @@
return [lsort [array names uses]]
}
-# Run all the Mauve tests.
+# Run all the Mauve tests. Return 1 on success, 0 on any failure. If
+# the tests are skipped, that is treated like success.
proc test_mauve {} {
global srcdir objdir subdir env
if {! [info exists env(MAUVEDIR)]} then {
verbose "MAUVEDIR not set; not running Mauve tests"
- return
+ return 1
}
# Run in subdir so we don't overwrite our own Makefile.
@@ -95,7 +96,7 @@
} msg]} then {
fail "Mauve configure"
verbose "configure failed with $msg"
- return
+ return 0
}
pass "Mauve configure"
@@ -114,14 +115,14 @@
} msg]} then {
fail "Mauve build"
verbose "build failed with $msg"
- return
+ return 0
}
pass "Mauve build"
set srcfile $full_srcdir/$subdir/DejaGNUTestHarness.java
if {! [bytecompile_file $srcfile [pwd] $env(MAUVEDIR):[pwd]]} then {
fail "Compile DejaGNUTestHarness.java"
- return
+ return 0
}
pass "Compile DejaGNUTestHarness.java"
@@ -149,9 +150,10 @@
lappend objlist $obj
}
if {! $ok} then {
- return
+ return 0
}
+ set proc_ok 1
set Executable DejaGNUTestHarness
foreach file $choices {
# Turn `java/lang/Foo.java' into `java.lang.Foo'.
@@ -174,12 +176,14 @@
}
}
if {! $ok} then {
+ set proc_ok 0
continue
}
set x [prune_warnings [target_compile [concat $uses($file) $objlist] \
$Executable executable $link_args]]
if {$x != ""} then {
+ set proc_ok 0
fail "Link for $class"
continue
}
@@ -197,23 +201,28 @@
if {$what == "PASS" || $what == "XPASS"} then {
pass $msg
} else {
+ set proc_ok 0
fail $msg
}
}
}
}
+
+ return $proc_ok
}
# Run all the Mauve tests in a sim environment. In this case, the
# program cannot use argv[] because there's no way to pass in the
# command line, so tha name of the class to test is substituted by
-# patching the source of the DejaGNUTestHarness.
+# patching the source of the DejaGNUTestHarness. Return 1 on success,
+# 0 on any failure. If the tests are skipped, that is treated like
+# success.
proc test_mauve_sim {} {
global srcdir subdir env
if {! [info exists env(MAUVEDIR)]} then {
verbose "MAUVEDIR not set; not running Mauve tests"
- return
+ return 1
}
# Run in subdir so we don't overwrite our own Makefile.
@@ -230,7 +239,7 @@
} msg]} then {
fail "Mauve configure"
verbose "configure failed with $msg"
- return
+ return 0
}
pass "Mauve configure"
@@ -249,7 +258,7 @@
} msg]} then {
fail "Mauve build"
verbose "build failed with $msg"
- return
+ return 0
}
pass "Mauve build"
@@ -279,11 +288,12 @@
lappend objlist $obj
}
if {! $ok} then {
- return
+ return 0
}
lappend objlist gnu/testlet/DejaGNUTestHarness.o
+ set proc_ok 1
set Executable DejaGNUTestHarness
foreach file $choices {
# Turn `java/lang/Foo.java' into `java.lang.Foo'.
@@ -307,6 +317,7 @@
}
}
if {! $ok} then {
+ set proc_ok 0
continue
}
@@ -328,7 +339,7 @@
if {! [bytecompile_file [pwd]/gnu/testlet/$srcfile [pwd]/gnu/testlet \
$env(MAUVEDIR):[pwd]]} then {
fail "Compile DejaGNUTestHarness.java"
- return
+ return 0
}
set x [prune_warnings \
@@ -336,12 +347,14 @@
gnu/testlet/DejaGNUTestHarness.o object $compile_args]]
if {$x != ""} then {
fail "Compile DejaGNUTestHarness.java"
+ set proc_ok 0
continue
- }
+ }
set x [prune_warnings [target_compile [concat $uses($file) $objlist] \
$Executable executable $link_args]]
if {$x != ""} then {
+ set proc_ok 0
fail "Link for $class"
continue
}
@@ -359,19 +372,33 @@
if {$what == "PASS" || $what == "XPASS"} then {
pass $msg
} else {
+ set proc_ok 0
fail $msg
}
}
}
}
+
+ return $proc_ok
}
-# The test_mauve* procs will change the current directory. It's
-# simpler to fix this up here than to keep track of this in the procs.
-set here [pwd]
-if { [board_info target exists is_simulator] } {
- test_mauve_sim
-} else {
- test_mauve
+proc gcj_run_mauve_tests {} {
+ # The test_mauve* procs will change the current directory. It's
+ # simpler to fix this up here than to keep track of this in the
+ # procs.
+ set here [pwd]
+ if { [board_info target exists is_simulator] } {
+ set r [test_mauve_sim]
+ } else {
+ set r [test_mauve]
+ }
+ cd $here
+
+ if {$r} {
+ # No need to keep the build around. FIXME: this knows how the
+ # tests work. This whole file could use a rewrite.
+ system "rm -rf mauve-build"
+ }
}
-cd $here
+
+gcj_run_mauve_tests