natClassLoader.cc (_Jv_PrepareCompiledClass): Renamed from _Jv_InternClassStrings.
authorKresten Krab Thorup <krab@gnu.org>
Wed, 18 Aug 1999 14:16:42 +0000 (14:16 +0000)
committerKresten Krab Thorup <krab@gcc.gnu.org>
Wed, 18 Aug 1999 14:16:42 +0000 (14:16 +0000)
* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Renamed
from _Jv_InternClassStrings.

* prims.cc (_Jv_RunMain): New function.
(JvRunMain): Remove gij-support.

* gij.cc (main): Use _Jv_RunMain.

* java/util/zip/ZipFile.java: Call readDirectory in constructor.

* interpret.cc (PUSHA, PUSHI, PUSHF, PUSHL, PUSHD): Don't store
argument in temp variable.
(continue1): For all op_x2y insns, use temp variable for
intermediate value.  Also remove some comments.

* java/lang/natClass.cc (newInstance): Call _Jv_InitClass.
(forName): Don't call _Jv_InitClass.

* java/lang/Class.java (getResource,getResourceAsStream): Implement.

* java/util/zip/ZipEntry.java (ZipEntry(ZipEntry)): New construcor.

* java/util/jar/JarInputStream.java: New file.

* java/util/jar/JarEntry.java: New file.

* java/util/jar/JarFile.java: New file.

* java/net/URLClassLoader.java: New file.

* java/net/JarURLConnection.java: New file.

* gnu/gcj/protocol/jar/Handler.java: New file.

* gnu/gcj/protocol/jar/Connection.java: New file.

* java/security/SecureClassLoader.java: New file.

* java/lang/ClassLoader.java (parent): New variable.
(ClassLoader (ClassLoader)): new constructor.
(findClass): New method.
(loadClass): Add default 1.2 implementation.
(getSystemResourceAsBytes, getResourceAsBytes): Removed.
(readfully): Removed.

* gnu/gcj/runtime/VMClassLoader.java: Moved from java/lang.
(findSystemClass): New method.
(VMClassLoader): Constructor rewritten.
(init): New method.
All other methods removed.

* java/lang/natClassLoader.cc: Change use of java::lang::VMClassLoader
to gnu::gcj::runtime::VMClassLoader.
(_Jv_InternClassStrings): Use _Jv_ResolvePoolEntry.  Also handle
class entries.
(VMClassLoader::findSystemClass): renamed from findBootClass.

* Makefile.am: Add new files.
(FirstThread.h, ThreadGroup.h): Add _Jv_Main friend.

* Makefile.in: Rebuilt.

From-SVN: r28748

26 files changed:
libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gij.cc
libjava/gnu/gcj/protocol/jar/Connection.java [new file with mode: 0644]
libjava/gnu/gcj/protocol/jar/Handler.java [new file with mode: 0644]
libjava/gnu/gcj/runtime/VMClassLoader.java [new file with mode: 0644]
libjava/include/java-array.h
libjava/interpret.cc
libjava/java/lang/Class.h
libjava/java/lang/Class.java
libjava/java/lang/ClassLoader.java
libjava/java/lang/VMClassLoader.java [deleted file]
libjava/java/lang/natClass.cc
libjava/java/lang/natClassLoader.cc
libjava/java/net/JarURLConnection.java [new file with mode: 0644]
libjava/java/net/URLClassLoader.java [new file with mode: 0644]
libjava/java/security/SecureClassLoader.java [new file with mode: 0644]
libjava/java/util/jar/JarEntry.java [new file with mode: 0644]
libjava/java/util/jar/JarFile.java [new file with mode: 0644]
libjava/java/util/jar/JarInputStream.java [new file with mode: 0644]
libjava/java/util/zip/ZipEntry.java
libjava/java/util/zip/ZipFile.java
libjava/prims.cc
libjava/resolve.cc
libjava/testsuite/Makefile.in

index d4031dc3a81f83f5e52a3307c57b648dd890999b..b4aa1fd8f596da02978f07c9e3530623e2159877 100644 (file)
@@ -1,3 +1,67 @@
+1999-08-18  Kresten Krab Thorup  <krab@gnu.org>
+
+       * java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Renamed
+       from _Jv_InternClassStrings.   
+
+       * prims.cc (_Jv_RunMain): New function.
+       (JvRunMain): Remove gij-support.
+
+       * gij.cc (main): Use _Jv_RunMain.
+
+       * java/util/zip/ZipFile.java: Call readDirectory in constructor.
+
+       * interpret.cc (PUSHA, PUSHI, PUSHF, PUSHL, PUSHD): Don't store
+       argument in temp variable.
+       (continue1): For all op_x2y insns, use temp variable for
+       intermediate value.  Also remove some comments.
+
+       * java/lang/natClass.cc (newInstance): Call _Jv_InitClass.
+       (forName): Don't call _Jv_InitClass.
+
+       * java/lang/Class.java (getResource,getResourceAsStream): Implement.
+
+       * java/util/zip/ZipEntry.java (ZipEntry(ZipEntry)): New construcor.
+
+       * java/util/jar/JarInputStream.java: New file.
+
+       * java/util/jar/JarEntry.java: New file.
+
+       * java/util/jar/JarFile.java: New file.
+
+       * java/net/URLClassLoader.java: New file.
+
+       * java/net/JarURLConnection.java: New file.
+
+       * gnu/gcj/protocol/jar/Handler.java: New file.
+
+       * gnu/gcj/protocol/jar/Connection.java: New file.
+
+       * java/security/SecureClassLoader.java: New file.
+
+       * java/lang/ClassLoader.java (parent): New variable.
+       (ClassLoader (ClassLoader)): new constructor.  
+       (findClass): New method.
+       (loadClass): Add default 1.2 implementation.
+       (getSystemResourceAsBytes, getResourceAsBytes): Removed.
+       (readfully): Removed.
+
+       * gnu/gcj/runtime/VMClassLoader.java: Moved from java/lang. 
+       (findSystemClass): New method.
+       (VMClassLoader): Constructor rewritten.
+       (init): New method.
+       All other methods removed.
+       
+       * java/lang/natClassLoader.cc: Change use of java::lang::VMClassLoader
+       to gnu::gcj::runtime::VMClassLoader. 
+       (_Jv_InternClassStrings): Use _Jv_ResolvePoolEntry.  Also handle
+       class entries.   
+       (VMClassLoader::findSystemClass): renamed from findBootClass.
+
+       * Makefile.am: Add new files.
+       (FirstThread.h, ThreadGroup.h): Add _Jv_Main friend.
+
+       * Makefile.in: Rebuilt.
+
 1999-08-17  Tom Tromey  <tromey@cygnus.com>
 
        * java/lang/natThread.cc (sleep): Turn 0 millis and 0 nanos into 1
index ce6c32ee8eb98a7fb52f368512d079d6cfdd95fc..a394fb9a95d40a97143f4b1a2a15b32f3ff17b84 100644 (file)
@@ -201,16 +201,18 @@ nat_headers = $(ordinary_java_source_files:.java=.h) \
 $(nat_headers): libgcj.zip
 
 ## Our internal main program needs to be able to create a FirstThread.
-FTFRIEND = void JvRunMain (jclass klass, int argc, const char **argv)
 java/lang/FirstThread.h: java/lang/FirstThread.class libgcj.zip
-       $(GCJH) -classpath $(top_builddir) -friend '$(FTFRIEND);' \
+       $(GCJH) -classpath $(top_builddir) \
+               -friend 'void JvRunMain (jclass, int, const char **);' \
+               -friend 'void _Jv_RunMain (const char*, int, const char **);' \
                $(basename $<)
 
 ## ThreadGroup has a special constructor that is used when creating
 ## the first ThreadGroup.  We need to expose this to the main program.
-TGFRIEND = void JvRunMain (jclass klass, int argc, const char **argv)
 java/lang/ThreadGroup.h: java/lang/ThreadGroup.class libgcj.zip
-       $(GCJH) -classpath $(top_builddir) -friend '$(TGFRIEND);' \
+       $(GCJH) -classpath $(top_builddir) \
+               -friend 'void JvRunMain (jclass, int, const char **);' \
+               -friend 'void _Jv_RunMain (const char*, int, const char **);' \
                $(basename $<)
 
 java/lang/String.h: java/lang/String.class libgcj.zip
@@ -236,7 +238,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip
            -friend 'java::lang::Class;' \
            $(basename $<)
 
-java/lang/VMClassLoader.h: java/lang/VMClassLoader.class libgcj.zip
+gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
        $(GCJH) -classpath $(top_builddir) \
            -friend 'java::lang::ClassLoader;' \
            $(basename $<)
@@ -481,6 +483,7 @@ built_java_source_files = java/lang/ConcreteProcess.java
 ## header, please list it in special_java_source_files.
 ordinary_java_source_files =  $(convert_source_files) \
 gnu/gcj/runtime/MethodInvocation.java \
+gnu/gcj/runtime/VMClassLoader.java \
 gnu/gcj/util/path/SearchPath.java \
 gnu/gcj/util/path/PathEntry.java \
 gnu/gcj/util/path/DirectoryPathEntry.java \
@@ -498,6 +501,8 @@ gnu/gcj/protocol/file/Connection.java \
 gnu/gcj/protocol/file/Handler.java \
 gnu/gcj/protocol/http/Connection.java \
 gnu/gcj/protocol/http/Handler.java \
+gnu/gcj/protocol/jar/Handler.java \
+gnu/gcj/protocol/jar/Connection.java \
 gnu/gcj/RawData.java \
 gnu/gcj/util/EnumerationChain.java \
 java/io/BufferedInputStream.java \
@@ -565,7 +570,6 @@ java/lang/ClassCastException.java \
 java/lang/ClassCircularityError.java \
 java/lang/ClassFormatError.java        \
 java/lang/ClassLoader.java \
-java/lang/VMClassLoader.java \
 java/lang/ClassNotFoundException.java \
 java/lang/CloneNotSupportedException.java \
 java/lang/Cloneable.java \
@@ -643,6 +647,7 @@ java/net/DatagramSocketImpl.java \
 java/net/FileNameMap.java \
 java/net/HttpURLConnection.java \
 java/net/InetAddress.java \
+java/net/JarURLConnection.java \
 java/net/MalformedURLException.java \
 java/net/MulticastSocket.java \
 java/net/NoRouteToHostException.java \
@@ -656,6 +661,7 @@ java/net/SocketImpl.java \
 java/net/SocketImplFactory.java        \
 java/net/SocketOptions.java \
 java/net/URL.java \
+java/net/URLClassLoader.java \
 java/net/URLConnection.java \
 java/net/URLDecoder.java \
 java/net/URLEncoder.java \
@@ -665,6 +671,7 @@ java/net/UnknownHostException.java \
 java/net/UnknownServiceException.java \
 java/security/MessageDigest.java \
 java/security/NoSuchAlgorithmException.java \
+java/security/SecureClassLoader.java \
 java/text/BreakIterator.java \
 java/text/CharacterIterator.java \
 java/text/ChoiceFormat.java \
@@ -711,6 +718,9 @@ java/util/StringTokenizer.java \
 java/util/TimeZone.java        \
 java/util/TooManyListenersException.java \
 java/util/Vector.java \
+java/util/jar/JarFile.java \
+java/util/jar/JarInputStream.java \
+java/util/jar/JarEntry.java \
 java/util/zip/Adler32.java \
 java/util/zip/CRC32.java \
 java/util/zip/CheckedInputStream.java \
index d0c1ab25ae0413f4188773b175a94b52465b6b84..5c0889da92f3dc64a368d62e2739ee2a73dc864a 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
 
 # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
@@ -10,7 +10,6 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
 SHELL = @SHELL@
 
 srcdir = @srcdir@
@@ -46,9 +45,10 @@ AUTOMAKE = @AUTOMAKE@
 AUTOHEADER = @AUTOHEADER@
 
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
 transform = @program_transform_name@
 
 NORMAL_INSTALL = :
@@ -71,7 +71,9 @@ COMPPATH = @COMPPATH@
 CPP = @CPP@
 CXX = @CXX@
 CXXCPP = @CXXCPP@
+DIVIDESPEC = @DIVIDESPEC@
 DLLTOOL = @DLLTOOL@
+EH_COMMON_INCLUDE = @EH_COMMON_INCLUDE@
 EXEEXT = @EXEEXT@
 GCDEPS = @GCDEPS@
 GCINCS = @GCINCS@
@@ -105,41 +107,28 @@ ZLIBSPEC = @ZLIBSPEC@
 here = @here@
 libgcj_basedir = @libgcj_basedir@
 
+
 AUTOMAKE_OPTIONS = foreign no-installinfo
 
-@TESTSUBDIR_TRUE@SUBDIRS = \
-@TESTSUBDIR_TRUE@testsuite
-@USE_LIBDIR_TRUE@toolexeclibdir = \
-@USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexeclibdir = \
-@USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexecdir = \
-@USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
+@TESTSUBDIR_TRUE@SUBDIRS = @TESTSUBDIR_TRUE@testsuite
+@USE_LIBDIR_TRUE@toolexeclibdir = @USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexeclibdir = @USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexecdir = @USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
 
 toolexeclib_LTLIBRARIES = libgcj.la
 toolexeclib_DATA = libgcj.spec
 data_DATA = libgcj.zip
 
-@NATIVE_TRUE@bin_PROGRAMS = \
-@NATIVE_TRUE@jv-convert gij
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@GCJ = \
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@gcj
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@GCJ = \
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@$(target_alias)-gcj
-@CANADIAN_FALSE@GCJ = \
-@CANADIAN_FALSE@$(expanded)/gcj$(EXEEXT) -B$(expanded)/
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@zip
-@CANADIAN_FALSE@ZIP = \
-@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
-@CANADIAN_TRUE@GCJH = \
-@CANADIAN_TRUE@gcjh
-@CANADIAN_FALSE@GCJH = \
-@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
-@CANADIAN_FALSE@expanded = \
-@CANADIAN_FALSE@`cd $(MULTIBUILDTOP)../$(COMPPATH)/gcc && pwd`
+@NATIVE_TRUE@bin_PROGRAMS = @NATIVE_TRUE@jv-convert gij
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@GCJ = @CANADIAN_TRUE@@NULL_TARGET_TRUE@gcj
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@GCJ = @CANADIAN_TRUE@@NULL_TARGET_FALSE@$(target_alias)-gcj
+@CANADIAN_FALSE@GCJ = @CANADIAN_FALSE@$(expanded)/gcj$(EXEEXT) -B$(expanded)/
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_FALSE@zip
+@CANADIAN_FALSE@ZIP = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
+@CANADIAN_TRUE@GCJH = @CANADIAN_TRUE@gcjh
+@CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
+@CANADIAN_FALSE@expanded = @CANADIAN_FALSE@`cd $(MULTIBUILDTOP)../$(COMPPATH)/gcc && pwd`
 
 GCJCOMPILE = CLASSPATH=$(here) $(LIBTOOL) --mode=compile $(GCJ) -fassume-compiled $(JC1FLAGS) -c
 
@@ -149,10 +138,8 @@ EH_COMMON_INCLUDE = @EH_COMMON_INCLUDE@
 
 WARNINGS = -W -Wall
 AM_CXXFLAGS = -fno-rtti -fvtable-thunks @LIBGCJ_CXXFLAGS@ $(WARNINGS)
-@USING_GCC_TRUE@AM_CFLAGS = \
-@USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
-@USING_GCC_FALSE@AM_CFLAGS = \
-@USING_GCC_FALSE@@LIBGCJ_CFLAGS@
+@USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
+@USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
 
 JCFLAGS = -g
 JC1FLAGS = -g @LIBGCJ_JAVAFLAGS@
@@ -198,14 +185,9 @@ nat_headers = $(ordinary_java_source_files:.java=.h) \
        $(built_java_source_files:.java=.h)
 
 
-FTFRIEND = void JvRunMain (jclass klass, int argc, const char **argv)
-
-TGFRIEND = void JvRunMain (jclass klass, int argc, const char **argv)
-
 NM = nm
 
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
 
 CONVERT_DIR = gnu/gcj/convert
 
@@ -315,6 +297,7 @@ built_java_source_files = java/lang/ConcreteProcess.java
 
 ordinary_java_source_files = $(convert_source_files) \
 gnu/gcj/runtime/MethodInvocation.java \
