| # Tests for .jar files. |
| |
| # Compile a single .jar file to an executable. |
| # Returns 0 on failure. |
| proc gcj_jar_link {jarfile mainclass} { |
| } |
| |
| proc gcj_jar_compile_one {jarfile mainclass} { |
| set base [file rootname [file tail $jarfile]] |
| set out [file rootname $jarfile].out |
| |
| if {! [gcj_link $base $mainclass [list $jarfile]]} { |
| return |
| } |
| |
| gcj_invoke $base $out {} |
| } |
| |
| proc gcj_jar_interpret {jarfile} { |
| global INTERPRETER srcdir |
| |
| set gij [libjava_find_gij] |
| # libjava_find_gij will return "" if it couldn't find the |
| # program; in this case we want to skip the test. |
| if {$INTERPRETER != "yes" || $gij == ""} { |
| untested "$jarfile execution - gij test" |
| untested "$jarfile output - gij test" |
| return |
| } |
| |
| set opts(_) {} |
| set out [file rootname $jarfile].out |
| libjava_invoke $jarfile "gij test" opts $gij {} $out \ |
| "" -jar $jarfile |
| } |
| |
| proc gcj_jar_run {} { |
| global srcdir subdir env |
| foreach jar [lsort [glob -nocomplain ${srcdir}/${subdir}/*.jar]] { |
| set xff [file rootname $jar].xfail |
| set main {} |
| set interp 1 |
| foreach item [libjava_read_xfail $xff] { |
| if {[string match main=* $item]} { |
| set main [string range $item 5 end] |
| break |
| } elseif {$item == "no-interpret"} { |
| set interp 0 |
| } |
| } |
| |
| gcj_jar_compile_one $jar $main |
| if {$interp} { |
| gcj_jar_interpret $jar |
| } |
| } |
| # When we succeed we remove all our clutter. |
| eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main ] |
| |
| # Reset CLASSPATH that we do not look into testsuite/libjava.jar for *.jar |
| # files which do not belong to the libgcj itself. |
| set env(CLASSPATH) "" |
| |
| return 1 |
| } |
| |
| gcj_jar_run |