From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- libjava/testsuite/libjava.mauve/mauve.exp | 446 ++++++++++++++++++++++++++++++ 1 file changed, 446 insertions(+) create mode 100644 libjava/testsuite/libjava.mauve/mauve.exp (limited to 'libjava/testsuite/libjava.mauve/mauve.exp') diff --git a/libjava/testsuite/libjava.mauve/mauve.exp b/libjava/testsuite/libjava.mauve/mauve.exp new file mode 100644 index 000000000..03bbed9fd --- /dev/null +++ b/libjava/testsuite/libjava.mauve/mauve.exp @@ -0,0 +1,446 @@ +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation. +# Written by Tom Tromey . +# Incorporate Mauve into libjava's DejaGNU test suite framework. + +# FIXME: should be able to compile from source as well as from .class. + + +# Compute list of files to compile. Returns list of all files +# representing classes that must be tested. Result parameter `uses' +# maps source file names onto list of objects required for link. +proc mauve_compute_uses {aName} { + upvar $aName uses + global env runtests + + set fd [open classes r] + set line [read $fd] + close $fd + + foreach item [split $line] { + if {$item == ""} then { + continue + } + set item [join [split $item .] /].java + + # User might have specified "mauve.exp=something.java". + if {! [runtest_file_p $runtests $item]} { + continue + } + + # Look for Uses line in source file. + set fd [open $env(MAUVEDIR)/$item r] + set ufiles [list $item] + set dir [file dirname $item] + while {[gets $fd sline] != -1} { + if {[regsub -- {^// Uses:} $sline {} sline]} then { + foreach uf [split $sline] { + if {$uf != ""} then { + lappend ufiles $dir/$uf + } + } + } + } + close $fd + + set uses($item) {} + 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] { + # Prevent excessive escaping by replacing $ with a ^ in the .o name + set inner [file rootname $inner].o + regsub -all "\\$" $inner "\^" inner + lappend uses($item) $inner + } + } + } + + return [lsort [array names uses]] +} + +# Find Mauve sources. At end, env(MAUVEDIR) points to sources. +# Returns 0 if sources not found, 1 otherwise. +proc find_mauve_sources {} { + global env srcdir + + if {[info exists env(MAUVEDIR)]} { + return 1 + } elseif {[file isdirectory $srcdir/libjava.mauve/mauve]} { + set env(MAUVEDIR) $srcdir/libjava.mauve/mauve + return 1 + } + + return 0 +} + +# Find all the harness files and return a list of them, with no +# suffix. +proc mauve_find_harness_files {} { + set result {} + foreach file [glob -nocomplain -- *.class gnu/testlet/*.class] { + lappend result [file root $file] + } + return $result +} + +# 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 {! [find_mauve_sources]} then { + verbose "MAUVEDIR not set; not running Mauve tests" + return 1 + } + + # Run in subdir so we don't overwrite our own Makefile. + catch {system "rm -rf mauve-build"} + file mkdir mauve-build + # Some weirdness to set srcdir correctly. + set here [pwd] + cd $srcdir + set full_srcdir [pwd] + cd $here/mauve-build + + global env libgcj_jar + global GCJ_UNDER_TEST + global TOOL_EXECUTABLE + + if ![info exists GCJ_UNDER_TEST] { + if [info exists TOOL_EXECUTABLE] { + set GCJ_UNDER_TEST $TOOL_EXECUTABLE; + } else { + if [info exists env(GCJ)] { + set GCJ_UNDER_TEST env(GCJ) + } else { + set GCJ_UNDER_TEST "[find_gcj]" + } + } + } + + # Append -B and -I so that libgcj.spec and libgcj.jar are found + # before they're installed. + # Append -Wno-deprecated since Mauve tests lots of deprecated stuff. + set env(GCJ) "$GCJ_UNDER_TEST -Wno-deprecated -B$objdir/../ -I$libgcj_jar" + + if {[catch { + system "$env(MAUVEDIR)/configure --with-gcj 2>&1" + } msg]} then { + fail "Mauve configure" + verbose "configure failed with $msg" + return 0 + } + pass "Mauve configure" + + # Copy appropriate tags file locally. + set fd [open $full_srcdir/../mauve-libgcj r] + set c [read $fd] + close $fd + set fd [open mauve-libgcj w] + puts -nonewline $fd $c + close $fd + + catch {system "ln -s $full_srcdir/libjava.mauve/xfails xfails"} + + if {[catch { + system "make KEYS=libgcj classes.stamp 2>&1" + } msg]} then { + fail "Mauve build" + verbose "build failed with $msg" + 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 0 + } + pass "Compile DejaGNUTestHarness.java" + + # Compute list of files to test, and also all files to build. + set choices [mauve_compute_uses uses] + + # Compute flags to use to do the build. + set compile_args [libjava_arguments] + set link_args [concat [libjava_arguments link] \ + [list "additional_flags=--main=DejaGNUTestHarness"]] + + if {[string match "*libtool*" $compile_args]} { + set objext lo + } else { + set objext o + } + + set ok 1 + set objlist {} + foreach base [mauve_find_harness_files] { + set file $base.class + set obj $base.$objext + set x [libjava_prune_warnings \ + [target_compile [pwd]/$file $obj object $compile_args]] + if {$x != ""} then { + fail "Compile $obj" + set ok 0 + } else { + pass "Compile $obj" + } + lappend objlist $obj + } + if {! $ok} then { + return 0 + } + + set proc_ok 1 + set Executable DejaGNUTestHarness + foreach file $choices { + # Turn `java/lang/Foo.java' into `java.lang.Foo'. + set class [file rootname $file] + regsub -all -- / $class . class + + set ok 1 + set this_olist {} + foreach obj $uses($file) { + set obj [file rootname $obj].$objext + lappend this_olist $obj + if {! [file exists $obj]} then { + verbose "compiling $obj for test of $class" + # The .class file does contain a $, but we can quote it between "'"s. + set srcfile [file rootname $obj].class + regsub -all "\\^" $srcfile "\$" srcfile + set x [libjava_prune_warnings \ + [libjava_tcompile '[pwd]/$srcfile' $obj object $compile_args]] + if {$x != ""} then { + fail "Compile $obj for $class" + set ok 0 + break + } + pass "Compile $obj for $class" + } + } + if {! $ok} then { + set proc_ok 0 + continue + } + + set x [libjava_prune_warnings \ + [libjava_tcompile [concat $this_olist $objlist] \ + $Executable executable $link_args]] + if {$x != ""} then { + set proc_ok 0 + fail "Link for $class" + continue + } + pass "Link for $class" + + set result [libjava_load [pwd]/DejaGNUTestHarness \ + "$env(MAUVEDIR) $class" ""] + + # Extract pass/failure info from output. + foreach line [split [lindex $result 1] \n] { + if {[regexp -- {^(PASS|FAIL|XFAIL|XPASS): (.*)$} $line ignore what msg]} then { + if {$what == "XFAIL" || $what == "XPASS"} then { + setup_xfail *-*-* + } + 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. 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 {! [find_mauve_sources]} then { + verbose "MAUVEDIR not set; not running Mauve tests" + return 1 + } + + # Run in subdir so we don't overwrite our own Makefile. + catch {system "rm -rf mauve-build"} + file mkdir mauve-build + # Some weirdness to set srcdir correctly. + set here [pwd] + cd $srcdir + set full_srcdir [pwd] + cd $here/mauve-build + + if {[catch { + system "$env(MAUVEDIR)/configure --with-gcj 2>&1" + } msg]} then { + fail "Mauve configure" + verbose "configure failed with $msg" + return 0 + } + pass "Mauve configure" + + # Copy appropriate tags file locally. + set fd [open $full_srcdir/../mauve-libgcj r] + set c [read $fd] + close $fd + set fd [open mauve-libgcj w] + puts -nonewline $fd $c + close $fd + + catch {system "ln -s $full_srcdir/libjava.mauve/xfails xfails"} + + if {[catch { + system "make KEYS=libgcj classes.stamp 2>&1" + } msg]} then { + fail "Mauve build" + verbose "build failed with $msg" + return 0 + } + pass "Mauve build" + + # Compute list of files to test, and also all files to build. + set choices [mauve_compute_uses uses] + + # Compute flags to use to do the build. + set compile_args [libjava_arguments] + set link_args [concat [libjava_arguments link] \ + [list "additional_flags=--main=DejaGNUTestHarness"]] + + set ok 1 + set objlist {} + foreach base [mauve_find_harness_files] { + set file $base.class + set obj $base.o + set x [libjava_prune_warnings \ + [target_compile [pwd]/$file $obj object $compile_args]] + if {$x != ""} then { + fail "Compile $obj" + set ok 0 + } else { + pass "Compile $obj" + } + lappend objlist $obj + } + if {! $ok} then { + return 0 + } + + set proc_ok 1 + set Executable DejaGNUTestHarness + foreach file $choices { + # Turn `java/lang/Foo.java' into `java.lang.Foo'. + + set class [file rootname $file] + regsub -all -- / $class . class + + set ok 1 + foreach obj $uses($file) { + if {! [file exists $obj]} then { + 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]] + if {$x != ""} then { + fail "Compile $obj for $class" + set ok 0 + break + } + pass "Compile $obj for $class" + } + } + if {! $ok} then { + set proc_ok 0 + continue + } + + set infile $full_srcdir/$subdir/DejaGNUTestHarness.java + set srcfile DejaGNUTestHarness.java + set f [open $infile r] + set d [open gnu/testlet/$srcfile w] + while {[gets $f line] >= 0} { + if [regexp {harness\.runtest \(args\[1\]\)} $line] then { + regsub {args\[1\]} $line "\"$class\"" out + } else { + set out $line + } + puts $d $out + } + close $f + close $d + + if {! [bytecompile_file [pwd]/gnu/testlet/$srcfile [pwd]/gnu/testlet \ + $env(MAUVEDIR):[pwd]]} then { + fail "Compile DejaGNUTestHarness.java" + return 0 + } + + set x [libjava_prune_warnings \ + [target_compile DejaGNUTestHarness.class \ + DejaGNUTestHarness.o object $compile_args]] + if {$x != ""} then { + fail "Compile DejaGNUTestHarness.java" + set proc_ok 0 + continue + } + + set x [libjava_prune_warnings \ + [target_compile [concat $uses($file) $objlist] \ + $Executable executable $link_args]] + if {$x != ""} then { + set proc_ok 0 + fail "Link for $class" + continue + } + pass "Link for $class" + + set result [libjava_load [pwd]/DejaGNUTestHarness \ + "$env(MAUVEDIR) $class" ""] + + # Extract pass/failure info from output. + foreach line [split [lindex $result 1] \n] { + if {[regexp -- {^(PASS|FAIL|XFAIL|XPASS): (.*)$} $line ignore what msg]} then { + if {$what == "XFAIL" || $what == "XPASS"} then { + setup_xfail *-*-* + } + if {$what == "PASS" || $what == "XPASS"} then { + pass $msg + } else { + set proc_ok 0 + fail $msg + } + } + } + } + + return $proc_ok +} + +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" + } +} + +gcj_run_mauve_tests -- cgit v1.2.3