+gnu/gcj/runtime/VMClassLoader.java \
 gnu/gcj/util/path/SearchPath.java \
 gnu/gcj/util/path/PathEntry.java \
 gnu/gcj/util/path/DirectoryPathEntry.java \
@@ -332,6 +315,8 @@ gnu/gcj/protocol/file/Connection.java \
 gnu/gcj/protocol/file/Handler.java \
 gnu/gcj/protocol/http/Connection.java \
 gnu/gcj/protocol/http/Handler.java \
+gnu/gcj/protocol/jar/Handler.java \
+gnu/gcj/protocol/jar/Connection.java \
 gnu/gcj/RawData.java \
 gnu/gcj/util/EnumerationChain.java \
 java/io/BufferedInputStream.java \
@@ -399,7 +384,6 @@ java/lang/ClassCastException.java \
 java/lang/ClassCircularityError.java \
 java/lang/ClassFormatError.java        \
 java/lang/ClassLoader.java \
-java/lang/VMClassLoader.java \
 java/lang/ClassNotFoundException.java \
 java/lang/CloneNotSupportedException.java \
 java/lang/Cloneable.java \
@@ -477,6 +461,7 @@ java/net/DatagramSocketImpl.java \
 java/net/FileNameMap.java \
 java/net/HttpURLConnection.java \
 java/net/InetAddress.java \
+java/net/JarURLConnection.java \
 java/net/MalformedURLException.java \
 java/net/MulticastSocket.java \
 java/net/NoRouteToHostException.java \
@@ -490,6 +475,7 @@ java/net/SocketImpl.java \
 java/net/SocketImplFactory.java        \
 java/net/SocketOptions.java \
 java/net/URL.java \
+java/net/URLClassLoader.java \
 java/net/URLConnection.java \
 java/net/URLDecoder.java \
 java/net/URLEncoder.java \
@@ -499,6 +485,7 @@ java/net/UnknownHostException.java \
 java/net/UnknownServiceException.java \
 java/security/MessageDigest.java \
 java/security/NoSuchAlgorithmException.java \
+java/security/SecureClassLoader.java \
 java/text/BreakIterator.java \
 java/text/CharacterIterator.java \
 java/text/ChoiceFormat.java \
@@ -545,6 +532,9 @@ java/util/StringTokenizer.java \
 java/util/TimeZone.java        \
 java/util/TooManyListenersException.java \
 java/util/Vector.java \
+java/util/jar/JarFile.java \
+java/util/jar/JarInputStream.java \
+java/util/jar/JarEntry.java \
 java/util/zip/Adler32.java \
 java/util/zip/CRC32.java \
 java/util/zip/CheckedInputStream.java \
@@ -673,6 +663,7 @@ MULTIDO = true
 MULTICLEAN = true
 
 cygnus_hack = 
+subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
 CONFIG_HEADER = ./include/config.h
@@ -684,44 +675,54 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I./include
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@
 LIBS = @LIBS@
-libgcj_la_OBJECTS =  prims.lo jni.lo exception.lo resolve.lo \
+am_libgcj_la_OBJECTS =  prims.lo jni.lo exception.lo resolve.lo \
 defineclass.lo interpret.lo
+libgcj_la_OBJECTS =  $(am_libgcj_la_OBJECTS)
 @NATIVE_TRUE@bin_PROGRAMS =  jv-convert$(EXEEXT) gij$(EXEEXT)
 @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS =  \
 @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS$(EXEEXT)
 PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
 
-jv_convert_OBJECTS = 
-gij_OBJECTS = 
-gen_from_JIS_OBJECTS = 
+gen_from_JIS_OBJECTS =  $(am_gen_from_JIS_OBJECTS)
 gen_from_JIS_LDFLAGS = 
-CXXFLAGS = @CXXFLAGS@
+gij_OBJECTS =  $(am_gij_OBJECTS)
+jv_convert_OBJECTS =  $(am_jv_convert_OBJECTS)
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CFLAGS = @CFLAGS@
 CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXFLAGS = @CXXFLAGS@
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LTGCJCOMPILE = $(LIBTOOL) --mode=compile $(GCJ) $(DEFS) $(INCLUDES) $(AM_GCJFLAGS) $(GCJFLAGS)
+GCJFLAGS = @GCJFLAGS@
+GCJLD = $(GCJ)
+GCJLINK = $(LIBTOOL) --mode=link $(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES =  $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) \
+$(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES) $(gij_SOURCES) \
+$(EXTRA_gij_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES)
 DATA =  $(data_DATA) $(toolexeclib_DATA)
 
-DIST_COMMON =  COPYING.LIB ChangeLog Makefile.am Makefile.in NEWS THANKS \
-acconfig.h acinclude.m4 aclocal.m4 configure configure.in \
-include/config.h.in include/stamp-h.in libgcj.spec.in
+DIST_COMMON =  $(data_DATA) $(toolexeclib_DATA) COPYING.LIB ChangeLog \
+Makefile.am Makefile.in NEWS THANKS acconfig.h acinclude.m4 aclocal.m4 \
+configure configure.in include/config.h.in include/stamp-h.in \
+libgcj.spec.in
 
 
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = tar
 GZIP_ENV = --best
 DIST_SUBDIRS =  testsuite
-DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
-.deps/$(srcdir)/$(CONVERT_DIR)/make-trie.P .deps/boehm.P \
-.deps/defineclass.P .deps/exception.P .deps/gij.P \
-.deps/gnu/gcj/RawData.P .deps/gnu/gcj/convert/BytesToUnicode.P \
-.deps/gnu/gcj/convert/Convert.P .deps/gnu/gcj/convert/Input_8859_1.P \
+DEP_FILES =  .deps/boehm.P .deps/defineclass.P .deps/dtoa.P \
+.deps/e_acos.P .deps/e_asin.P .deps/e_atan2.P .deps/e_exp.P \
+.deps/e_fmod.P .deps/e_log.P .deps/e_pow.P .deps/e_rem_pio2.P \
+.deps/e_remainder.P .deps/e_scalb.P .deps/e_sqrt.P .deps/exception.P \
+.deps/gen-from-JIS.P .deps/gij.P .deps/gnu/gcj/RawData.P \
+.deps/gnu/gcj/convert/BytesToUnicode.P .deps/gnu/gcj/convert/Convert.P \
+.deps/gnu/gcj/convert/Input_8859_1.P \
 .deps/gnu/gcj/convert/Input_EUCJIS.P \
 .deps/gnu/gcj/convert/Input_JavaSrc.P \
 .deps/gnu/gcj/convert/Input_SJIS.P .deps/gnu/gcj/convert/Input_UTF8.P \
@@ -734,7 +735,10 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/gnu/gcj/protocol/file/Handler.P \
 .deps/gnu/gcj/protocol/http/Connection.P \
 .deps/gnu/gcj/protocol/http/Handler.P \
+.deps/gnu/gcj/protocol/jar/Connection.P \
+.deps/gnu/gcj/protocol/jar/Handler.P \
 .deps/gnu/gcj/runtime/MethodInvocation.P \
+.deps/gnu/gcj/runtime/VMClassLoader.P \
 .deps/gnu/gcj/text/BaseBreakIterator.P \
 .deps/gnu/gcj/text/CharacterBreakIterator.P \
 .deps/gnu/gcj/text/LineBreakIterator.P \
@@ -826,37 +830,18 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/lang/Throwable.P .deps/java/lang/UnknownError.P \
 .deps/java/lang/UnsatisfiedLinkError.P \
 .deps/java/lang/UnsupportedOperationException.P \
-.deps/java/lang/VMClassLoader.P .deps/java/lang/VerifyError.P \
-.deps/java/lang/VirtualMachineError.P .deps/java/lang/Void.P \
-.deps/java/lang/dtoa.P .deps/java/lang/e_acos.P \
-.deps/java/lang/e_asin.P .deps/java/lang/e_atan2.P \
-.deps/java/lang/e_exp.P .deps/java/lang/e_fmod.P \
-.deps/java/lang/e_log.P .deps/java/lang/e_pow.P \
-.deps/java/lang/e_rem_pio2.P .deps/java/lang/e_remainder.P \
-.deps/java/lang/e_scalb.P .deps/java/lang/e_sqrt.P \
-.deps/java/lang/k_cos.P .deps/java/lang/k_rem_pio2.P \
-.deps/java/lang/k_sin.P .deps/java/lang/k_tan.P .deps/java/lang/mprec.P \
-.deps/java/lang/reflect/AccessibleObject.P \
+.deps/java/lang/VerifyError.P .deps/java/lang/VirtualMachineError.P \
+.deps/java/lang/Void.P .deps/java/lang/reflect/AccessibleObject.P \
 .deps/java/lang/reflect/Array.P .deps/java/lang/reflect/Constructor.P \
 .deps/java/lang/reflect/Field.P \
 .deps/java/lang/reflect/InvocationTargetException.P \
 .deps/java/lang/reflect/Member.P .deps/java/lang/reflect/Method.P \
-.deps/java/lang/reflect/Modifier.P .deps/java/lang/s_atan.P \
-.deps/java/lang/s_ceil.P .deps/java/lang/s_copysign.P \
-.deps/java/lang/s_cos.P .deps/java/lang/s_fabs.P \
-.deps/java/lang/s_floor.P .deps/java/lang/s_rint.P \
-.deps/java/lang/s_scalbn.P .deps/java/lang/s_sin.P \
-.deps/java/lang/s_tan.P .deps/java/lang/sf_rint.P \
-.deps/java/lang/strtod.P .deps/java/lang/w_acos.P \
-.deps/java/lang/w_asin.P .deps/java/lang/w_atan2.P \
-.deps/java/lang/w_exp.P .deps/java/lang/w_fmod.P \
-.deps/java/lang/w_log.P .deps/java/lang/w_pow.P \
-.deps/java/lang/w_remainder.P .deps/java/lang/w_sqrt.P \
-.deps/java/net/BindException.P .deps/java/net/ConnectException.P \
-.deps/java/net/ContentHandler.P .deps/java/net/ContentHandlerFactory.P \
-.deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
-.deps/java/net/DatagramSocketImpl.P .deps/java/net/FileNameMap.P \
-.deps/java/net/HttpURLConnection.P .deps/java/net/InetAddress.P \
+.deps/java/lang/reflect/Modifier.P .deps/java/net/BindException.P \
+.deps/java/net/ConnectException.P .deps/java/net/ContentHandler.P \
+.deps/java/net/ContentHandlerFactory.P .deps/java/net/DatagramPacket.P \
+.deps/java/net/DatagramSocket.P .deps/java/net/DatagramSocketImpl.P \
+.deps/java/net/FileNameMap.P .deps/java/net/HttpURLConnection.P \
+.deps/java/net/InetAddress.P .deps/java/net/JarURLConnection.P \
 .deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
 .deps/java/net/NoRouteToHostException.P \
 .deps/java/net/PlainDatagramSocketImpl.P \
@@ -864,16 +849,16 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/net/ServerSocket.P .deps/java/net/Socket.P \
 .deps/java/net/SocketException.P .deps/java/net/SocketImpl.P \
 .deps/java/net/SocketImplFactory.P .deps/java/net/SocketOptions.P \
-.deps/java/net/URL.P .deps/java/net/URLConnection.P \
-.deps/java/net/URLDecoder.P .deps/java/net/URLEncoder.P \
-.deps/java/net/URLStreamHandler.P \
+.deps/java/net/URL.P .deps/java/net/URLClassLoader.P \
+.deps/java/net/URLConnection.P .deps/java/net/URLDecoder.P \
+.deps/java/net/URLEncoder.P .deps/java/net/URLStreamHandler.P \
 .deps/java/net/URLStreamHandlerFactory.P \
 .deps/java/net/UnknownHostException.P \
 .deps/java/net/UnknownServiceException.P \
 .deps/java/security/MessageDigest.P \
 .deps/java/security/NoSuchAlgorithmException.P \
-.deps/java/text/BreakIterator.P .deps/java/text/CharacterIterator.P \
-.deps/java/text/ChoiceFormat.P \
+.deps/java/security/SecureClassLoader.P .deps/java/text/BreakIterator.P \
+.deps/java/text/CharacterIterator.P .deps/java/text/ChoiceFormat.P \
 .deps/java/text/CollationElementIterator.P \
 .deps/java/text/CollationKey.P .deps/java/text/Collator.P \
 .deps/java/text/DateFormat.P .deps/java/text/DateFormatSymbols.P \
@@ -897,8 +882,10 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/util/ResourceBundle.P .deps/java/util/SimpleTimeZone.P \
 .deps/java/util/Stack.P .deps/java/util/StringTokenizer.P \
 .deps/java/util/TimeZone.P .deps/java/util/TooManyListenersException.P \
-.deps/java/util/Vector.P .deps/java/util/zip/Adler32.P \
-.deps/java/util/zip/CRC32.P .deps/java/util/zip/CheckedInputStream.P \
+.deps/java/util/Vector.P .deps/java/util/jar/JarEntry.P \
+.deps/java/util/jar/JarFile.P .deps/java/util/jar/JarInputStream.P \
+.deps/java/util/zip/Adler32.P .deps/java/util/zip/CRC32.P \
+.deps/java/util/zip/CheckedInputStream.P \
 .deps/java/util/zip/CheckedOutputStream.P \
 .deps/java/util/zip/Checksum.P \
 .deps/java/util/zip/DataFormatException.P \
@@ -910,14 +897,21 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/util/zip/ZipConstants.P .deps/java/util/zip/ZipEntry.P \
 .deps/java/util/zip/ZipException.P .deps/java/util/zip/ZipFile.P \
 .deps/java/util/zip/ZipInputStream.P \
-.deps/java/util/zip/ZipOutputStream.P .deps/jni.P .deps/no-threads.P \
-.deps/nogc.P .deps/posix-threads.P .deps/prims.P .deps/resolve.P
-SOURCES = $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES) $(gij_SOURCES) $(EXTRA_gij_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES)
-OBJECTS = $(libgcj_la_OBJECTS) $(jv_convert_OBJECTS) $(gij_OBJECTS) $(gen_from_JIS_OBJECTS)
+.deps/java/util/zip/ZipOutputStream.P .deps/jni.P .deps/k_cos.P \
+.deps/k_rem_pio2.P .deps/k_sin.P .deps/k_tan.P .deps/make-trie.P \
+.deps/mprec.P .deps/no-threads.P .deps/nogc.P .deps/posix-threads.P \
+.deps/prims.P .deps/resolve.P .deps/s_atan.P .deps/s_ceil.P \
+.deps/s_copysign.P .deps/s_cos.P .deps/s_fabs.P .deps/s_floor.P \
+.deps/s_rint.P .deps/s_scalbn.P .deps/s_sin.P .deps/s_tan.P \
+.deps/sf_rint.P .deps/strtod.P .deps/w_acos.P .deps/w_asin.P \
+.deps/w_atan2.P .deps/w_exp.P .deps/w_fmod.P .deps/w_log.P \
+.deps/w_pow.P .deps/w_remainder.P .deps/w_sqrt.P
+SOURCES = $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES) $(gij_SOURCES) $(EXTRA_gij_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES)
+OBJECTS = $(am_libgcj_la_OBJECTS) $(am_gen_from_JIS_OBJECTS) $(am_gij_OBJECTS) $(am_jv_convert_OBJECTS)
 
 all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .cc .class .h .java .lo .o .s
+.SUFFIXES: .c .cc .class .h .java .lo .o
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
        cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile
 
@@ -939,18 +933,22 @@ include/config.h: include/stamp-h
                $(MAKE) include/stamp-h; \
        else :; fi
 include/stamp-h: $(srcdir)/include/config.h.in $(top_builddir)/config.status
+       @rm -f include/stamp-h include/stamp-hT
+       @echo timestamp > include/stamp-hT 2> /dev/null
        cd $(top_builddir) \
          && CONFIG_FILES= CONFIG_HEADERS=include/config.h \
             $(SHELL) ./config.status
-       @echo timestamp > include/stamp-h 2> /dev/null
+       @mv include/stamp-hT include/stamp-h
 $(srcdir)/include/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/include/stamp-h.in
        @if test ! -f $@; then \
                rm -f $(srcdir)/include/stamp-h.in; \
                $(MAKE) $(srcdir)/include/stamp-h.in; \
        else :; fi
 $(srcdir)/include/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
