This is the mail archive of the java-patches@sourceware.cygnus.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Testsuite engine improvements


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]