This directory contains the FastJar package, which is not part of GCC but
shipped with GCC as convenience.

=======
FastJar 0.90

12/6/1999
=======

FastJar is an attempt at creating a feature-for-feature copy of Sun's JDK's
'jar' command.  Sun's jar (or Blackdown's for that matter) is written entirely
in Java which makes it dog slow.  Since FastJar is written in C, it can create
the same .jar file as Sun's tool in a fraction of the time.  On my system,
Sun's jar takes 50 seconds to create a 10MB jar file, while FastJar only takes
a little over a second.  

The reason I wrote fastjar is that building .jar files is a regular process
of the build where I work.  The way we have it setup, you have to re-create
the .jar file everytime you want to test it out, which is about every 5 minutes
when I'm busy coding.  The .jar file wasn't -that- big, but it did take about
30 seconds to be made, and watching all the garbage collection messages was
pretty irritating as well.  I probably wasted a half-hour a day watching
Sun's jar tool chug along.  By writing the program in C, I spend much less time
banging my head against the monitor waiting for the build to finish.  Yay!

FastJar has been tested on Solaris and Linux 2.2.x systems and nothing else. 
It should compile/run without any problems on either system, provided you have
zlib installed.  

Please mail any bug reports to burnsbr@ucs.orst.edu.

If you use FastJar and want me to add the rest of the features, send me mail
(toast@users.sourceforge.net).  I'll be much more likely to put more work into this
if I know other people find it useful other than me.

As always, this not being a final release, bugs may exist.  I test each
release pretty well, but I can always miss things...

Compression will slow things down quite a bit.  A 10MB jar file takes about
1 second on my machine without compression, and 9 seconds with it.  If you
want fastjar to be fast, use the -0 (zero, not O) flag to turn off compression.

Supported flags:
--------------------------
-c  | create a new archive
-v  | verbose output
-f  | specify archive file name
-m  | specify existing manifest file
-M  | don't create manifest
-0  | store only
-C  | change to dir
-t  | list contents
-x  | extract contents

Unsupported flags:
----------------------------
-u  | update exisiting archive

If you use the "unsupported" flags, nothing bad will happen, but then again
nothing will happen at all.  


Unsupported features (in this release):
---------------------------------------------
  * updating
  * full manifest support (?)

Order or features for the future:
--------------------------------------------
  * archive updating
  * full manifest support
  * filtering
  * dependency checking


===========================================================================
http://fastjar.sourceforge.net
toast@users.sourceforge.net