+       @rm -f $(srcdir)/include/stamp-h.in $(srcdir)/include/stamp-h.inT
+       @echo timestamp > $(srcdir)/include/stamp-h.inT 2> /dev/null
        cd $(top_srcdir) && $(AUTOHEADER)
-       @echo timestamp > $(srcdir)/include/stamp-h.in 2> /dev/null
+       @mv $(srcdir)/include/stamp-h.inT $(srcdir)/include/stamp-h.in
 
 mostlyclean-hdr:
 
@@ -977,23 +975,18 @@ install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
        $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
        @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
          if test -f $$p; then \
-           echo "$(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
-           $(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
+           echo "$(LIBTOOL)  --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
+           $(LIBTOOL)  --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
          else :; fi; \
        done
 
 uninstall-toolexeclibLTLIBRARIES:
        @$(NORMAL_UNINSTALL)
-       list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
+       @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
+         echo " $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p"; \
          $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
        done
 
-.s.o:
-       $(COMPILE) -c $<
-
-.S.o:
-       $(COMPILE) -c $<
-
 mostlyclean-compile:
        -rm -f *.o core *.core
 
@@ -1004,12 +997,6 @@ distclean-compile:
 
 maintainer-clean-compile:
 
-.s.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -1019,6 +1006,743 @@ clean-libtool:
 distclean-libtool:
 
 maintainer-clean-libtool:
+dtoa.lo: java/lang/dtoa.c
+k_rem_pio2.lo: java/lang/k_rem_pio2.c
+s_tan.lo: java/lang/s_tan.c
+e_acos.lo: java/lang/e_acos.c
+k_sin.lo: java/lang/k_sin.c
+strtod.lo: java/lang/strtod.c
+e_asin.lo: java/lang/e_asin.c
+k_tan.lo: java/lang/k_tan.c
+w_acos.lo: java/lang/w_acos.c
+e_atan2.lo: java/lang/e_atan2.c
+mprec.lo: java/lang/mprec.c
+w_asin.lo: java/lang/w_asin.c
+e_exp.lo: java/lang/e_exp.c
+s_atan.lo: java/lang/s_atan.c
+w_atan2.lo: java/lang/w_atan2.c
+e_fmod.lo: java/lang/e_fmod.c
+s_ceil.lo: java/lang/s_ceil.c
+w_exp.lo: java/lang/w_exp.c
+e_log.lo: java/lang/e_log.c
+s_copysign.lo: java/lang/s_copysign.c
+w_fmod.lo: java/lang/w_fmod.c
+e_pow.lo: java/lang/e_pow.c
+s_cos.lo: java/lang/s_cos.c
+w_log.lo: java/lang/w_log.c
+e_rem_pio2.lo: java/lang/e_rem_pio2.c
+s_fabs.lo: java/lang/s_fabs.c
+w_pow.lo: java/lang/w_pow.c
+e_remainder.lo: java/lang/e_remainder.c
+s_floor.lo: java/lang/s_floor.c
+w_remainder.lo: java/lang/w_remainder.c
+e_scalb.lo: java/lang/e_scalb.c
+s_rint.lo: java/lang/s_rint.c
+w_sqrt.lo: java/lang/w_sqrt.c
+e_sqrt.lo: java/lang/e_sqrt.c
+s_scalbn.lo: java/lang/s_scalbn.c
+sf_rint.lo: java/lang/sf_rint.c
+k_cos.lo: java/lang/k_cos.c
+s_sin.lo: java/lang/s_sin.c
+gnu/gcj/convert/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/convert
+       @: > gnu/gcj/convert/.dirstamp
+.deps/gnu/gcj/convert/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/convert
+       @: > .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/BytesToUnicode.lo: gnu/gcj/convert/BytesToUnicode.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Convert.lo: gnu/gcj/convert/Convert.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_8859_1.lo: gnu/gcj/convert/Input_8859_1.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_EUCJIS.lo: gnu/gcj/convert/Input_EUCJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_JavaSrc.lo: gnu/gcj/convert/Input_JavaSrc.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_SJIS.lo: gnu/gcj/convert/Input_SJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_UTF8.lo: gnu/gcj/convert/Input_UTF8.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_8859_1.lo: gnu/gcj/convert/Output_8859_1.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_EUCJIS.lo: gnu/gcj/convert/Output_EUCJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_JavaSrc.lo: gnu/gcj/convert/Output_JavaSrc.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_SJIS.lo: gnu/gcj/convert/Output_SJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_UTF8.lo: gnu/gcj/convert/Output_UTF8.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/UnicodeToBytes.lo: gnu/gcj/convert/UnicodeToBytes.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/runtime/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/runtime
+       @: > gnu/gcj/runtime/.dirstamp
+.deps/gnu/gcj/runtime/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/runtime
+       @: > .deps/gnu/gcj/runtime/.dirstamp
+gnu/gcj/runtime/MethodInvocation.lo: \
+       gnu/gcj/runtime/MethodInvocation.java gnu/gcj/runtime/.dirstamp \
+       .deps/gnu/gcj/runtime/.dirstamp
+gnu/gcj/runtime/VMClassLoader.lo: gnu/gcj/runtime/VMClassLoader.java \
+       gnu/gcj/runtime/.dirstamp .deps/gnu/gcj/runtime/.dirstamp
+gnu/gcj/util/path/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/util/path
+       @: > gnu/gcj/util/path/.dirstamp
+.deps/gnu/gcj/util/path/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/util/path
+       @: > .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/SearchPath.lo: gnu/gcj/util/path/SearchPath.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/PathEntry.lo: gnu/gcj/util/path/PathEntry.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/DirectoryPathEntry.lo: \
+       gnu/gcj/util/path/DirectoryPathEntry.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/ZipPathEntry.lo: gnu/gcj/util/path/ZipPathEntry.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/URLPathEntry.lo: gnu/gcj/util/path/URLPathEntry.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/util/path/CacheEntry.lo: gnu/gcj/util/path/CacheEntry.java \
+       gnu/gcj/util/path/.dirstamp .deps/gnu/gcj/util/path/.dirstamp
+gnu/gcj/text/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/text
+       @: > gnu/gcj/text/.dirstamp
+.deps/gnu/gcj/text/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/text
+       @: > .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/BaseBreakIterator.lo: gnu/gcj/text/BaseBreakIterator.java \
+       gnu/gcj/text/.dirstamp .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/CharacterBreakIterator.lo: \
+       gnu/gcj/text/CharacterBreakIterator.java gnu/gcj/text/.dirstamp \
+       .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/LineBreakIterator.lo: gnu/gcj/text/LineBreakIterator.java \
+       gnu/gcj/text/.dirstamp .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/LocaleData_en.lo: gnu/gcj/text/LocaleData_en.java \
+       gnu/gcj/text/.dirstamp .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/LocaleData_en_US.lo: gnu/gcj/text/LocaleData_en_US.java \
+       gnu/gcj/text/.dirstamp .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/SentenceBreakIterator.lo: \
+       gnu/gcj/text/SentenceBreakIterator.java gnu/gcj/text/.dirstamp \
+       .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/text/WordBreakIterator.lo: gnu/gcj/text/WordBreakIterator.java \
+       gnu/gcj/text/.dirstamp .deps/gnu/gcj/text/.dirstamp
+gnu/gcj/protocol/file/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/protocol/file
+       @: > gnu/gcj/protocol/file/.dirstamp
+.deps/gnu/gcj/protocol/file/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/protocol/file
+       @: > .deps/gnu/gcj/protocol/file/.dirstamp
+gnu/gcj/protocol/file/Connection.lo: \
+       gnu/gcj/protocol/file/Connection.java \
+       gnu/gcj/protocol/file/.dirstamp \
+       .deps/gnu/gcj/protocol/file/.dirstamp
+gnu/gcj/protocol/file/Handler.lo: gnu/gcj/protocol/file/Handler.java \
+       gnu/gcj/protocol/file/.dirstamp \
+       .deps/gnu/gcj/protocol/file/.dirstamp
+gnu/gcj/protocol/http/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/protocol/http
+       @: > gnu/gcj/protocol/http/.dirstamp
+.deps/gnu/gcj/protocol/http/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/protocol/http
+       @: > .deps/gnu/gcj/protocol/http/.dirstamp
+gnu/gcj/protocol/http/Connection.lo: \
+       gnu/gcj/protocol/http/Connection.java \
+       gnu/gcj/protocol/http/.dirstamp \
+       .deps/gnu/gcj/protocol/http/.dirstamp
+gnu/gcj/protocol/http/Handler.lo: gnu/gcj/protocol/http/Handler.java \
+       gnu/gcj/protocol/http/.dirstamp \
+       .deps/gnu/gcj/protocol/http/.dirstamp
+gnu/gcj/protocol/jar/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/protocol/jar
+       @: > gnu/gcj/protocol/jar/.dirstamp
+.deps/gnu/gcj/protocol/jar/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/protocol/jar
+       @: > .deps/gnu/gcj/protocol/jar/.dirstamp
+gnu/gcj/protocol/jar/Handler.lo: gnu/gcj/protocol/jar/Handler.java \
+       gnu/gcj/protocol/jar/.dirstamp \
+       .deps/gnu/gcj/protocol/jar/.dirstamp
+gnu/gcj/protocol/jar/Connection.lo: gnu/gcj/protocol/jar/Connection.java \
+       gnu/gcj/protocol/jar/.dirstamp \
+       .deps/gnu/gcj/protocol/jar/.dirstamp
+gnu/gcj/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj
+       @: > gnu/gcj/.dirstamp
+.deps/gnu/gcj/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj
+       @: > .deps/gnu/gcj/.dirstamp
+gnu/gcj/RawData.lo: gnu/gcj/RawData.java gnu/gcj/.dirstamp \
+       .deps/gnu/gcj/.dirstamp
+gnu/gcj/util/.dirstamp:
+       @$(mkinstalldirs) gnu/gcj/util
+       @: > gnu/gcj/util/.dirstamp
+.deps/gnu/gcj/util/.dirstamp:
+       @$(mkinstalldirs) .deps/gnu/gcj/util
+       @: > .deps/gnu/gcj/util/.dirstamp
+gnu/gcj/util/EnumerationChain.lo: gnu/gcj/util/EnumerationChain.java \
+       gnu/gcj/util/.dirstamp .deps/gnu/gcj/util/.dirstamp
+java/io/.dirstamp:
+       @$(mkinstalldirs) java/io
+       @: > java/io/.dirstamp
+.deps/java/io/.dirstamp:
+       @$(mkinstalldirs) .deps/java/io
+       @: > .deps/java/io/.dirstamp
+java/io/BufferedInputStream.lo: java/io/BufferedInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/BufferedOutputStream.lo: java/io/BufferedOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/BufferedReader.lo: java/io/BufferedReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/BufferedWriter.lo: java/io/BufferedWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/ByteArrayInputStream.lo: java/io/ByteArrayInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/ByteArrayOutputStream.lo: java/io/ByteArrayOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/CharArrayReader.lo: java/io/CharArrayReader.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/CharArrayWriter.lo: java/io/CharArrayWriter.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/CharConversionException.lo: java/io/CharConversionException.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/DataInput.lo: java/io/DataInput.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/DataInputStream.lo: java/io/DataInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/DataOutput.lo: java/io/DataOutput.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/DataOutputStream.lo: java/io/DataOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/EOFException.lo: java/io/EOFException.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/File.lo: java/io/File.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FileDescriptor.lo: java/io/FileDescriptor.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FileInputStream.lo: java/io/FileInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/FileNotFoundException.lo: java/io/FileNotFoundException.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/FileOutputStream.lo: java/io/FileOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/FileReader.lo: java/io/FileReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FileWriter.lo: java/io/FileWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FilenameFilter.lo: java/io/FilenameFilter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FilterInputStream.lo: java/io/FilterInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/FilterOutputStream.lo: java/io/FilterOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/FilterReader.lo: java/io/FilterReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/FilterWriter.lo: java/io/FilterWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/IOException.lo: java/io/IOException.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/InputStream.lo: java/io/InputStream.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/InputStreamReader.lo: java/io/InputStreamReader.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/InterruptedIOException.lo: java/io/InterruptedIOException.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/LineNumberInputStream.lo: java/io/LineNumberInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/LineNumberReader.lo: java/io/LineNumberReader.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/OutputStream.lo: java/io/OutputStream.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/OutputStreamWriter.lo: java/io/OutputStreamWriter.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/PipedInputStream.lo: java/io/PipedInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/PipedOutputStream.lo: java/io/PipedOutputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/PipedReader.lo: java/io/PipedReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/PipedWriter.lo: java/io/PipedWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/PrintStream.lo: java/io/PrintStream.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/PrintWriter.lo: java/io/PrintWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/PushbackInputStream.lo: java/io/PushbackInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/PushbackReader.lo: java/io/PushbackReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/RandomAccessFile.lo: java/io/RandomAccessFile.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/Reader.lo: java/io/Reader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/SequenceInputStream.lo: java/io/SequenceInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/Serializable.lo: java/io/Serializable.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/StreamTokenizer.lo: java/io/StreamTokenizer.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/StringBufferInputStream.lo: java/io/StringBufferInputStream.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/StringReader.lo: java/io/StringReader.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/StringWriter.lo: java/io/StringWriter.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/SyncFailedException.lo: java/io/SyncFailedException.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/UTFDataFormatException.lo: java/io/UTFDataFormatException.java \
+       java/io/.dirstamp .deps/java/io/.dirstamp
+java/io/UnsupportedEncodingException.lo: \
+       java/io/UnsupportedEncodingException.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/io/Writer.lo: java/io/Writer.java java/io/.dirstamp \
+       .deps/java/io/.dirstamp
+java/lang/.dirstamp:
+       @$(mkinstalldirs) java/lang
+       @: > java/lang/.dirstamp
+.deps/java/lang/.dirstamp:
+       @$(mkinstalldirs) .deps/java/lang
+       @: > .deps/java/lang/.dirstamp
+java/lang/AbstractMethodError.lo: java/lang/AbstractMethodError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ArithmeticException.lo: java/lang/ArithmeticException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ArrayIndexOutOfBoundsException.lo: \
+       java/lang/ArrayIndexOutOfBoundsException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ArrayStoreException.lo: java/lang/ArrayStoreException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Boolean.lo: java/lang/Boolean.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Byte.lo: java/lang/Byte.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Character.lo: java/lang/Character.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ClassCastException.lo: java/lang/ClassCastException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ClassCircularityError.lo: java/lang/ClassCircularityError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ClassFormatError.lo: java/lang/ClassFormatError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/ClassLoader.lo: java/lang/ClassLoader.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ClassNotFoundException.lo: \
+       java/lang/ClassNotFoundException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/CloneNotSupportedException.lo: \
+       java/lang/CloneNotSupportedException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Cloneable.lo: java/lang/Cloneable.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Comparable.lo: java/lang/Comparable.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Compiler.lo: java/lang/Compiler.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Double.lo: java/lang/Double.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Error.lo: java/lang/Error.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Exception.lo: java/lang/Exception.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ExceptionInInitializerError.lo: \
+       java/lang/ExceptionInInitializerError.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/FirstThread.lo: java/lang/FirstThread.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Float.lo: java/lang/Float.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IllegalAccessError.lo: java/lang/IllegalAccessError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/IllegalAccessException.lo: \
+       java/lang/IllegalAccessException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IllegalArgumentException.lo: \
+       java/lang/IllegalArgumentException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IllegalMonitorStateException.lo: \
+       java/lang/IllegalMonitorStateException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IllegalStateException.lo: java/lang/IllegalStateException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/IllegalThreadStateException.lo: \
+       java/lang/IllegalThreadStateException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IncompatibleClassChangeError.lo: \
+       java/lang/IncompatibleClassChangeError.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/IndexOutOfBoundsException.lo: \
+       java/lang/IndexOutOfBoundsException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/InstantiationError.lo: java/lang/InstantiationError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/InstantiationException.lo: \
+       java/lang/InstantiationException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Integer.lo: java/lang/Integer.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/InternalError.lo: java/lang/InternalError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/InterruptedException.lo: java/lang/InterruptedException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/LinkageError.lo: java/lang/LinkageError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Long.lo: java/lang/Long.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Math.lo: java/lang/Math.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/NegativeArraySizeException.lo: \
+       java/lang/NegativeArraySizeException.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/NoClassDefFoundError.lo: java/lang/NoClassDefFoundError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/NoSuchFieldError.lo: java/lang/NoSuchFieldError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/NoSuchFieldException.lo: java/lang/NoSuchFieldException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/NoSuchMethodError.lo: java/lang/NoSuchMethodError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/NoSuchMethodException.lo: java/lang/NoSuchMethodException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/NullPointerException.lo: java/lang/NullPointerException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Number.lo: java/lang/Number.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/NumberFormatException.lo: java/lang/NumberFormatException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/OutOfMemoryError.lo: java/lang/OutOfMemoryError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Process.lo: java/lang/Process.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Runnable.lo: java/lang/Runnable.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Runtime.lo: java/lang/Runtime.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/RuntimeException.lo: java/lang/RuntimeException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/SecurityException.lo: java/lang/SecurityException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/SecurityManager.lo: java/lang/SecurityManager.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Short.lo: java/lang/Short.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/StackOverflowError.lo: java/lang/StackOverflowError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/String.lo: java/lang/String.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/StringBuffer.lo: java/lang/StringBuffer.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/StringIndexOutOfBoundsException.lo: \
+       java/lang/StringIndexOutOfBoundsException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/System.lo: java/lang/System.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Thread.lo: java/lang/Thread.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ThreadDeath.lo: java/lang/ThreadDeath.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ThreadGroup.lo: java/lang/ThreadGroup.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Throwable.lo: java/lang/Throwable.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/UnknownError.lo: java/lang/UnknownError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/UnsatisfiedLinkError.lo: java/lang/UnsatisfiedLinkError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/UnsupportedOperationException.lo: \
+       java/lang/UnsupportedOperationException.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/VerifyError.lo: java/lang/VerifyError.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/VirtualMachineError.lo: java/lang/VirtualMachineError.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
+java/lang/Void.lo: java/lang/Void.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/reflect/.dirstamp:
+       @$(mkinstalldirs) java/lang/reflect
+       @: > java/lang/reflect/.dirstamp
+.deps/java/lang/reflect/.dirstamp:
+       @$(mkinstalldirs) .deps/java/lang/reflect
+       @: > .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/AccessibleObject.lo: \
+       java/lang/reflect/AccessibleObject.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Array.lo: java/lang/reflect/Array.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Constructor.lo: java/lang/reflect/Constructor.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Field.lo: java/lang/reflect/Field.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/InvocationTargetException.lo: \
+       java/lang/reflect/InvocationTargetException.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Member.lo: java/lang/reflect/Member.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Method.lo: java/lang/reflect/Method.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/lang/reflect/Modifier.lo: java/lang/reflect/Modifier.java \
+       java/lang/reflect/.dirstamp .deps/java/lang/reflect/.dirstamp
+java/net/.dirstamp:
+       @$(mkinstalldirs) java/net
+       @: > java/net/.dirstamp
+.deps/java/net/.dirstamp:
+       @$(mkinstalldirs) .deps/java/net
+       @: > .deps/java/net/.dirstamp
+java/net/BindException.lo: java/net/BindException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/ConnectException.lo: java/net/ConnectException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/ContentHandler.lo: java/net/ContentHandler.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/ContentHandlerFactory.lo: java/net/ContentHandlerFactory.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/DatagramPacket.lo: java/net/DatagramPacket.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/DatagramSocket.lo: java/net/DatagramSocket.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/DatagramSocketImpl.lo: java/net/DatagramSocketImpl.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/FileNameMap.lo: java/net/FileNameMap.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/HttpURLConnection.lo: java/net/HttpURLConnection.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/InetAddress.lo: java/net/InetAddress.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/JarURLConnection.lo: java/net/JarURLConnection.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/MalformedURLException.lo: java/net/MalformedURLException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/MulticastSocket.lo: java/net/MulticastSocket.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/NoRouteToHostException.lo: java/net/NoRouteToHostException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/PlainDatagramSocketImpl.lo: \
+       java/net/PlainDatagramSocketImpl.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/PlainSocketImpl.lo: java/net/PlainSocketImpl.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/ProtocolException.lo: java/net/ProtocolException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/ServerSocket.lo: java/net/ServerSocket.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/Socket.lo: java/net/Socket.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/SocketException.lo: java/net/SocketException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/SocketImpl.lo: java/net/SocketImpl.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/SocketImplFactory.lo: java/net/SocketImplFactory.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/SocketOptions.lo: java/net/SocketOptions.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/URL.lo: java/net/URL.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/URLClassLoader.lo: java/net/URLClassLoader.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/URLConnection.lo: java/net/URLConnection.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/URLDecoder.lo: java/net/URLDecoder.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/URLEncoder.lo: java/net/URLEncoder.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/URLStreamHandler.lo: java/net/URLStreamHandler.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/URLStreamHandlerFactory.lo: \
+       java/net/URLStreamHandlerFactory.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/net/UnknownHostException.lo: java/net/UnknownHostException.java \
+       java/net/.dirstamp .deps/java/net/.dirstamp
+java/net/UnknownServiceException.lo: \
+       java/net/UnknownServiceException.java java/net/.dirstamp \
+       .deps/java/net/.dirstamp
+java/security/.dirstamp:
+       @$(mkinstalldirs) java/security
+       @: > java/security/.dirstamp
+.deps/java/security/.dirstamp:
+       @$(mkinstalldirs) .deps/java/security
+       @: > .deps/java/security/.dirstamp
+java/security/MessageDigest.lo: java/security/MessageDigest.java \
+       java/security/.dirstamp .deps/java/security/.dirstamp
+java/security/NoSuchAlgorithmException.lo: \
+       java/security/NoSuchAlgorithmException.java \
+       java/security/.dirstamp .deps/java/security/.dirstamp
+java/security/SecureClassLoader.lo: java/security/SecureClassLoader.java \
+       java/security/.dirstamp .deps/java/security/.dirstamp
+java/text/.dirstamp:
+       @$(mkinstalldirs) java/text
+       @: > java/text/.dirstamp
+.deps/java/text/.dirstamp:
+       @$(mkinstalldirs) .deps/java/text
+       @: > .deps/java/text/.dirstamp
+java/text/BreakIterator.lo: java/text/BreakIterator.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/CharacterIterator.lo: java/text/CharacterIterator.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/ChoiceFormat.lo: java/text/ChoiceFormat.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/CollationElementIterator.lo: \
+       java/text/CollationElementIterator.java java/text/.dirstamp \
+       .deps/java/text/.dirstamp
+java/text/CollationKey.lo: java/text/CollationKey.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/Collator.lo: java/text/Collator.java java/text/.dirstamp \
+       .deps/java/text/.dirstamp
+java/text/DateFormat.lo: java/text/DateFormat.java java/text/.dirstamp \
+       .deps/java/text/.dirstamp
+java/text/DateFormatSymbols.lo: java/text/DateFormatSymbols.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/DecimalFormat.lo: java/text/DecimalFormat.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/DecimalFormatSymbols.lo: java/text/DecimalFormatSymbols.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/FieldPosition.lo: java/text/FieldPosition.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/Format.lo: java/text/Format.java java/text/.dirstamp \
+       .deps/java/text/.dirstamp
+java/text/MessageFormat.lo: java/text/MessageFormat.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/NumberFormat.lo: java/text/NumberFormat.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/ParseException.lo: java/text/ParseException.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/ParsePosition.lo: java/text/ParsePosition.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/RuleBasedCollator.lo: java/text/RuleBasedCollator.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/SimpleDateFormat.lo: java/text/SimpleDateFormat.java \
+       java/text/.dirstamp .deps/java/text/.dirstamp
+java/text/StringCharacterIterator.lo: \
+       java/text/StringCharacterIterator.java java/text/.dirstamp \
+       .deps/java/text/.dirstamp
+java/util/.dirstamp:
+       @$(mkinstalldirs) java/util
+       @: > java/util/.dirstamp
+.deps/java/util/.dirstamp:
+       @$(mkinstalldirs) .deps/java/util
+       @: > .deps/java/util/.dirstamp
+java/util/BitSet.lo: java/util/BitSet.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Calendar.lo: java/util/Calendar.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/ConcurrentModificationException.lo: \
+       java/util/ConcurrentModificationException.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/Date.lo: java/util/Date.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Dictionary.lo: java/util/Dictionary.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/EmptyStackException.lo: java/util/EmptyStackException.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/Enumeration.lo: java/util/Enumeration.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/EventListener.lo: java/util/EventListener.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/EventObject.lo: java/util/EventObject.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/GregorianCalendar.lo: java/util/GregorianCalendar.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/Hashtable.lo: java/util/Hashtable.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/ListResourceBundle.lo: java/util/ListResourceBundle.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/Locale.lo: java/util/Locale.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/MissingResourceException.lo: \
+       java/util/MissingResourceException.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/NoSuchElementException.lo: \
+       java/util/NoSuchElementException.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Observable.lo: java/util/Observable.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Observer.lo: java/util/Observer.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Properties.lo: java/util/Properties.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/PropertyResourceBundle.lo: \
+       java/util/PropertyResourceBundle.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Random.lo: java/util/Random.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/ResourceBundle.lo: java/util/ResourceBundle.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/SimpleTimeZone.lo: java/util/SimpleTimeZone.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/Stack.lo: java/util/Stack.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/StringTokenizer.lo: java/util/StringTokenizer.java \
+       java/util/.dirstamp .deps/java/util/.dirstamp
+java/util/TimeZone.lo: java/util/TimeZone.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/TooManyListenersException.lo: \
+       java/util/TooManyListenersException.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/Vector.lo: java/util/Vector.java java/util/.dirstamp \
+       .deps/java/util/.dirstamp
+java/util/jar/.dirstamp:
+       @$(mkinstalldirs) java/util/jar
+       @: > java/util/jar/.dirstamp
+.deps/java/util/jar/.dirstamp:
+       @$(mkinstalldirs) .deps/java/util/jar
+       @: > .deps/java/util/jar/.dirstamp
+java/util/jar/JarFile.lo: java/util/jar/JarFile.java \
+       java/util/jar/.dirstamp .deps/java/util/jar/.dirstamp
+java/util/jar/JarInputStream.lo: java/util/jar/JarInputStream.java \
+       java/util/jar/.dirstamp .deps/java/util/jar/.dirstamp
+java/util/jar/JarEntry.lo: java/util/jar/JarEntry.java \
+       java/util/jar/.dirstamp .deps/java/util/jar/.dirstamp
+java/util/zip/.dirstamp:
+       @$(mkinstalldirs) java/util/zip
+       @: > java/util/zip/.dirstamp
+.deps/java/util/zip/.dirstamp:
+       @$(mkinstalldirs) .deps/java/util/zip
+       @: > .deps/java/util/zip/.dirstamp
+java/util/zip/Adler32.lo: java/util/zip/Adler32.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/CRC32.lo: java/util/zip/CRC32.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/CheckedInputStream.lo: \
+       java/util/zip/CheckedInputStream.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/CheckedOutputStream.lo: \
+       java/util/zip/CheckedOutputStream.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/Checksum.lo: java/util/zip/Checksum.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/DataFormatException.lo: \
+       java/util/zip/DataFormatException.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/Deflater.lo: java/util/zip/Deflater.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/DeflaterOutputStream.lo: \
+       java/util/zip/DeflaterOutputStream.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/GZIPInputStream.lo: java/util/zip/GZIPInputStream.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/GZIPOutputStream.lo: java/util/zip/GZIPOutputStream.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/Inflater.lo: java/util/zip/Inflater.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/InflaterInputStream.lo: \
+       java/util/zip/InflaterInputStream.java java/util/zip/.dirstamp \
+       .deps/java/util/zip/.dirstamp
+java/util/zip/ZipConstants.lo: java/util/zip/ZipConstants.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/ZipEntry.lo: java/util/zip/ZipEntry.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/ZipException.lo: java/util/zip/ZipException.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/ZipFile.lo: java/util/zip/ZipFile.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/ZipInputStream.lo: java/util/zip/ZipInputStream.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/util/zip/ZipOutputStream.lo: java/util/zip/ZipOutputStream.java \
+       java/util/zip/.dirstamp .deps/java/util/zip/.dirstamp
+java/lang/Class.lo: java/lang/Class.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/Object.lo: java/lang/Object.java java/lang/.dirstamp \
+       .deps/java/lang/.dirstamp
+java/lang/ConcreteProcess.lo: java/lang/ConcreteProcess.java \
+       java/lang/.dirstamp .deps/java/lang/.dirstamp
 
 libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES)
        $(CXXLINK) -rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(libgcj_la_OBJECTS) $(libgcj_la_LIBADD) $(LIBS)
