| # Run the Jacks test suite. |
| # See http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html |
| |
| load_gcc_lib target-libpath.exp |
| |
| proc gcj_jacks_setup_xfail {ary} { |
| upvar $ary array |
| global srcdir |
| |
| set fd [open $srcdir/libjava.jacks/jacks.xfail] |
| while {! [eof $fd]} { |
| set array([gets $fd]) {} |
| } |
| close $fd |
| } |
| |
| proc gcj_jacks_write {filename} { |
| global GCJ_UNDER_TEST |
| global libgcj_jar |
| global libjava_libgcc_s_path |
| global ld_library_path |
| |
| set gcjl [split $GCJ_UNDER_TEST] |
| set gcj_cmd [lindex $gcjl 0] |
| set rest [join [lreplace $gcjl 0 0]] |
| append rest " -C" |
| |
| set fd [open $filename w] |
| puts $fd "set JAVAC $gcj_cmd" |
| puts $fd "set JAVA_CLASSPATH \"$libgcj_jar\"" |
| puts $fd "set JAVAC_FLAGS [list $rest]" |
| puts $fd "set JAVA [list [libjava_find_gij]]" |
| |
| # Without an explicit limit on the heap size, tests depending on |
| # an OutOfMemoryError (e.g. "15.9.4-runtime-creation-2") can result |
| # in a lot of unnecessary thrashing. |
| puts $fd "set JAVA_FLAGS \"-mx=64m\"" |
| |
| puts $fd "set JAVAC_ENCODING_FLAG --encoding=" |
| puts $fd "set JAVAC_DEPRECATION_FLAG -Wdeprecated" |
| puts $fd "set tcltest::testConstraints(encoding) 1" |
| puts $fd "set tcltest::testConstraints(gcj) 1" |
| puts $fd "set tcltest::testConstraints(assert) 1" |
| # "Time-consuming JVM limitation tests". |
| # puts $fd "set tcltest::testConstraints(jvm) 1" |
| close $fd |
| |
| set ld_library_path $libjava_libgcc_s_path |
| set_ld_library_path_env_vars |
| } |
| |
| proc gcj_jacks_parse {file} { |
| if {[catch {open $file} fd]} { |
| verbose "couldn't parse Jacks output: $fd" |
| return |
| } |
| |
| verbose "Reading jacks.xfail" |
| gcj_jacks_setup_xfail xfails |
| |
| while {! [eof $fd]} { |
| set line [gets $fd] |
| if {[string match RESULT* $line]} { |
| set linelist [split $line] |
| set test [lindex $linelist 1] |
| if {[info exists xfails($test)]} { |
| setup_xfail "*-*-*" |
| } |
| if {[lindex $linelist 2] == "PASSED"} { |
| pass $test |
| } else { |
| fail $test |
| } |
| } |
| } |
| |
| close $fd |
| } |
| |
| proc gcj_jacks_run {} { |
| global srcdir |
| |
| if {! [file isdirectory $srcdir/libjava.jacks/jacks]} { |
| # No tests. |
| verbose "Jacks tests not found" |
| return |
| } |
| |
| # Jacks forces us to do this. You can't run it from a separate |
| # tree. |
| verbose "Copying Jacks..." |
| catch {system "rm -rf jacks"} |
| catch {system "cp -r $srcdir/libjava.jacks/jacks jacks"} |
| |
| set here [pwd] |
| cd jacks |
| |
| verbose "Writing Jacks setup file" |
| gcj_jacks_write gcj_setup |
| |
| verbose "Running Jacks..." |
| # Just ignore error exits from the jacks program. |
| # It will always error exit for us, since don't completely pass. |
| # At the moment jacks has a hardcoded call to tclsh8.3. To override this, |
| # we check here on the version and launch the script directly with the |
| # tclsh$tcl_ver. |
| set tcl_ver [info tclversion] |
| if {[package vcompare $tcl_ver 8.3] >= 0 } { |
| if {[catch {exec tclsh$tcl_ver jacks gcj} msg]} { |
| send_log "Couldn't run jacks: $msg\n" |
| return |
| } |
| gcj_jacks_parse logging/gcj.log |
| } else { |
| send_log "No suitable tclsh found, you need at least version 8.3 or up.\n" |
| return |
| } |
| |
| cd $here |
| } |
| |
| gcj_jacks_run |