+2000-12-15 Tom Tromey <tromey@redhat.com>
+
+ * lib/libjava.exp (libjava_tcompile): New proc.
+ (test_libjava_from_source): Use it.
+ (test_libjava_from_javac): Likewise.
+ (find_javac): New proc.
+ (bytecompile_file): Use it.
+ (test_libjava_from_javac): Handle `xfail-gcjC' tag. If no-exec
+ set, then don't link even if program has a `main'.
+
+ * libjava.compile/static_3.xfail: New file.
+ * libjava.compile/weirddecl.xfail: New file.
+ * libjava.compile/static_2.xfail: New file.
+ * libjava.compile/not_a_redef.xfail: New file.
+ * libjava.compile/inner_1.xfail: New file.
+ * libjava.compile/assignment_2.xfail: New file.
+ * libjava.compile/assignment.xfail: New file.
+ * libjava.compile/abstr.xfail: New file.
+ * libjava.compile/PR375.xfail: New file.
+ * libjava.compile/PR374.java: New file.
+ * libjava.compile/PR238.xfail: New file.
+ * libjava.compile/PR208.xfail: New file.
+ * libjava.compile/PR207.xfail: New file.
+
2000-11-30 Tom Tromey <tromey@cygnus.com>
* libjava.lang/instinit.java: Don't extend `foo'.
set tmpdir "/tmp"
}
+# This is like `target_compile' but it does some surgery to work
+# around stupid DejaGNU bugs. In particular DejaGNU has very poor
+# quoting, so for instance a `$' will be re-evaluated at spawn time.
+# We don't want that.
+proc libjava_tcompile {source destfile type options} {
+ # This strange-looking expression really does quote the `$'.
+ regsub -all -- {\$} $source {\$} source
+ regsub -all -- {\$} $destfile {\$} destfile
+ verbose "Now source = $source"
+ verbose "Now destfile = $destfile"
+ return [target_compile $source $destfile $type $options]
+}
+
# Read an `xfail' file if it exists. Returns a list of xfail tokens.
proc libjava_read_xfail {file} {
if {! [file exists $file]} {
return [libjava_find_program gcjh]
}
-proc bytecompile_file { file objdir {classpath {}} } {
- global env
- global SUN_JAVAC
- global GCJ_UNDER_TEST
- set dirname [file dirname $file]
-
+proc find_javac {} {
+ global SUN_JAVAC GCJ_UNDER_TEST env
# If JDK doesn't run on your platform but some other
# JDK-compatible javac does, you may set SUN_JAVAC to point to it.
# One of the most important properties of a SUN_JAVAC is that it
# those that have. For example, Pizza won't do it, but you can
# use `kaffe sun.tools.javac.Main', if you have Sun's classes.zip
# in the kaffe's default search path.
- if ![info exists SUN_JAVAC] {
- if [info exists env(SUN_JAVAC)] {
+ if {![info exists SUN_JAVAC]} {
+ if {[info exists env(SUN_JAVAC)]} {
set SUN_JAVAC $env(SUN_JAVAC)
} else {
set SUN_JAVAC "$GCJ_UNDER_TEST -C"
}
}
+ return $SUN_JAVAC
+}
+
+proc bytecompile_file { file objdir {classpath {}} } {
+ global env
+ set dirname [file dirname $file]
+ set javac [find_javac]
catch {unset env(CLASSPATH)}
if {$classpath != ""} then {
set env(CLASSPATH) $classpath
if {[catch {
set here [pwd]
cd $dirname
- set q [eval exec "$SUN_JAVAC [list $file] -d $objdir 2>@ stdout"]
+ set q [eval exec "$javac [list $file] -d $objdir 2>@ stdout"]
cd $here
# "return" a result
set q $q
}
set x [prune_warnings \
- [target_compile $srcfile "$executable" $target $args]]
+ [libjava_tcompile $srcfile "$executable" $target $args]]
if {[info exists opts(xfail-gcj)]} {
setup_xfail *-*-*
}
# bytecompile files with Sun's compiler for now.
set bc_ok [bytecompile_file $srcfile $objdir]
- # FIXME: assumes we are using javac to compile to bytecode.
- # This is not always the case.
- if {[info exists opts(xfail-javac)]} {
+
+ set javac [find_javac]
+ # This is an ugly heuristic but it will have to do.
+ if {[string match *gcj* $javac]} {
+ set tag gcjC
+ } else {
+ set tag javac
+ }
+ if {[info exists opts(xfail-$tag)]} {
setup_xfail *-*-*
}
if {! $bc_ok} then {
verbose "jvscan is $jvscan"
set main_name [string trim \
[prune_warnings \
- [target_compile $srcfile "" none \
+ [libjava_tcompile $srcfile "" none \
"compiler=$jvscan additional_flags=--print-main"]]]
verbose "main name is $main_name"
set class_out [string trim \
[prune_warnings \
- [target_compile $srcfile "" none \
+ [libjava_tcompile $srcfile "" none \
"compiler=$jvscan additional_flags=--list-class"]]]
verbose "class list is $class_out"
set opts(no-exec) x
}
set largs {}
- if {$main_name == ""} {
- if {! [info exists opts(no-exec)]} {
- perror "No `main' given in program $errname"
- return
- } else {
- set type object
- set mode compile
- }
+
+ if {[info exists opts(no-exec)]} {
+ set type object
+ set mode compile
+ } elseif {$main_name == ""} {
+ perror "No `main' given in program $errname"
+ return
} else {
set type executable
lappend largs "additional_flags=--main=$main_name"
foreach c_file $class_files {
set executable [file rootname [file tail $c_file]].o
set x [prune_warnings \
- [target_compile $c_file "$executable" $type $args]]
+ [libjava_tcompile $c_file "$executable" $type $args]]
if {$x != ""} {
break
}
}
} else {
set x [prune_warnings \
- [target_compile $class_files "$executable" $type $args]]
+ [libjava_tcompile $class_files "$executable" $type $args]]
}
if {[info exists opts(xfail-byte)]} {
setup_xfail *-*-*