@@ -1037,15 +1761,18 @@ install-binPROGRAMS: $(bin_PROGRAMS)
        $(mkinstalldirs) $(DESTDIR)$(bindir)
        @list='$(bin_PROGRAMS)'; for p in $$list; do \
          if test -f $$p; then \
-           echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
-           $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+           f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+           echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f"; \
+           $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f; \
          else :; fi; \
        done
 
 uninstall-binPROGRAMS:
        @$(NORMAL_UNINSTALL)
-       list='$(bin_PROGRAMS)'; for p in $$list; do \
-         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+         echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+         rm -f $(DESTDIR)$(bindir)/$$f; \
        done
 
 mostlyclean-noinstPROGRAMS:
@@ -1056,59 +1783,93 @@ clean-noinstPROGRAMS:
 distclean-noinstPROGRAMS:
 
 maintainer-clean-noinstPROGRAMS:
+gen-from-JIS.o: $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c
+make-trie.o: $(srcdir)/$(CONVERT_DIR)/make-trie.c
 
-jv-convert$(EXEEXT): $(jv_convert_OBJECTS) $(jv_convert_DEPENDENCIES)
-       @rm -f jv-convert$(EXEEXT)
-       $(jv_convert_LINK) $(jv_convert_LDFLAGS) $(jv_convert_OBJECTS) $(jv_convert_LDADD) $(LIBS)
+gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
+       @rm -f gen-from-JIS$(EXEEXT)
+       $(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
 
 gij$(EXEEXT): $(gij_OBJECTS) $(gij_DEPENDENCIES)
        @rm -f gij$(EXEEXT)
        $(gij_LINK) $(gij_LDFLAGS) $(gij_OBJECTS) $(gij_LDADD) $(LIBS)
+gnu/gcj/convert/BytesToUnicode.o: gnu/gcj/convert/BytesToUnicode.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Convert.o: gnu/gcj/convert/Convert.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_8859_1.o: gnu/gcj/convert/Input_8859_1.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_EUCJIS.o: gnu/gcj/convert/Input_EUCJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_JavaSrc.o: gnu/gcj/convert/Input_JavaSrc.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_SJIS.o: gnu/gcj/convert/Input_SJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Input_UTF8.o: gnu/gcj/convert/Input_UTF8.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_8859_1.o: gnu/gcj/convert/Output_8859_1.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_EUCJIS.o: gnu/gcj/convert/Output_EUCJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_JavaSrc.o: gnu/gcj/convert/Output_JavaSrc.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_SJIS.o: gnu/gcj/convert/Output_SJIS.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/Output_UTF8.o: gnu/gcj/convert/Output_UTF8.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
+gnu/gcj/convert/UnicodeToBytes.o: gnu/gcj/convert/UnicodeToBytes.java \
+       gnu/gcj/convert/.dirstamp .deps/gnu/gcj/convert/.dirstamp
 
-gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
-       @rm -f gen-from-JIS$(EXEEXT)
-       $(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
+jv-convert$(EXEEXT): $(jv_convert_OBJECTS) $(jv_convert_DEPENDENCIES)
+       @rm -f jv-convert$(EXEEXT)
+       $(jv_convert_LINK) $(jv_convert_LDFLAGS) $(jv_convert_OBJECTS) $(jv_convert_LDADD) $(LIBS)
+.c.o:
+       $(COMPILE) -c $<
+.c.lo:
+       $(LTCOMPILE) -c -o $@ $<
 .cc.o:
-       $(CXXCOMPILE) -c $<
+       $(CXXCOMPILE) -c -o $@ $<
 .cc.lo:
-       $(LTCXXCOMPILE) -c $<
+       $(LTCXXCOMPILE) -c -o $@ $<
+.java.o:
+       $(GCJCOMPILE) -c -o $@ $<
+.java.lo:
+       $(LTGCJCOMPILE) -c -o $@ $<
 
 install-dataDATA: $(data_DATA)
        @$(NORMAL_INSTALL)
        $(mkinstalldirs) $(DESTDIR)$(datadir)
        @list='$(data_DATA)'; for p in $$list; do \
-         if test -f $(srcdir)/$$p; then \
-           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p"; \
-           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p; \
-         else if test -f $$p; then \
-           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p"; \
-           $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p; \
-         fi; fi; \
+         if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(datadir)/$$f"; \
+         $(INSTALL_DATA) $$d$$p $(DESTDIR)$(datadir)/$$f; \
        done
 
 uninstall-dataDATA:
        @$(NORMAL_UNINSTALL)
-       list='$(data_DATA)'; for p in $$list; do \
-         rm -f $(DESTDIR)$(datadir)/$$p; \
+       @list='$(data_DATA)'; for p in $$list; do \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " rm -f $(DESTDIR)$(datadir)/$$f"; \
+         rm -f $(DESTDIR)$(datadir)/$$f; \
        done
 
 install-toolexeclibDATA: $(toolexeclib_DATA)
        @$(NORMAL_INSTALL)
        $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
        @list='$(toolexeclib_DATA)'; for p in $$list; do \
-         if test -f $(srcdir)/$$p; then \
-           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
-           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(toolexeclibdir)/$$p; \
-         else if test -f $$p; then \
-           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
-           $(INSTALL_DATA) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
-         fi; fi; \
+         if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toolexeclibdir)/$$f"; \
+         $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toolexeclibdir)/$$f; \
        done
 
 uninstall-toolexeclibDATA:
        @$(NORMAL_UNINSTALL)
-       list='$(toolexeclib_DATA)'; for p in $$list; do \
-         rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
+       @list='$(toolexeclib_DATA)'; for p in $$list; do \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " rm -f $(DESTDIR)$(toolexeclibdir)/$$f"; \
+         rm -f $(DESTDIR)$(toolexeclibdir)/$$f; \
        done
 
 # This directory's subdirectories are mostly independent; you can cd
@@ -1147,7 +1908,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         if test "$$subdir" = "."; then dot_seen=yes; else :; fi; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
@@ -1168,15 +1929,17 @@ tags-recursive:
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
               END { for (i in files) print i; }'`; \
-       here=`pwd` && cd $(srcdir) \
-         && mkid -f$$here/ID $$unique $(LISP)
+       mkid -f$$here/ID $$unique $(LISP)
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
        tags=; \
        here=`pwd`; \
        list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -1184,12 +1947,14 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
            test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
    fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
+       list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
               END { for (i in files) print i; }'`; \
        test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+         || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
 
 mostlyclean-tags:
 
@@ -1208,11 +1973,11 @@ top_distdir = $(distdir)
 # tarfile.
 distcheck: dist
        -rm -rf $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+       GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
        mkdir $(distdir)/=build
        mkdir $(distdir)/=inst
-       dc_install_base=`cd $(distdir)/=inst && pwd`; \
-       cd $(distdir)/=build \
+       dc_install_base=`cd $(distdir)/=inst && pwd` \
+         && cd $(distdir)/=build \
          && ../configure --srcdir=.. --prefix=$$dc_install_base \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -1227,17 +1992,22 @@ distcheck: dist
        echo "$$banner"; \
        echo "$$dashes"
 dist: distdir
-       -chmod -R a+r $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+       $(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
        -rm -rf $(distdir)
 dist-all: distdir
-       -chmod -R a+r $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+       $(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
        -rm -rf $(distdir)
 distdir: $(DISTFILES)
        -rm -rf $(distdir)
        mkdir $(distdir)
-       -chmod 777 $(distdir)
        here=`cd $(top_builddir) && pwd`; \
        top_distdir=`cd $(distdir) && pwd`; \
        distdir=`cd $(distdir) && pwd`; \
@@ -1246,7 +2016,7 @@ distdir: $(DISTFILES)
        @for file in $(DISTFILES); do \
          d=$(srcdir); \
          if test -d $$d/$$file; then \
-           cp -pr $$/$$file $(distdir)/$$file; \
+           cp -pr $$d/$$file $(distdir)/$$file; \
          else \
            test -f $(distdir)/$$file \
            || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
@@ -1258,7 +2028,6 @@ distdir: $(DISTFILES)
            test -d $(distdir)/$$subdir \
            || mkdir $(distdir)/$$subdir \
            || exit 1; \
-           chmod 777 $(distdir)/$$subdir; \
            (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
              || exit 1; \
          fi; \
@@ -1278,42 +2047,42 @@ distclean-depend:
 maintainer-clean-depend:
 
 %.o: %.c
-       @echo '$(COMPILE) -c $<'; \
-       $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
+       @echo '$(COMPILE) -c -o $@ $<'; \
+       $(COMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
+       @-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
          | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
+           >> .deps/$(*D)/$(*F).P; \
+       rm .deps/$(*D)/$(*F).pp
 
 %.lo: %.c
-       @echo '$(LTCOMPILE) -c $<'; \
-       $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @echo '$(LTCOMPILE) -c -o $@ $<'; \
+       $(LTCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
        @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
+         < .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
          | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
+           >> .deps/$(*D)/$(*F).P; \
+       rm -f .deps/$(*D)/$(*F).pp
 
 %.o: %.cc
-       @echo '$(CXXCOMPILE) -c $<'; \
-       $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
+       @echo '$(CXXCOMPILE) -c -o $@ $<'; \
+       $(CXXCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
+       @-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
          | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
+           >> .deps/$(*D)/$(*F).P; \
+       rm .deps/$(*D)/$(*F).pp
 
 %.lo: %.cc
-       @echo '$(LTCXXCOMPILE) -c $<'; \
-       $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @echo '$(LTCXXCOMPILE) -c -o $@ $<'; \
+       $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
        @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
+         < .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
          | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
+           >> .deps/$(*D)/$(*F).P; \
+       rm -f .deps/$(*D)/$(*F).pp
 info-am:
 info: info-recursive
 dvi-am:
@@ -1340,7 +2109,7 @@ uninstall: uninstall-recursive
 all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
 all-redirect: all-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
 installdirs: installdirs-recursive
 installdirs-am:
        $(mkinstalldirs)  $(DESTDIR)$(toolexeclibdir) $(DESTDIR)$(bindir) \
@@ -1406,20 +2175,22 @@ distclean-binPROGRAMS clean-binPROGRAMS maintainer-clean-binPROGRAMS \
 uninstall-binPROGRAMS install-binPROGRAMS mostlyclean-noinstPROGRAMS \
 distclean-noinstPROGRAMS clean-noinstPROGRAMS \
 maintainer-clean-noinstPROGRAMS uninstall-dataDATA install-dataDATA \
-uninstall-toolexeclibDATA install-toolexeclibDATA \
-install-data-recursive uninstall-data-recursive install-exec-recursive \
-uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
-all-recursive check-recursive installcheck-recursive info-recursive \
-dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+uninstall-toolexeclibDATA install-toolexeclibDATA install-recursive \
+uninstall-recursive install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
 maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
 distclean-tags clean-tags maintainer-clean-tags distdir \
 mostlyclean-depend distclean-depend clean-depend \
 maintainer-clean-depend info-am info dvi-am dvi check check-am \
 installcheck-am installcheck install-info-am install-info \
 install-exec-am install-exec install-data-am install-data install-am \
-install uninstall-am uninstall all-redirect all-am all installdirs-am \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+install uninstall-am uninstall all-redirect all-am all install-strip \
+installdirs-am installdirs mostlyclean-generic distclean-generic \
+clean-generic maintainer-clean-generic clean mostlyclean distclean \
+maintainer-clean
 
 
 $(java_source_files:.java=.class): libgcj.zip
@@ -1464,11 +2235,17 @@ $(javao_files): %.lo: %.java
        $(GCJH) -classpath $(top_builddir) $(basename $<)
 
 $(nat_headers): libgcj.zip
+
 java/lang/FirstThread.h: java/lang/FirstThread.class libgcj.zip
-       $(GCJH) -classpath $(top_builddir) -friend '$(FTFRIEND);' \
+       $(GCJH) -classpath $(top_builddir) \
+               -friend 'void JvRunMain (jclass, int, const char **);' \
+               -friend 'void _Jv_RunMain (const char*, int, const char **);' \
                $(basename $<)
+
 java/lang/ThreadGroup.h: java/lang/ThreadGroup.class libgcj.zip
-       $(GCJH) -classpath $(top_builddir) -friend '$(TGFRIEND);' \
+       $(GCJH) -classpath $(top_builddir) \
+               -friend 'void JvRunMain (jclass, int, const char **);' \
+               -friend 'void _Jv_RunMain (const char*, int, const char **);' \
                $(basename $<)
 
 java/lang/String.h: java/lang/String.class libgcj.zip
@@ -1494,7 +2271,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip
            -friend 'java::lang::Class;' \
            $(basename $<)
 
-java/lang/VMClassLoader.h: java/lang/VMClassLoader.class libgcj.zip
+gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
        $(GCJH) -classpath $(top_builddir) \
            -friend 'java::lang::ClassLoader;' \
            $(basename $<)
index f29e82520d1ec886a59d923746c64f2e71bebd2b..5bd2451275e29725adf5569a4a3cf09efed03a8b 100644 (file)
@@ -23,5 +23,5 @@ int main (int argc, const char **argv)
       exit (1);
     }
 
-  JvRunMain (0, argc, argv);
+  _Jv_RunMain (argv[1], argc-1, argv+1);
 }
diff --git a/libjava/gnu/gcj/protocol/jar/Connection.java b/libjava/gnu/gcj/protocol/jar/Connection.java
new file mode 100644 (file)
index 0000000..4d7421b
--- /dev/null
@@ -0,0 +1,86 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package gnu.gcj.protocol.jar;
+
+import java.net.URL;
+import java.net.JarURLConnection;
+import java.net.URLStreamHandler;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.io.IOException;
+import java.util.jar.JarFile;
+import java.util.Hashtable;
+
+/**
+ * Written using on-line Java Platform 1.2 API Specification.
+ * Status: Needs a way to download jar files and store them in the local file
+ * system.  I don't know how to do that in a portable way.  For now, it can only handle 
+ * connections to a jar:file: url's.
+ *
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date Aug 10, 1999.
+ */
+
+
+
+public class Connection extends JarURLConnection 
+{
+  static Hashtable file_cache = new Hashtable();
+  private JarFile jarfile;
+
+  public Connection(URL url)
+    throws MalformedURLException
+  {
+    super(url);
+  }
+
+  public synchronized JarFile getJarFile() throws java.io.IOException
+  {
+    if (!connected)
+      connect();
+
+    if (! doInput)
+      throw new ProtocolException("Can't open JarFile if doInput is false");
+
+    if (jarfile != null)
+      return jarfile;
+
+    URL jarFileURL = getJarFileURL ();
+
+    if (jarFileURL.getProtocol ().equals ("file")
+       && jarFileURL.getHost ().equals (""))
+      {
+       if (getUseCaches())
+         {
+           jarfile = (JarFile) file_cache.get(jarFileURL);
+           if (jarFileURL == null)
+             {
+               jarfile = new JarFile (jarFileURL.getFile ());
+               file_cache.put (jarFileURL, jarfile);
+             }
+         }
+       else
+         jarfile = new JarFile (jarFileURL.getFile ());
+      }
+    else
+      {
+       /*
+         FIXME: Here we need to download and cache the jar
+         file in the local file system!  Stupid design.  Why
+         can't we just create a JarFile from a bag of bytes?
+       */
+
+       throw new java.io.IOException("cannot create jar file from " +
+                                     jarFileURL);
+      }
+
+    return jarfile;
+  }
+
+}
diff --git a/libjava/gnu/gcj/protocol/jar/Handler.java b/libjava/gnu/gcj/protocol/jar/Handler.java
new file mode 100644 (file)
index 0000000..f9feb7d
--- /dev/null
@@ -0,0 +1,29 @@
+// Handler.java - URLStreamHandler for file protocol.
+
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package gnu.gcj.protocol.jar;
+
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.io.IOException;
+
+/**
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date August 13, 1999.
+ */
+
+public class Handler extends URLStreamHandler
+{
+  protected URLConnection openConnection(URL url) throws IOException
+  {
+    return new Connection(url);
+  }
+}
diff --git a/libjava/gnu/gcj/runtime/VMClassLoader.java b/libjava/gnu/gcj/runtime/VMClassLoader.java
new file mode 100644 (file)
index 0000000..bfdb362
--- /dev/null
@@ -0,0 +1,62 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+/* Author: Kresten Krab Thorup <krab@gnu.org>  */
+
+package gnu.gcj.runtime;
+
+import java.io.*;
+import java.util.StringTokenizer;
+import java.net.URL;
+
+final class VMClassLoader extends java.net.URLClassLoader
+{
+  private VMClassLoader ()
+  {    
+    super (init());
+  }
+
+  private static URL[] init() 
+  {
+    StringTokenizer st
+       = new StringTokenizer (System.getProperty ("java.class.path", "."),
+                              System.getProperty ("path.separator", ":"));
+
+    java.util.Vector p = new java.util.Vector();
+    while (st.hasMoreElements ()) 
+      {  
+       String e = st.nextToken ();
+       try
+         {
+           if (e.endsWith(".jar") || e.endsWith (".zip"))
+             p.addElement(new URL("jar", "", -1, "file:///"+e+"!/"));
+           else if (e.endsWith ("/"))
+             p.addElement (new URL("file", "", -1, e));
+           else if (new File (e).isDirectory ())
+             p.addElement (new URL("file", "", -1, e + "/"));
+           else
+             /* Ignore path element. */;
+         } 
+       catch (java.net.MalformedURLException x)
+         {
+           /* Ignore this path element */
+         }
+      }
+
+    URL[] urls = new URL[p.size()];
+    p.copyInto (urls);
+    return urls;
+  }
+
+  /** This is overridden to search the internal hash table, which 
+   * will only search existing linked-in classes.   This will make
+   * the default implementation of loadClass (in ClassLoader) work right.
+   */
+  protected final native Class findSystemClass(String name) 
+    throws java.lang.ClassNotFoundException, java.lang.LinkageError;
+}
index 3be61b635a234d77cb4793bd8ec03c9cf699c6fc..ff1c122c2f9d9e748b9049b8a88016857dacbf64 100644 (file)
@@ -72,6 +72,7 @@ inline jobjectArray JvNewObjectArray (jsize length, jclass cls, jobject init)
 
 extern "C" jstringArray JvConvertArgv(int argc, const char **argv);
 extern "C" void JvRunMain (jclass klass, int argc, const char **argv);
+void _Jv_RunMain (const char* name, int argc, const char **argv);
 
 inline jsize JvGetArrayLength (jarray array) { return array->length; }
 
index 6ca6f0da606a5963b3406b69d780260615b22762..2ecaf03de9ed0e4d567e9aac2b579c20250bf760 100644 (file)
@@ -109,22 +109,25 @@ static inline void dupx (_Jv_word *&sp, int n, int x)
 };
 
 
-#define PUSHA(V)  \
- ({ jobject __v=(V); (sp++)->o = __v; })
-#define PUSHI(V)  \
- ({ jint __v=(V); (sp++)->i = __v; })
-#define PUSHF(V)  \
- ({ jfloat __v=(V); (sp++)->f = __v; })
-#define PUSHL(V)  \
- ({ jlong __v=(V); _Jv_storeLong(sp,__v); sp+=2; })
-#define PUSHD(V)  \
- ({ jdouble __v=(V); _Jv_storeDouble(sp,__v); sp+=2; })
+#define PUSHA(V)  (sp++)->o = (V)
+#define PUSHI(V)  (sp++)->i = (V)
+#define PUSHF(V)  (sp++)->f = (V)
+#define PUSHL(V)  ({ _Jv_word2 w2; w2.l=(V); \
+                     (sp++)->ia[0] = w2.ia[0]; \
+                     (sp++)->ia[0] = w2.ia[1]; })
+#define PUSHD(V)  ({ _Jv_word2 w2; w2.d=(V); \
+                     (sp++)->ia[0] = w2.ia[0]; \
+                     (sp++)->ia[0] = w2.ia[1]; })
 
 #define POPA()    ((--sp)->o)
 #define POPI()    ((jint) (--sp)->i) // cast since it may be promoted
 #define POPF()    ((jfloat) (--sp)->f)
