URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [testsuite/] [libjava.mauve/] [mauve.exp] - Rev 766
Go to most recent revision | Compare with Previous | Blame | View Log
# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation.# Written by Tom Tromey <tromey@cygnus.com>.# 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 usesglobal env runtestsset fd [open classes r]set line [read $fd]close $fdforeach 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 $fdset uses($item) {}foreach file $ufiles {set file [file rootname $file].olappend uses($item) $file# Now add all inner classesforeach inner [glob -nocomplain [file rootname $file]$*.class] {# Prevent excessive escaping by replacing $ with a ^ in the .o nameset inner [file rootname $inner].oregsub -all "\\$" $inner "\^" innerlappend 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 srcdirif {[info exists env(MAUVEDIR)]} {return 1} elseif {[file isdirectory $srcdir/libjava.mauve/mauve]} {set env(MAUVEDIR) $srcdir/libjava.mauve/mauvereturn 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 envif {! [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 $srcdirset full_srcdir [pwd]cd $here/mauve-buildglobal env libgcj_jarglobal GCJ_UNDER_TESTglobal TOOL_EXECUTABLEif ![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 $fdset fd [open mauve-libgcj w]puts -nonewline $fd $cclose $fdcatch {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.javaif {! [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 1set objlist {}foreach base [mauve_find_harness_files] {set file $base.classset obj $base.$objextset 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 1set Executable DejaGNUTestHarnessforeach file $choices {# Turn `java/lang/Foo.java' into `java.lang.Foo'.set class [file rootname $file]regsub -all -- / $class . classset ok 1set this_olist {}foreach obj $uses($file) {set obj [file rootname $obj].$objextlappend this_olist $objif {! [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].classregsub -all "\\^" $srcfile "\$" srcfileset x [libjava_prune_warnings \[libjava_tcompile '[pwd]/$srcfile' $obj object $compile_args]]if {$x != ""} then {fail "Compile $obj for $class"set ok 0break}pass "Compile $obj for $class"}}if {! $ok} then {set proc_ok 0continue}set x [libjava_prune_warnings \[libjava_tcompile [concat $this_olist $objlist] \$Executable executable $link_args]]if {$x != ""} then {set proc_ok 0fail "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 0fail $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 envif {! [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 $srcdirset full_srcdir [pwd]cd $here/mauve-buildif {[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 $fdset fd [open mauve-libgcj w]puts -nonewline $fd $cclose $fdcatch {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 1set objlist {}foreach base [mauve_find_harness_files] {set file $base.classset obj $base.oset 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 1set Executable DejaGNUTestHarnessforeach file $choices {# Turn `java/lang/Foo.java' into `java.lang.Foo'.set class [file rootname $file]regsub -all -- / $class . classset ok 1foreach obj $uses($file) {if {! [file exists $obj]} then {verbose "compiling $obj for test of $class"set srcfile [file rootname $obj].classset x [libjava_prune_warnings \[target_compile [pwd]/$srcfile $obj object $compile_args]]if {$x != ""} then {fail "Compile $obj for $class"set ok 0break}pass "Compile $obj for $class"}}if {! $ok} then {set proc_ok 0continue}set infile $full_srcdir/$subdir/DejaGNUTestHarness.javaset srcfile DejaGNUTestHarness.javaset 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 $fclose $dif {! [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 0continue}set x [libjava_prune_warnings \[target_compile [concat $uses($file) $objlist] \$Executable executable $link_args]]if {$x != ""} then {set proc_ok 0fail "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 0fail $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 $hereif {$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
Go to most recent revision | Compare with Previous | Blame | View Log
