jar.exp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # Tests for .jar files.
  2. # Compile a single .jar file to an executable.
  3. # Returns 0 on failure.
  4. proc gcj_jar_link {jarfile mainclass} {
  5. }
  6. proc gcj_jar_compile_one {jarfile mainclass} {
  7. set base [file rootname [file tail $jarfile]]
  8. set out [file rootname $jarfile].out
  9. if {! [gcj_link $base $mainclass [list $jarfile]]} {
  10. return
  11. }
  12. gcj_invoke $base $out {}
  13. }
  14. proc gcj_jar_interpret {jarfile} {
  15. global INTERPRETER srcdir
  16. set gij [libjava_find_gij]
  17. set errname [dg-trim-dirname $srcdir $jarfile]
  18. # libjava_find_gij will return "" if it couldn't find the
  19. # program; in this case we want to skip the test.
  20. if {$INTERPRETER != "yes" || $gij == ""} {
  21. untested "$errname execution - gij test"
  22. untested "$errname output - gij test"
  23. return
  24. }
  25. set opts(_) {}
  26. set out [file rootname $jarfile].out
  27. libjava_invoke $errname "gij test" opts $gij {} $out \
  28. "" -jar $jarfile
  29. }
  30. proc gcj_jar_run {} {
  31. global srcdir subdir env
  32. foreach jar [lsort [glob -nocomplain ${srcdir}/${subdir}/*.jar]] {
  33. set xff [file rootname $jar].xfail
  34. set main {}
  35. set interp 1
  36. foreach item [libjava_read_xfail $xff] {
  37. if {[string match main=* $item]} {
  38. set main [string range $item 5 end]
  39. break
  40. } elseif {$item == "no-interpret"} {
  41. set interp 0
  42. }
  43. }
  44. gcj_jar_compile_one $jar $main
  45. if {$interp} {
  46. gcj_jar_interpret $jar
  47. }
  48. }
  49. # When we succeed we remove all our clutter.
  50. eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main ]
  51. # Reset CLASSPATH that we do not look into testsuite/libjava.jar for *.jar
  52. # files which do not belong to the libgcj itself.
  53. set env(CLASSPATH) ""
  54. return 1
  55. }
  56. gcj_jar_run