-#define POPL()    ({ sp-=2; _Jv_loadLong (sp); })
-#define POPD()    ({ sp-=2; _Jv_loadDouble (sp); })
+#define POPL()    ({ _Jv_word2 w2; \
+                     w2.ia[1] = (--sp)->ia[0]; \
+                     w2.ia[0] = (--sp)->ia[0]; w2.l; })
+#define POPD()    ({ _Jv_word2 w2; \
+                     w2.ia[1] = (--sp)->ia[0]; \
+                     w2.ia[0] = (--sp)->ia[0]; w2.d; })
 
 #define LOADA(I)  (sp++)->o = locals[I].o
 #define LOADI(I)  (sp++)->i = locals[I].i
@@ -456,17 +459,6 @@ dump_time ()
   
 void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
 {
-  /* for some reason, which I do not understand, the compiler on x86
-   * allocates almost 4k stack space for this function!  Even though
-   * there are many local variables, they are all nicely contained
-   * within a block scope, except for the few declared right below
-   * here.  What's going on??  It could well be, that there in fact is
-   * on the order of 1000 local variables, including all those inlined
-   * and expanded from macros...   Compiling with -O0, it allocates a
-   * "modest" 300 bytes of stack space.   Among all those options of
-   * gcc, why isn't there a -fpack-stack, allowing reuse of stack
-   * locations?  */
-  
   _Jv_word      *sp     = inv->sp;
   unsigned char *pc     = inv->pc;
   _Jv_word      *locals = inv->local_base ();
@@ -542,9 +534,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
 #endif
   opcode = *pc++;
 
-  /* we special-case the single opcode aload_0 -- it makes 
-     up 10% of the time spent in the main loop. */
-
   switch (opcode)
     {
     case op_aload_0:           // 0x2a
@@ -1359,63 +1348,63 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
       goto next_insn;
 
     case op_i2l:
-      PUSHL ((jlong)POPI ());
+      {jlong value = POPI(); PUSHL (value);}
       goto next_insn;
 
     case op_i2f:
-      PUSHF ((jfloat)POPI ());
+      {jfloat value = POPI(); PUSHF (value);}
       goto next_insn;
 
     case op_i2d:
-      PUSHD ((jdouble)POPI ());
+      {jdouble value = POPI(); PUSHD (value);}
       goto next_insn;
 
     case op_l2i:
-      PUSHI ((jint)POPL ());
+      {jint value = POPL(); PUSHI (value);}
       goto next_insn;
 
     case op_l2f:
-      PUSHF ((jfloat)POPL ());
+      {jfloat value = POPL(); PUSHF (value);}
       goto next_insn;
 
     case op_l2d:
-      PUSHD ((jdouble)POPL ());
+      {jdouble value = POPL(); PUSHD (value);}
       goto next_insn;
 
     case op_f2i:
-      PUSHI ((jint)POPF ());
+      { jint value = (jint)POPF (); PUSHI(value); }
       goto next_insn;
 
     case op_f2l:
-      PUSHL ((jlong)POPF ());
+      { jlong value = (jlong)POPF (); PUSHL(value); }
       goto next_insn;
 
     case op_f2d:
-      PUSHD ((jdouble)POPF ());
+      { jdouble value = POPF (); PUSHD(value); }
       goto next_insn;
 
     case op_d2i:
-      PUSHI ((jint)POPD ());
+      { jint value = (jint)POPD (); PUSHI(value); }
       goto next_insn;
 
     case op_d2l:
-      PUSHL ((jlong)POPD ());
+      { jlong value = (jlong)POPD (); PUSHL(value); }
       goto next_insn;
 
     case op_d2f:
-      PUSHF ((jfloat)POPD ());
+      { jfloat value = POPD (); PUSHF(value); }
       goto next_insn;
 
     case op_i2b:
-      PUSHI ((jbyte)POPI ());
+      { jbyte value = POPI (); PUSHI(value); }
       goto next_insn;
 
     case op_i2c:
-      PUSHI ((jchar)POPI ());
+      { jchar value = POPI (); PUSHI(value); }
       goto next_insn;
 
     case op_i2s:
-      PUSHI ((jshort)POPI ());
+      { jshort value = POPI (); PUSHI(value); }
       goto next_insn;
 
     case op_lcmp:
index c4600bf329d34adc3937abbedf5b382f3efcd694..b038c3498266d686dd483f4ffa19b014becc2323 100644 (file)
@@ -16,6 +16,7 @@ details.  */
 
 #include <java/lang/Object.h>
 #include <java/lang/String.h>
+#include <java/net/URL.h>
 
 // We declare these here to avoid including cni.h.
 extern "C" void _Jv_InitClass (jclass klass);
@@ -108,6 +109,7 @@ public:
 
   jstring getName (void);
 
+  java::net::URL        *getResource (jstring resourceName);
   java::io::InputStream *getResourceAsStream (jstring resourceName);
   JArray<jobject> *getSigners (void);
 
@@ -182,7 +184,7 @@ private:
   friend jclass _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
                              java::lang::ClassLoader *loader);
 
-  friend void _Jv_InternClassStrings (jclass);
+  friend void _Jv_PrepareCompiledClass (jclass);
 
 #ifdef INTERPRETER
   friend jboolean _Jv_IsInterpretedClass (jclass);
index bc826e9029bad8fad49f2d2c8fede33c679c6100..f9bd59b25981b6158453d49376ac40106409f2d3 100644 (file)
@@ -80,13 +80,41 @@ public final class Class implements Serializable
   public native int getModifiers ();
   public native String getName ();
 
-  // FIXME: can't implement this until we have java.net.
-  // public URL getResource (String resourceName);
+  public java.net.URL getResource (String resourceName)
+  {
+    String name = resourcePath (resourceName);
+    ClassLoader loader = getClassLoader ();
+    if (loader == null)
+      return ClassLoader.getSystemResource (name);
+    else
+      return loader.getResource (name);
+  }
 
-  // FIXME: implement.
-  public InputStream getResourceAsStream (String resourceName)
+  public java.io.InputStream getResourceAsStream (String resourceName)
   {
-    return null;
+    String name = resourcePath (resourceName);
+    ClassLoader loader = getClassLoader ();
+    if (loader == null)
+      return ClassLoader.getSystemResourceAsStream (name);
+    else
+      return loader.getResourceAsStream (name);
+  }
+
+  private String resourcePath (String resourceName)
+  {
+    if (resourceName.startsWith ("/"))
+      return resourceName.substring (1);
+
+    Class c = this;
+    while (c.isArray ())
+      c = c.getComponentType ();
+
+    String packageName = c.getName ().replace ('.', '/');
+    int end = packageName.lastIndexOf ('/');
+    if (end == -1)
+      return resourceName;
+    else
+      return packageName.substring (0, end+1) + resourceName;
   }
 
   // FIXME: implement.  Requires java.security.
index 3135740a88ea2680f99999ec44480f2aabc47aea..4d520bb6c199b4a93312150eb4affabb97dfd481 100644 (file)
@@ -26,6 +26,13 @@ import java.util.Stack;
 public abstract class ClassLoader {
 
   static private ClassLoader system;
+  private ClassLoader parent;
+
+  public ClassLoader getParent ()
+  {
+    /* FIXME: security */
+    return parent;
+  }
     
   private static native ClassLoader getVMClassLoader0 ();
 
@@ -36,17 +43,29 @@ public abstract class ClassLoader {
   }
 
   /**
-   * Creates a <code>ClassLoader</code>.   The only thing this
+   * Creates a <code>ClassLoader</code> with no parent.
+   * @exception java.lang.SecurityException if not allowed
+   */
+  protected ClassLoader() 
+  {
+    this (null);
+  }
+
+  /**
+   * Creates a <code>ClassLoader</code> with the given parent.   
+   * The parent may be <code>null</code>.
+   * The only thing this 
    * constructor does, is to call
    * <code>checkCreateClassLoader</code> on the current 
    * security manager. 
    * @exception java.lang.SecurityException if not allowed
    */
-  protected ClassLoader() 
+  protected ClassLoader(ClassLoader parent
   {
     SecurityManager security = System.getSecurityManager ();
     if (security != null)
       security.checkCreateClassLoader ();
+    this.parent = parent;
   }
 
   /** 
@@ -59,22 +78,68 @@ public abstract class ClassLoader {
   public Class loadClass(String name) 
     throws java.lang.ClassNotFoundException, java.lang.LinkageError
   { 
-    return loadClass (name, true);
+    return loadClass (name, false);
   }
 
   /** 
-   * Loads the class by the given name.  
-   * As per java 1.1, this has been deprecated.  Use 
-   * <code>loadClass(String)</code>
-   * instead.
+   * Loads the class by the given name.  The default implementation
+   * will search for the class in the following order (similar to jdk 1.2)
+   * <ul>
+   *  <li> First <code>findLoadedClass</code>.
+   *  <li> If parent is non-null, <code>parent.loadClass</code>;
+   *       otherwise <code>findSystemClass</code>.
+   *  <li> <code>findClass</code>.
+   * </ul>
+   * If <code>link</code> is true, <code>resolveClass</code> is then
+   * called.  <p> Normally, this need not be overridden; override
+   * <code>findClass</code> instead.
    * @param     name the name of the class.
    * @param     link if the class should be linked.
    * @return    the class loaded.
    * @exception java.lang.ClassNotFoundException 
    * @deprecated 
    */ 
-  protected abstract Class loadClass(String name, boolean link)
-    throws java.lang.ClassNotFoundException, java.lang.LinkageError;
+  protected Class loadClass(String name, boolean link)
+    throws java.lang.ClassNotFoundException, java.lang.LinkageError
+  {
+    Class c = findLoadedClass (name);
+
+    if (c == null)
+      {
+       try {
+         if (parent != null)
+           return parent.loadClass (name, link);
+         else
+           c = findSystemClass (name);
+       } catch (ClassNotFoundException ex) {
+         /* ignore, we'll try findClass */;
+       }
+      }
+
+    if (c == null)
+      c = findClass (name);
+
+    if (c == null)
+      throw new ClassNotFoundException (name);
+
+    if (link)
+      resolveClass (c);
+
+    return c;
+  }
+
+  /** Find a class.  This should be overridden by subclasses; the
+   *  default implementation throws ClassNotFoundException.
+   *
+   * @param name Name of the class to find.
+   * @return     The class found.
+   * @exception  java.lang.ClassNotFoundException
+   */
+  protected Class findClass (String name)
+    throws ClassNotFoundException
+  {
+    throw new ClassNotFoundException ();
+  }
 
   /** 
    * Defines a class, given the class-data.  According to the JVM, this
@@ -251,7 +316,7 @@ public abstract class ClassLoader {
   }
 
   /** Internal method.  Calls _Jv_PrepareClass and
-   * _Jv_InternClassStrings.  This is only called from resolveClass.  */ 
+   * _Jv_PrepareCompiledClass.  This is only called from resolveClass.  */ 
   private static native void linkClass0(Class clazz)
     throws java.lang.LinkageError;
 
@@ -263,15 +328,19 @@ public abstract class ClassLoader {
 
   /** 
    * Returns a class found in a system-specific way, typically
-   * via the <code>java.class.path</code> system property.  
+   * via the <code>java.class.path</code> system property.  Loads the 
+   * class if necessary.
    *
    * @param     name the class to resolve.
    * @return    the class loaded.
    * @exception java.lang.LinkageError 
    * @exception java.lang.ClassNotFoundException 
    */
-  protected native Class findSystemClass(String name) 
-    throws java.lang.ClassNotFoundException, java.lang.LinkageError;
+  protected Class findSystemClass(String name) 
+    throws java.lang.ClassNotFoundException, java.lang.LinkageError
+  {
+    return getSystemClassLoader ().loadClass (name);
+  }
 
   /*
    * Does currently nothing.
@@ -280,10 +349,11 @@ public abstract class ClassLoader {
     /* claz.setSigners (signers); */
   }
 
-  /*
+  /**
    * If a class named <code>name</code> was previously loaded using
    * this <code>ClassLoader</code>, then it is returned.  Otherwise
-   * it returns <code>null</code>.
+   * it returns <code>null</code>.  (Unlike the JDK this is native,
+   * since we implement the class table internally.)
    * @param     name  class to find.
    * @return    the class loaded, or null.
    */ 
@@ -297,10 +367,6 @@ public abstract class ClassLoader {
     return system.getResource (name);
   }
 
-  public static final byte[] getSystemResourceAsBytes(String name) {
-    return system.getResourceAsBytes (name);
-  }
-
   /**
    *   Return an InputStream representing the resource name.  
    *   This is essentially like 
@@ -309,7 +375,6 @@ public abstract class ClassLoader {
    * @param   name  resource to load
    * @return  an InputStream, or null
    * @see     java.lang.ClassLoader#getResource(String)
-   * @see     java.lang.ClassLoader#getResourceAsBytes(String)
    * @see     java.io.InputStream
    */
   public InputStream getResourceAsStream(String name) 
@@ -323,42 +388,9 @@ public abstract class ClassLoader {
      }
   }
  
-  /**
-   *  Return a byte array <code>byte[]</code> representing the
-   *  resouce <code>name</code>.  This only works for resources
-   *  that have a known <code>content-length</code>, and
-   *  it will block while loading the resource.  Returns null
-   *  for error conditions.<p>
-   *  Since it is synchroneous, this is only convenient for 
-   *  resources that are "readily" available.  System resources
-   *  can conveniently be loaded this way, and the runtime
-   *  system uses this to load class files.  <p>
-   *  To find the class data for a given class, use
-   *  something like the following:
-   *  <ul><code>
-   *  String res = clazz.getName().replace ('.', '/')) + ".class";<br>
-   *  byte[] data = getResourceAsBytes (res);
-   *  </code></ul>
-   * @param   name  resource to load
-   * @return  a byte array, or null
-   * @see     java.lang.ClassLoader#getResource(String)
-   * @see     java.lang.ClassLoader#getResourceAsStream(String)
-   */
-  public byte[] getResourceAsBytes(String name) {
-    try {
-      URL res = getResource (name);
-      if (res == null) return null;
-      URLConnection conn = res.openConnection ();
-      int len = conn.getContentLength ();
-      if (len == -1) return null;
-      return readbytes (conn.getInputStream (), len);
-    } catch (java.io.IOException x) {
-       return null;
-     }
-  }
   /**
    * Return an java.io.URL representing the resouce <code>name</code>.  
+   * The default implementation just returns <code>null</code>.
    * @param   name  resource to load
    * @return  a URL, or null if there is no such resource.
    * @see     java.lang.ClassLoader#getResourceAsBytes(String)
@@ -369,31 +401,5 @@ public abstract class ClassLoader {
     return null;
   }
 
-  /**
-   * Utility routine to read a resource fully, even if the given
-   * InputStream only provides partial results.
-   */
-  private static byte[] readbytes (InputStream is, int length)
-  {
-    try {
-
-      byte[] data = new byte[length];
-      int read; 
-      int off = 0;
-           
-      while (off != length)
-       {
-         read = is.read (data, off, (int) (length-off));
-
-         if (read == -1) 
-           return null;
-
-         off += read;
-       }
-           
-      return data;
-    } catch (java.io.IOException x) {
-      return null;
-    }
-  }
 }
+
diff --git a/libjava/java/lang/VMClassLoader.java b/libjava/java/lang/VMClassLoader.java
deleted file mode 100644 (file)
index 026f6d8..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (C) 1999  Cygnus Solutions
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-/* Author: Kresten Krab Thorup <krab@gnu.org>  */
-
-package java.lang;
-
-import java.io.*;
-import java.net.URL;
-import gnu.gcj.util.path.SearchPath;
-
-final class VMClassLoader extends java.lang.ClassLoader
-{
-  private SearchPath   path;
-  private final String path_seperator;
-  private final String file_seperator;
-  private final char   file_seperator_char;
-    
-  private VMClassLoader () {   
-    path_seperator = System.getProperty ("path.separator", ":");
-    file_seperator = System.getProperty ("file.separator", "/");
-
-    file_seperator_char = file_seperator.charAt (0);
-
-    String class_path = System.getProperty ("java.class.path", ".");
-    path = new SearchPath (class_path);
-  }
-
-  protected Class loadClass(String name,
-                           boolean resolve) 
-    throws java.lang.ClassNotFoundException, java.lang.LinkageError
-  {
-    return loadClassInternal (name, resolve, false);
-  }
-       
-    /** I'm a little in doubt here, if this method is 
-       actually supposed to throw a LinkageError, or not.  
-       The spec, 20.14.3, is a little unclear.  It says:
-
-       `` The general contract of loadClass is that, given the name
-       of a class, it either returns the Class object for the class
-       or throws a ClassNotFoundException.''
-
-       However, by making LinkageError a checked exception, 
-       i.e., mention it directly in the throws clause,
-       we'll force caller to consider that case as well.
-    **/
-
-  protected Class loadClassInternal(String name,
-                                   boolean resolve, 
-                                   boolean fromBootLoader) 
-    throws java.lang.ClassNotFoundException, java.lang.LinkageError
-  {
-    Class clazz;
-
-    /** TODO: call _Jv_VerifyClassName **/
-    if (   (name.indexOf ('/') != -1)
-          || (name.charAt (0) == '.')
-          || (name.indexOf (file_seperator) != -1)
-          || (name.indexOf ("..") != -1))
-       {
-           throw new IllegalArgumentException (name);
-       }
-
-    // already loaded?
-    clazz = findLoadedClass (name);
-
-    // we need access to the boot class loader here
-    if (clazz == null && !fromBootLoader)
-      clazz = findBootClass (name);
-
-    if (clazz == null)
-      {
-       StringBuffer res = new StringBuffer ();
-
-       // here we do actually replace .'s with /'s because
-       // we're going to find something in the file system.
-       res.append (name.replace ('.', file_seperator_char));
-       res.append (".class");
-               
-       byte[] data = getResourceAsBytes (res.toString ());
-
-       if (data == null)
-         throw new ClassNotFoundException (name);
-
-       clazz = defineClass (name, data, 0, data.length);
-           
-      }
-
-    if (resolve && clazz != null)
-      resolveClass (clazz);
-
-    return clazz;
-  }
-
-  private native Class findBootClass (String name);
-
-  public InputStream getResourceAsStream(String name) 
-  {
-    return path.getStream (name);
-  }
-
-  public URL getResource(String name) 
-  {
-    return path.getURL (name);
-  }
-
-  public byte[] getResourceAsBytes(String name) 
-  {
-    return path.getBytes (name);
-  }
-}
index 01058dc0e6b1bf54630d4dd7b3a5621608e69321..ff5e9c65da58e5b9d53e0f09c6add2316dd295f4 100644 (file)
@@ -92,8 +92,6 @@ java::lang::Class::forName (jstring className)
   if (! klass)
     JvThrow (new java::lang::ClassNotFoundException (className));
 
-  _Jv_InitClass (klass);
-
   return klass;
 }
 
