This is the mail archive of the
java-patches@sourceware.cygnus.com
mailing list for the Java project.
Testsuite engine improvements
- To: java-patches@sourceware.cygnus.com
- Subject: Testsuite engine improvements
- From: Alexandre Oliva <oliva@dcc.unicamp.br>
- Date: 19 Jul 1999 04:05:34 -0300
Hi again!
I've had a lot of trouble getting the libgcj testsuite to run
correctly for me. First of all, before libgcj was ever installed, gcj
wouldn't find libgcj.spec, so I had to arrange that -B$objdir/../ was
passed to it. It also printed lots of linker error messages because
libstdc++.so was not installed in a standard library path, and
LD_LIBRARY_PATH was overwritten, so I arranged to preserve it. Then,
gcj failed to find libgcj.zip, so I added $objdir/../libgcj.zip to the
CLASSPATH, and -I$objdir/../libgcj.zip to mauve.exp's GCJ. I still
couldn't get some tests to run correctly: because srcdir!=objdir,
libjava.compile wouldn't find sources in the `support' directory, so I
added $srcdir/$subdir to the CLASSPATH too. At last, on some
platforms that didn't have JDK, `javac' was Kaffe+Pizza, but Pizza
wouldn't create all class files, as expected, so I ended up having to
find some way to run JDK's javac with Kaffe, by setting an environment
variable.
Here's the patch. I hope you don't need a copyright assignment for
this kind of stuff.
Index: libjava/testsuite/ChangeLog
from Alexandre Oliva <oliva@dcc.unicamp.br>
* lib/libjava.exp (bytecompile_file): Use `env(SUN_JAVAC)', that
defaults to javac, as Sun-javac compiler or compatible.
(libjava_init): Get GCJ from environment if neither GCJ_UNDER_TEST
nor TOOL_EXECUTABLE are set. Set `original_ld_library_path' from
environment.
(libjava_arguments): Prepend `.' and `$srcdir/$subdir' to
CLASSPATH, for `support' sources. Search for libgcj.spec in
`$objdir/..', by adding -B to GCJ_UNDER_TEST. Append
original_ld_library_path to ld_library_path.
* libjava.mauve/mauve.exp (test_mauve): Set `env(GCJ)' from
GCJ_UNDER_TEST, calculated just like in libjava.exp.
Index: libjava/testsuite/lib/libjava.exp
===================================================================
RCS file: /cvs/java/libgcj/libjava/testsuite/lib/libjava.exp,v
retrieving revision 1.5.2.1
diff -u -r1.5.2.1 libjava.exp
--- libjava/testsuite/lib/libjava.exp 1999/07/06 15:45:56 1.5.2.1
+++ libjava/testsuite/lib/libjava.exp 1999/07/19 06:44:02
@@ -38,13 +38,30 @@
proc bytecompile_file { file objdir {classpath {}} } {
global env
+ global SUN_JAVAC
set dirname [file dirname $file];
+ # 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
+ # must create class-files even for classes that have not been
+ # specified in the command line, but that were needed to compile
+ # 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)] {
+ set SUN_JAVAC $env(SUN_JAVAC)
+ } else {
+ set SUN_JAVAC "javac"
+ }
+ }
+
catch {unset env(CLASSPATH)}
if {$classpath != ""} then {
set env(CLASSPATH) $classpath
}
- if {[catch {system "cd $dirname; javac $file -d $objdir"} msg]} then {
+ if {[catch {system "cd $dirname; $SUN_JAVAC $file -d $objdir"} msg]} then {
verbose "couldn't compile $file: $msg"
set r 0
} else {
@@ -64,14 +81,30 @@
global libjava_initialized
global GCJ_UNDER_TEST
global TOOL_EXECUTABLE
+ global original_ld_library_path
+ global env
if { $libjava_initialized == 1 } { return; }
if ![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]"
+ }
+ }
+ }
+
+ if [info exists env(LD_LIBRARY_PATH)] {
+ set original_ld_library_path $env(LD_LIBRARY_PATH)
+ } else {
+ if [info exists env(SHLIB_PATH)] {
+ set original_ld_library_path $env(SHLIB_PATH)
} else {
- set GCJ_UNDER_TEST "[find_gcj]"
+ set original_ld_library_path ""
}
}
@@ -129,6 +162,7 @@
global GCJ_UNDER_TEST
global tmpdir
global runtests
+ global env
if [info exists LIBJAVA] {
set libjava $LIBJAVA;
@@ -184,13 +218,14 @@
# then we'd have to do a lot more work.
# Set variables the dynamic linker looks at.
- setenv LD_LIBRARY_PATH $ld_library_path
- setenv SHLIB_PATH $ld_library_path
+ global original_ld_library_path
+ setenv LD_LIBRARY_PATH "$ld_library_path:$original_ld_library_path"
+ setenv SHLIB_PATH "$ld_library_path:$original_ld_library_path"
# Set the CLASSPATH environment variable
- verbose "CLASSPATH is $objdir/.."
+ verbose "CLASSPATH is .:$srcdir/$subdir:$objdir/..:$objdir/../libgcj.zip"
global env
- set env(CLASSPATH) "$objdir/.."
+ set env(CLASSPATH) ".:$srcdir/$subdir:$objdir/..:$objdir/../libgcj.zip"
global wrapper_file wrap_compile_flags;
lappend args "additional_flags=$wrap_compile_flags";
@@ -217,13 +252,15 @@
if {[file exists $d/$x/libtool]} then {
# We have to run silently to avoid DejaGNU lossage.
lappend args \
- "compiler=$d/$x/libtool --silent --mode=$mode $GCJ_UNDER_TEST"
+ "compiler=$d/$x/libtool --silent --mode=$mode $GCJ_UNDER_TEST -B$objdir/../"
set found_compiler 1
break
}
}
if {! $found_compiler} {
- lappend args "compiler=$GCJ_UNDER_TEST"
+ # Append -B$objdir/../ so that we find libgcj.spec before it
+ # is installed.
+ lappend args "compiler=$GCJ_UNDER_TEST -B$objdir/../"
}
return $args
Index: libjava/testsuite/libjava.mauve/mauve.exp
===================================================================
RCS file: /cvs/java/libgcj/libjava/testsuite/libjava.mauve/mauve.exp,v
retrieving revision 1.3.2.2
diff -u -r1.3.2.2 mauve.exp
--- libjava/testsuite/libjava.mauve/mauve.exp 1999/07/01 16:31:47 1.3.2.2
+++ libjava/testsuite/libjava.mauve/mauve.exp 1999/07/19 06:44:03
@@ -49,7 +49,7 @@
# Run all the Mauve tests.
proc test_mauve {} {
- global srcdir subdir env
+ global srcdir objdir subdir env
if {! [info exists env(MAUVEDIR)]} then {
verbose "MAUVEDIR not set; not running Mauve tests"
@@ -64,6 +64,26 @@
cd $srcdir
set full_srcdir [pwd]
cd $here/mauve-build
+
+ global env
+ global GCJ_UNDER_TEST
+ global TOOL_EXECUTABLE
+
+ if ![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.zip are found
+ # before they're installed.
+ set env(GCJ) "$GCJ_UNDER_TEST -B$objdir/../ -I$objdir/../libgcj.zip"
if {[catch {system "$env(MAUVEDIR)/configure --with-gcj"} msg]} then {
fail "Mauve configure"
--
Alexandre Oliva http://www.dcc.unicamp.br/~oliva IC-Unicamp, Bra[sz]il
oliva@{dcc.unicamp.br,guarana.{org,com}} aoliva@{acm.org,computer.org}
oliva@{gnu.org,kaffe.org,{egcs,sourceware}.cygnus.com,samba.org}
** I may forward mail about projects to mailing lists; please use them