@@ -354,6 +352,8 @@ java::lang::Class::newInstance (void)
       || java::lang::reflect::Modifier::isAbstract(accflags))
     JvThrow (new java::lang::InstantiationException);
 
+  _Jv_InitClass (this);
+
   _Jv_Method *meth = _Jv_GetMethodLocal (this, init_name, void_signature);
   if (! meth)
     JvThrow (new java::lang::NoSuchMethodException);
@@ -408,7 +408,7 @@ java::lang::Class::initializeClass (void)
         {
           // Step 1.
          _Jv_MonitorEnter (this);
-         _Jv_InternClassStrings (this);
+         _Jv_PrepareCompiledClass (this);
        }
     }
   else
index 0caaa4cbffd821019dd22f00e61a01c580622c55..c35417c87dbcc3d0ccd03f7448cec873423e4008 100644 (file)
@@ -20,8 +20,9 @@ details.  */
 #include <java/lang/Character.h>
 #include <java/lang/Thread.h>
 #include <java/lang/ClassLoader.h>
-#include <java/lang/VMClassLoader.h>
+#include <gnu/gcj/runtime/VMClassLoader.h>
 #include <java/lang/InternalError.h>
+#include <java/lang/IllegalAccessError.h>
 #include <java/lang/LinkageError.h>
 #include <java/lang/ClassFormatError.h>
 #include <java/lang/NoClassDefFoundError.h>
@@ -46,7 +47,7 @@ extern java::lang::Class ClassLoaderClass;
 /////////// java.lang.ClassLoader native methods ////////////
 
 #ifdef INTERPRETER
-java::lang::VMClassLoader *redirect = 0;
+gnu::gcj::runtime::VMClassLoader *redirect = 0;
 #endif
 
 java::lang::ClassLoader*
@@ -54,7 +55,7 @@ java::lang::ClassLoader::getVMClassLoader0 ()
 {
 #ifdef INTERPRETER
     if (redirect == 0)
-       redirect = new java::lang::VMClassLoader;
+       redirect = new gnu::gcj::runtime::VMClassLoader;
     return redirect;
 #else
     return 0;
@@ -144,7 +145,7 @@ _Jv_WaitForState (jclass klass, int state)
   if (state == JV_STATE_LINKED)
     {
       _Jv_MonitorExit (klass);
-      _Jv_InternClassStrings (klass);
+      _Jv_PrepareCompiledClass (klass);
       return;
     }
        
@@ -179,7 +180,7 @@ java::lang::ClassLoader::linkClass0 (java::lang::Class *klass)
     }
 #endif
 
-  _Jv_InternClassStrings (klass);
+  _Jv_PrepareCompiledClass (klass);
 }
 
 void
@@ -193,7 +194,7 @@ java::lang::ClassLoader::markClassErrorState0 (java::lang::Class *klass)
 /** this is the only native method in VMClassLoader, so 
     we define it here. */
 jclass
-java::lang::VMClassLoader::findBootClass (jstring name)
+gnu::gcj::runtime::VMClassLoader::findSystemClass (jstring name)
 {
   return _Jv_FindClassInCache (_Jv_makeUtf8Const (name), 0);
 }
@@ -204,22 +205,27 @@ java::lang::ClassLoader::findLoadedClass (jstring name)
   return _Jv_FindClassInCache (_Jv_makeUtf8Const (name), this);
 }
 
-jclass
-java::lang::ClassLoader::findSystemClass (jstring name)
-{
-  return _Jv_FindClass (_Jv_makeUtf8Const (name), 0);
-}
-
-
-/* This is the final step of linking, internalizing the constant strings
- * of a class.  This is called for both compiled and interpreted
- * classes, and it is *only* called from ClassLoader::linkClass0,
- * which is always in a context where the current thread has a lock on
- * the class in question.  We define it here, and not in resolve.cc, so that
- * the entire resolve.cc can be #ifdef'ed away when not using the
- * interpreter.   */
+static const int PUBLIC       = 0x001;
+static const int PRIVATE      = 0x002;
+static const int PROTECTED    = 0x004;
+static const int STATIC       = 0x008;
+static const int FINAL        = 0x010;
+static const int SYNCHRONIZED = 0x020;
+static const int VOLATILE     = 0x040;
+static const int TRANSIENT    = 0x080;
+static const int NATIVE       = 0x100;
+static const int INTERFACE    = 0x200;
+static const int ABSTRACT     = 0x400;
+static const int ALL_FLAGS    = 0x7FF; 
+
+
+/** This function does class-preparation for compiled classes.  
+    NOTE: This function replicates functionality from
+    _Jv_ResolvePoolEntry, and this is intentional, since that function
+    is 
+ */
 void
-_Jv_InternClassStrings(jclass klass)
+_Jv_PrepareCompiledClass(jclass klass)
 {
   if (klass->state >= JV_STATE_LINKED)
     return;
@@ -228,14 +234,44 @@ _Jv_InternClassStrings(jclass klass)
   klass->state = JV_STATE_LINKED;
 
   _Jv_Constants *pool = &klass->constants;
-  for (int i = 1; i < pool->size; ++i)
+  for (int index = 1; index < pool->size; ++index)
     {
-      if (pool->tags[i] == JV_CONSTANT_String)
+      if (pool->tags[index] == JV_CONSTANT_Class)
+       {
+         _Jv_Utf8Const *name = pool->data[index].utf8;
+         
+         jclass found;
+         if (name->data[0] == '[')
+           found = _Jv_FindClassFromSignature (&name->data[0],
+                                               klass->loader);
+         else
+           found = _Jv_FindClass (name, klass->loader);
+               
+         if (! found)
+           {
+             jstring str = _Jv_NewStringUTF (name->data);
+             JvThrow (new java::lang::ClassNotFoundException (str));
+           }
+
+         if ((found->accflags & PUBLIC) == PUBLIC
+             || (_Jv_ClassNameSamePackage (found->name,
+                                           klass->name)))
+           {
+             pool->data[index].clazz = found;
+             pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+           }
+         else
+           {
+             JvThrow (new java::lang::IllegalAccessError (found->getName()));
+           }
+       }
+           
+      else if (pool->tags[index] == JV_CONSTANT_String)
        {
          jstring str;
-         str = _Jv_NewStringUtf8Const (pool->data[i].utf8);
-         pool->data[i].string = str;
-         pool->tags[i] |= JV_CONSTANT_ResolvedFlag;
+         str = _Jv_NewStringUtf8Const (pool->data[index].utf8);
+         pool->data[index].o = str;
+         pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
        }
     }
 
@@ -443,7 +479,7 @@ jclass _Jv_FindClass (_Jv_Utf8Const *name,
            }
 
          // Load using the bootstrap loader jmspec 5.3.1
-         klass = redirect -> loadClassInternal (sname, false, true); 
+         klass = redirect -> loadClass (sname, false); 
 
          // register that we're an initiating loader
          if (klass)
diff --git a/libjava/java/net/JarURLConnection.java b/libjava/java/net/JarURLConnection.java
new file mode 100644 (file)
index 0000000..8eb4b7d
--- /dev/null
@@ -0,0 +1,301 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.net;
+
+import java.net.*;
+import java.io.*;
+import java.util.jar.*;
+import java.util.zip.*;
+import java.util.Vector;
+import java.util.Hashtable;
+
+/**
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date Aug 10, 1999.
+ */
+
+
+public abstract class JarURLConnection extends URLConnection
+{
+  // three different ways to say the same thing
+  private final URL jarFileURL;
+
+  /** The connection to the jar file itself. A JarURLConnection
+   *  can represent an entry in a jar file or an entire jar file.  In
+   *  either case this describes just the jar file itself. */
+  protected URLConnection jarFileURLConnection;
+
+  // If this is a connection to a jar file element this is set, otherwose null.
+  private final String element;
+
+  // Cached JarURLConnection's 
+  static Hashtable conn_cache = new Hashtable();
+
+  public URL getJarFileURL ()
+  {
+    return jarFileURL;
+  }
+
+  public String getEntryName ()
+  {
+    return element;
+  }
+
+  public JarURLConnection(URL url)
+    throws MalformedURLException
+  {
+    super(url);
+
+    String spec = url.getFile();
+    int bang = spec.indexOf ("!/", 0);
+    if (bang == -1)
+      throw new MalformedURLException (url + ": No `!/' in spec.");
+
+    // Extact the url for the jar itself.
+    jarFileURL = new URL(spec.substring (0, bang));
+
+    // Get the name of the element, if any.
+    element = (bang+2==spec.length() ? null : spec.substring (bang+2));
+  }
+
+  public synchronized void connect() throws IOException
+  {
+    // Call is ignored if already connected.
+    if (connected)
+      return;
+
+    if (getUseCaches())
+      {
+       jarFileURLConnection = (URLConnection) conn_cache.get (jarFileURL);
+
+       if (jarFileURLConnection == null)
+         {
+           jarFileURLConnection = jarFileURL.openConnection ();
+           jarFileURLConnection.setUseCaches (true);
+           jarFileURLConnection.connect ();
+           conn_cache.put (jarFileURL, jarFileURLConnection);
+         }
+      }
+    else
+      {
+       jarFileURLConnection = jarFileURL.openConnection ();
+       jarFileURLConnection.connect ();
+      }
+
+    connected = true;
+  }
+
+  public InputStream getInputStream() throws IOException
+  {
+    if (!connected)
+      connect();
+
+    if (! doInput)
+      throw new ProtocolException("Can't open InputStream if doInput is false");
+
+    if (element == null)
+      {
+       // This is a JarURLConnection for the entire jar file.  
+
+       InputStream jar_is = new BufferedInputStream(jarFileURLConnection.getInputStream ());
+       return new JarInputStream(jar_is);
+      }
+
+    // Reaching this point, we're looking for an element of a jar file.
+
+    JarFile jarfile = null;
+
+    try
+      {
+       jarfile = getJarFile ();
+      }
+    catch (java.io.IOException x)
+      {
+       /* ignore */
+      }
+    
+    if (jarfile != null)
+      {
+       // this is the easy way...
+       return jarfile.getInputStream (jarfile.getEntry (element));
+      }
+    else
+      {
+       // If the jar file is not local, ...
+       JarInputStream zis = new JarInputStream(jarFileURLConnection.getInputStream ());
+
+       // This is hideous, we're doing a linear search...
+       for (ZipEntry ent = zis.getNextEntry (); 
+            ent != null; 
+            ent = zis.getNextEntry ())
+         {
+           if (element.equals (ent.getName ()))
+             {
+               int size = (int)ent.getSize();
+               byte[] data = new byte[size];
+               zis.read (data, 0, size);
+               return new ByteArrayInputStream (data);
+             }
+         }
+      }
+
+    return null;
+  }
+
+  public JarEntry getJarEntry (String name)
+    throws java.io.IOException
+  {
+    JarFile jarfile = null;
+
+    if (! doInput)
+      throw new ProtocolException("Can't open JarEntry if doInput is false");
+
+    try
+      {
+       jarfile = getJarFile ();
+      }
+    catch (java.io.IOException x)
+      {
+       /* ignore */
+      }
+    
+    if (jarfile == null)
+      {
+       JarInputStream zis = new JarInputStream(jarFileURLConnection.getInputStream ());
+
+       // This is hideous, we're doing a linear search for the thing...
+       for (ZipEntry ent = zis.getNextEntry (); 
+            ent != null; 
+            ent = zis.getNextEntry ())
+         {
+           if (element.equals (ent.getName ()))
+             {
+               return new JarEntry (ent);
+             }
+         }
+      }
+
+    else
+      {
+       return jarfile.getJarEntry (element);
+      }
+
+    return null;
+  }
+
+  public abstract JarFile getJarFile() throws java.io.IOException;
+
+
+  // Steal and borrow from protocol/file/Connection.java
+
+  private Hashtable hdrHash = new Hashtable();
+  private Vector hdrVec = new Vector();
+  private boolean gotHeaders = false;
+
+  // Override default method in URLConnection.
+  public String getHeaderField(String name)
+  {
+    try
+      {
+       getHeaders();
+      }
+    catch (IOException x)
+      {
+       return null;
+      }
+    return (String) hdrHash.get(name.toLowerCase());
+  }
+
+  // Override default method in URLConnection.
+  public String getHeaderField(int n)
+  {
+    try
+      {
+       getHeaders();
+      }
+    catch (IOException x)
+      {
+       return null;
+      }
+    if (n < hdrVec.size())
+      return getField((String) hdrVec.elementAt(n));
+
+    return null;
+  }
+
+  // Override default method in URLConnection.
+  public String getHeaderFieldKey(int n)
+  {
+    try
+      {
+       getHeaders();
+      }
+    catch (IOException x)
+      {
+       return null;
+      }
+    if (n < hdrVec.size())
+      return getKey((String) hdrVec.elementAt(n));
+
+    return null;
+  }
+
+  private String getKey(String str)
+  {
+    if (str == null)
+      return null;
+    int index = str.indexOf(':');
+    if (index >= 0)
+      return str.substring(0, index);
+    else
+      return null;
+  }
+
+  private String getField(String str)
+  {
+    if (str == null)
+      return null;
+    int index = str.indexOf(':');
+    if (index >= 0)
+      return str.substring(index + 1).trim();
+    else
+      return str;
+  }
+
+  private void getHeaders() throws IOException
+  {
+    if (gotHeaders)
+      return;
+    gotHeaders = true;
+
+    connect();
+
+    // Yes, it is overkill to use the hash table and vector here since
+    // we're only putting one header in the file, but in case we need
+    // to add others later and for consistency, we'll implement it this way.
+
+    // Add the only header we know about right now:  Content-length.
+    long len;
+
+    if (element == null)
+      len = jarFileURLConnection.getContentLength ();
+    else
+      len = getJarEntry (element).getSize ();
+
+    String line = "Content-length: " + len;
+    hdrVec.addElement(line);
+
+    // The key will never be null in this scenario since we build up the
+    // headers ourselves.  If we ever rely on getting a header from somewhere
+    // else, then we may have to check if the result of getKey() is null.
+    String key = getKey(line);
+    hdrHash.put(key.toLowerCase(), Long.toString(len));
+  }
+
+}
diff --git a/libjava/java/net/URLClassLoader.java b/libjava/java/net/URLClassLoader.java
new file mode 100644 (file)
index 0000000..df34306
--- /dev/null
@@ -0,0 +1,221 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.net;
+
+import java.io.*;
+import java.util.jar.*;
+import java.util.Vector;
+
+public class URLClassLoader extends ClassLoader 
+{
+  // The URLStreamHandlerFactory
+  URLStreamHandlerFactory factory = null;
+
+  // `path' contains simply the URL's we're using for the searching.
+  private Vector path; 
+
+  // If path[n] is a zip/jar, then this holds a JarURLConnection for that thing,
+  // otherwise, path[n] is null.
+  private Vector info; 
+
+  private URLStreamHandler getHandler0 (String protocol)
+  {
+    if (factory != null)
+      return factory.createURLStreamHandler(protocol);
+    else
+      return null;
+  }
+
+  public URLClassLoader (URL[] urls)
+  { 
+    this (urls, null, null);
+  }
+  
+  public URLClassLoader (URL[] urls, ClassLoader parent)
+  { 
+    this (urls, parent, null);
+  }
+
+  public URLClassLoader (URL[] urls, ClassLoader parent,
+                        URLStreamHandlerFactory fac)
+  { 
+    super (parent);
+
+    factory = fac;
+
+    if (urls == null || urls.length == 0)
+      {
+       path = new Vector (1);
+       info = new Vector (1);
+       return;
+      }
+
+    path = new Vector (urls.length);
+    info = new Vector (urls.length);
+
+    for (int i = 0; i < urls.length; i++)
+      {
+       URL u = urls[i];
+
+       // If it is a jar url, then we'll search it as is.  
+       if (! u.getProtocol ().equals ("jar"))
+         {
+           String f = u.getFile ();
+
+           // If it ends with '/' we'll take it for a directory,
+           // otherwise it's a jar file.  This is how JDK 1.2 defines
+           // it, so we will not try to be smart here.
+           if (f.charAt (f.length ()-1) != '/')
+             {
+               try
+                 {
+                   u = new URL ("jar", "", -1, (u.toExternalForm ())+"!/", 
+                                getHandler0 ("jar"));
+                 } 
+               catch (MalformedURLException x)
+                 {
+                   /* ignore */
+                 }
+             }
+         }
+
+       path.insertElementAt (u, i);
+
+       if (u.getProtocol ().equals ("jar"))
+         {
+           JarURLConnection conn = null;
+           try
+             {
+               conn = (JarURLConnection) u.openConnection ();
+             }
+           catch (java.io.IOException x)
+             {
+               /* ignore */
+             }
+           info.insertElementAt (conn, i);
+         }
+       else
+         {
+           info.insertElementAt (null, i);
+         }
+      }
+  }
+  
+  public URL getResource (String name)
+  {
+    for (int i = 0; i < path.size(); i++)
+      {
+       URL u    = (URL)path.elementAt (i);
+       
+       try {
+         JarURLConnection conn = (JarURLConnection) info.elementAt (i);
+         
+         if (conn != null)
+           {
+             if (conn.getJarEntry (name) != null)
+               return new URL(u, name, getHandler0 (u.getProtocol()));
+           }
+         else
+           {
+             URL p = new URL (u, name, getHandler0 (u.getProtocol()));
+
+             InputStream is = p.openStream();
+             if (is != null)
+               {
+                 is.close();
+                 return p;
+               }
+           }
+       
+         // if we get an exception ... try the next path element
+       } catch (IOException x) {
+         continue;
+       }
+      }
+
+    return null;
+  }
+
+  /** IN jdk 1.2 this method is not overridden, but we gain performance
+      by doing so.
+   */
+
+  public InputStream getResourceAsStream (String name)
+  {
+    for (int i = 0; i < path.size(); i++)
+      {
+       URL u    = (URL)path.elementAt (i);
+       
+       try {
+         JarURLConnection conn = (JarURLConnection) info.elementAt (i);
+         
+         if (conn != null)
+           {
+             JarFile file = conn.getJarFile ();
+             JarEntry ent = file.getJarEntry (name);
+             if (ent != null)
+               return file.getInputStream(ent);
+           }
+         else
+           {
+             InputStream is = new URL(u, name, getHandler0 (u.getProtocol())).openStream();
+             if (is != null)
+               return is;
+           }
+       
+         // if we get an exception ... try the next path element
+       } catch (IOException x) {
+         continue;
+       }
+      }
+
+    return null;
+  }
+
+  // and finally, we can implement our class loader functionality.
+  protected Class findClass (String name)
+    throws ClassNotFoundException
+  {
+    if (name == null)
+      throw new ClassNotFoundException ("null");
+
+    try 
+      {
+       InputStream is = getResourceAsStream (name.replace ('.', '/') + ".class");
+       
+       if (is == null)
+         throw new ClassNotFoundException (name);
+       
+       // Here we have to rely on available() to provide the length of
+       // the class; which might not be exactly right in some cases...
+       
+       int len = is.available ();
+       byte[] data = new byte[len];
+
+       int left = len;
+       int off  = 0;
+       while (left > 0)
+         {
+           int c = is.read (data, off, len-off);
+           if (c == -1 || c == 0)
+             throw new InternalError ("premature end of file");
+           left -= c;
+           off += c;
+         }
+
+       return defineClass (name, data, 0, len);
+      } 
+    catch (java.io.IOException x)
+      {
+       throw new ClassNotFoundException(name);
+      }
+  }
+
+}
+
diff --git a/libjava/java/security/SecureClassLoader.java b/libjava/java/security/SecureClassLoader.java
new file mode 100644 (file)
index 0000000..b195035
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (C) 1998, 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.security;
+
+public class SecureClassLoader extends ClassLoader 
+{
+    public SecureClassLoader ()
+    { 
+      this (null);
+    }
+
+    public SecureClassLoader (ClassLoader parent)
+    { 
+      super (parent);
+    }
+}
+
diff --git a/libjava/java/util/jar/JarEntry.java b/libjava/java/util/jar/JarEntry.java
new file mode 100644 (file)
index 0000000..0fe202b
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.util.jar;
+
+import java.util.zip.*;
+
+/**
+ * Does not implement the security and manifest methods.
+ *
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date August 10, 1999.
+ */
+
+public class JarEntry extends ZipEntry
+{
+  ZipEntry zip;
+
+  public JarEntry (ZipEntry ent)
+  {
+    super (ent);
+  }
+
+  public JarEntry (JarEntry ent)
+  {
+    super (ent);
+  }
+
+  public JarEntry (String name)
+  {
+    super (name);
+  }
+
+}
diff --git a/libjava/java/util/jar/JarFile.java b/libjava/java/util/jar/JarFile.java
new file mode 100644 (file)
index 0000000..efab3c2
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.util.jar;
+
+import java.util.zip.*;
+import java.io.File;
+
+/**
+ * Does not implement any of the security.  Just a place holder, so
+ * that I can implement URLClassLoader.
+ *
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date August 10, 1999.
+ */
+
+public class JarFile extends ZipFile
+{
+  private boolean verify;
+
+  public JarFile (String file) throws java.io.IOException
+  {
+    super (file);
+  }
+    
+  public JarFile (File file) throws java.io.IOException
+  {
+    super (file);
+  }
+
+  public JarFile (String file, boolean verify) throws java.io.IOException
+  {
+    super (file);
+    this.verify = verify;
+  }
+    
+  public JarFile (File file, boolean verify) throws java.io.IOException
+  {
+    super (file);
+    this.verify = verify;
+  }
+
+  public JarEntry getJarEntry (String name)
+  {
+    ZipEntry ent = getEntry(name);
+    if (ent == null)
+      return null;
+    else
+      return new JarEntry(ent);
+  }
+}
diff --git a/libjava/java/util/jar/JarInputStream.java b/libjava/java/util/jar/JarInputStream.java
new file mode 100644 (file)
index 0000000..476e75f
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.util.jar;
+
+import java.util.zip.*;
+
+/**
+ * Does not implement any of the security.  Just a place holder, so
+ * that I can implement URLClassLoader.
+ *
+ * @author Kresten Krab Thorup <krab@gnu.org>
+ * @date August 10, 1999.
+ */
+
+public class JarInputStream extends ZipInputStream
+{
+   public JarEntry getNextJarEntry () throws java.io.IOException
+    {
+       return new JarEntry (getNextEntry ());
+    }
+
+  public JarInputStream (java.io.InputStream is)
+  {
+    super(is);
+  }
+}
index 9bd3c41a9ab09b100cc07e06519ec6a655f4a4ee..915c4b2bf316d075a6e9a4d26b198f2c37e5143d 100644 (file)
@@ -46,6 +46,18 @@ public class ZipEntry implements ZipConstants
     this.name = name;
   }
 
+  public ZipEntry (ZipEntry ent)
+  {
+    comment = ent.comment;
+    compressedSize = ent.compressedSize;
+    crc = ent.crc;
+    extra = ent.extra;
+    method = ent.method;
+    size = ent.size;
+    time = ent.time;
+    relativeOffset = ent.relativeOffset;
+  }
+
   public String getComment () { return comment; }
 
   public long getCompressedSize () { return compressedSize; }
index bfb077d45859e9421f2192cd2357614a24c0ca11..1b0ebcee8baeeea3daff25c682c0b7b23b7ab42b 100644 (file)
@@ -22,12 +22,14 @@ public class ZipFile implements ZipConstants
   {
     file = new RandomAccessFile(fname, "r");
     name = fname;
+    readDirectory ();
   }
 
   public ZipFile (File f) throws IOException
   {
     file = new RandomAccessFile(f, "r");
     name = f.getName();
+    readDirectory ();
   }
 
   void readDirectory () throws IOException
index 90fd96de9f3f01e02506f843d9a6f84fd93b6c26..3b0863c2d773e7ce6626e9fb75dfca2d4598649b 100644 (file)
@@ -611,21 +611,38 @@ JvRunMain (jclass klass, int argc, const char **argv)
   LTDL_SET_PRELOADED_SYMBOLS ();
 #endif
 
-  if (klass == NULL)
-    {
-      arg_vec = JvConvertArgv (argc - 2, argv + 2);
-      main_group = new java::lang::ThreadGroup (23);
-      main_thread = new java::lang::FirstThread (main_group,
-                                                JvNewStringLatin1 (argv[1]),
-                                                arg_vec);
-    }
-  else
-    {
-      arg_vec = JvConvertArgv (argc - 1, argv + 1);
-      main_group = new java::lang::ThreadGroup (23);
-      main_thread = new java::lang::FirstThread (main_group, klass, arg_vec);
-    }
+  arg_vec = JvConvertArgv (argc - 1, argv + 1);
+  main_group = new java::lang::ThreadGroup (23);
+  main_thread = new java::lang::FirstThread (main_group, klass, arg_vec);
+
+  main_thread->start();
+  _Jv_ThreadWait ();
+
+  java::lang::Runtime::getRuntime ()->exit (0);
+}
+
+void
+_Jv_RunMain (const char *class_name, int argc, const char **argv)
+{
+  INIT_SEGV;
+#ifdef HANDLE_FPE
+  INIT_FPE;
+#else
+  arithexception = new java::lang::ArithmeticException
+    (JvNewStringLatin1 ("/ by zero"));
+#endif
+
+  no_memory = new java::lang::OutOfMemoryError;
+
+#ifdef USE_LTDL
+  LTDL_SET_PRELOADED_SYMBOLS ();
+#endif
 
+  arg_vec = JvConvertArgv (argc - 1, argv + 1);
+  main_group = new java::lang::ThreadGroup (23);
+  main_thread = new java::lang::FirstThread (main_group,
+                                            JvNewStringLatin1 (class_name),
+                                            arg_vec);
   main_thread->start();
   _Jv_ThreadWait ();
 
index d5ab739833a94b987a475b7669101792385b31b6..9b3167a36e906687af21b1c5d6a49244ec83a02a 100644 (file)
@@ -12,8 +12,6 @@ details.  */
 
 #include <java-interp.h>
 
-#ifdef INTERPRETER
-
 #include <cni.h>
 #include <jvm.h>
 #include <string.h>
@@ -30,6 +28,8 @@ details.  */
 #include <java/lang/ClassNotFoundException.h>
 #include <java/lang/IncompatibleClassChangeError.h>
 
+#ifdef INTERPRETER
+
 static void throw_internal_error (char *msg)
        __attribute__ ((__noreturn__));
 static void throw_class_format_error (jstring msg)
@@ -124,6 +124,7 @@ _Jv_ResolvePoolEntry (jclass klass, int index)
     }
     break;
 
+
   case JV_CONSTANT_Fieldref:
     {
       _Jv_ushort class_index, name_and_type_index;
@@ -316,6 +317,7 @@ _Jv_ResolvePoolEntry (jclass klass, int index)
   return pool->data[index];
 }
 
+
 void
 _Jv_ResolveField (_Jv_Field *field, java::lang::ClassLoader *loader)
 {
index ac2e92d1b0d9960232141407b1219ecf5def74f2..34c91863705bf627ad589474ac3d576c3ce8bb77 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
 
 # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
@@ -10,7 +10,6 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
 SHELL = @SHELL@
 
 srcdir = @srcdir@
@@ -46,9 +45,10 @@ AUTOMAKE = @AUTOMAKE@
 AUTOHEADER = @AUTOHEADER@
 
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
 transform = @program_transform_name@
 
 NORMAL_INSTALL = :
@@ -108,6 +108,7 @@ ZLIBSPEC = @ZLIBSPEC@
 here = @here@
 libgcj_basedir = @libgcj_basedir@
 
+
 AUTOMAKE_OPTIONS = foreign dejagnu no-installinfo
 
 # Setup the testing framework, if you have one
@@ -122,15 +123,16 @@ RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
 
 
 RUNTESTFLAGS = @AM_RUNTESTFLAGS@
+subdir = testsuite
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
 CONFIG_HEADER = ../include/config.h
 CONFIG_CLEAN_FILES = 
+DIST_SOURCES = 
 DIST_COMMON =  ChangeLog Makefile.am Makefile.in
 
 
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = tar
 GZIP_ENV = --best
 all: all-redirect
 .SUFFIXES:
@@ -147,8 +149,6 @@ TAGS:
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 
-subdir = testsuite
-
 distdir: $(DISTFILES)
        here=`cd $(top_builddir) && pwd`; \
        top_distdir=`cd $(top_distdir) && pwd`; \
@@ -158,7 +158,7 @@ distdir: $(DISTFILES)
        @for file in $(DISTFILES); do \
          d=$(srcdir); \
          if test -d $$d/$$file; then \
-           cp -pr $$/$$file $(distdir)/$$file; \
+           cp -pr $$d/$$file $(distdir)/$$file; \
          else \
            test -f $(distdir)/$$file \
            || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
@@ -222,7 +222,7 @@ uninstall: uninstall-am
 all-am: Makefile
 all-redirect: all-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
 installdirs:
 
 
@@ -257,8 +257,8 @@ maintainer-clean: maintainer-clean-am
 .PHONY: tags distdir check-DEJAGNU info-am info dvi-am dvi check \
 check-am installcheck-am installcheck install-info-am install-info \
 install-exec-am install-exec install-data-am install-data install-am \
-install uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
+install uninstall-am uninstall all-redirect all-am all install-strip \
+installdirs mostlyclean-generic distclean-generic clean-generic \
 maintainer-clean-generic clean mostlyclean distclean maintainer-clean