258 lines
9.1 KiB
Text
258 lines
9.1 KiB
Text
HOW TO ADD BZIP2 SUPPORT TO ZIP
|
|
|
|
This document describes how to add bzip2 support to Zip.
|
|
|
|
Compiling or linking in the bzip2 library adds an additional bzip2
|
|
compression method to Zip. This new method can be selected instead
|
|
of the Zip traditional compression method deflation to compress files
|
|
and often gives a better compression ratio (perhaps at the cost of
|
|
greater CPU time). The compression method is specified using the
|
|
"-Z method" command-line option, where "method" may be either "deflate"
|
|
(the default), or "bzip2" (if Zip is built with bzip2 support). Zip
|
|
has been tested with bzip2 library 1.0.5 and earlier.
|
|
|
|
Notes
|
|
|
|
Compression method bzip2 requires a modern unzip. Before using bzip2
|
|
compression in Zip, verify that a modern UnZip program with bzip2 support
|
|
will be used to read the resulting zip archive so that entries compressed
|
|
with bzip2 (compression method 12) can be read. Older unzips probably
|
|
won't recognize the compression method and will skip those entries.
|
|
|
|
The Zip source kit does not include the bzip2 library or source files, but
|
|
these can be found at "http://www.bzip.org/" for example. See below for
|
|
how to add bzip2 to Zip for various operating systems.
|
|
|
|
Zip using bzip2 compression is not compatible with the bzip2 application,
|
|
but instead provides an additional way to compress files before adding
|
|
them to a Zip archive. It does not replace the bzip2 program itself,
|
|
which creates bzip2 archives in a different format that are not
|
|
compatible with zip or unzip.
|
|
|
|
The bzip2 code and algorithms are provided under the bzip2 license
|
|
(provided in the bzip2 source kit) and what is not covered by that license
|
|
is covered under the Info-ZIP license. Info-ZIP will look at issues
|
|
involving the use of bzip2 compression in Zip, but any questions about
|
|
the bzip2 code and algorithms or bzip2 licensing, for example, should be
|
|
directed to the bzip2 maintainer.
|
|
|
|
|
|
Installation
|
|
|
|
To build Zip with bzip2 support, Zip generally needs one bzip2 header
|
|
file, "bzlib.h", and the object library, typically "libbz2.a", except
|
|
in cases where the source files are compiled in directly. If you
|
|
are either compiling the bzip2 library or compiling in the bzip2
|
|
source files, we recommend defining the C macro BZ_NO_STDIO, which
|
|
excludes a lot of standalone error code (not used when bzip2 is
|
|
used as a library and makes the library smaller) and provides hooks
|
|
that Zip can use to provide better error handling. However, a
|
|
standard bzip2 object library will work, though any errors that bzip2
|
|
generates may be more cryptic.
|
|
|
|
Building the bzip2 library from the bzip2 source files (recommended):
|
|
|
|
Download the latest bzip2 package (from "http://www.bzip.org/", for
|
|
example).
|
|
|
|
Unpack the bzip2 source kit (bzip2-1.0.5.tar.gz was current as of
|
|
this writing, but the latest should work).
|
|
|
|
Read the README file in the bzip2 source kit.
|
|
|
|
Compile the bzip2 library for your OS, preferably defining
|
|
BZ_NO_STDIO. Note: On UNIX systems, this may be done automatically
|
|
when building Zip, as explained below.
|
|
|
|
|
|
Installation on UNIX (see below for installation on other systems):
|
|
|
|
Note: Zip on UNIX uses the "bzlib.h" include file and the compiled
|
|
"libbz2.a" library to static link to bzip2. Currently we do not
|
|
support using the shared library (patches welcome).
|
|
|
|
The easiest approach may be to drop the two above files in the
|
|
bzip2 directory of the Zip source tree and build Zip using the
|
|
"generic" target, that is, using a command like
|
|
make -f unix/Makefile generic
|
|
If all goes well, make should confirm that it found the files and
|
|
will be compiling in bzip2 by setting the BZIP2_SUPPORT flag and
|
|
then including the libraries while compiling and linking Zip.
|
|
|
|
To use bzlib.h and libbz2.a from somewhere else on your system,
|
|
define the "make" macro IZ_BZIP2 to point to that directory. For
|
|
example:
|
|
make -f unix/Makefile generic IZ_BZIP2=/mybz2
|
|
where /mybz2 might be "/usr/local/src/bzip2/bzip2-1.0.5" on some
|
|
systems. Only a compiled bzip2 library can be pointed to using
|
|
IZ_BZIP2 and Zip will not compile bzip2 source in other than the
|
|
bzip2 directory.
|
|
|
|
If IZ_BZIP2 is not defined, Zip will look for the bzip2 files in
|
|
the "bzip2" directory in the Zip source directory. The bzip2
|
|
directory is empty in the Zip source distribution (except for
|
|
this install.txt file) and is provided as a place to put the
|
|
bzip2 files. To use this directory, either drop bzlib.h and
|
|
libbz2.a in it to use the compiled library as noted above or drop
|
|
the contents of the bzip2 source kit in this directory so that
|
|
bzlib.h is directly in the bzip2 directory and Zip will try to
|
|
compile it if no compiled library is already there.
|
|
|
|
|
|
Unpacking bzip2 so Zip compiles it:
|
|
|
|
To make this work, the bzip2 source kit must be unpacked directly
|
|
into the Zip "bzip2" directory. For example:
|
|
|
|
# Unpack the Zip source kit.
|
|
gzip -cd zip30.tar-gz | tar xfo -
|
|
# Move down to the Zip kit's "bzip2" directory, ...
|
|
cd zip30/bzip2
|
|
# ... and unpack the bzip2 source kit there.
|
|
gzip -cd ../../bzip2-1.0.5.tar.gz | tar xfo -
|
|
# Move the bzip2 source files up to the Zip kit's bzip2 directory.
|
|
cd bzip2-1.0.5
|
|
mv * ..
|
|
# Return to the Zip source kit directory, ready to build.
|
|
cd ../..
|
|
# Build Zip.
|
|
make -f unix/Makefile generic
|
|
|
|
|
|
Using a system bzip2 library:
|
|
|
|
If IZ_BZIP2 is not defined and both a compiled library and the bzip2
|
|
source files are missing from the Zip bzip2 directory, Zip will test
|
|
to see if bzip2 is globally defined on the system in the default
|
|
include and library paths and, if found, link in the system bzip2
|
|
library. This is automatic.
|
|
|
|
|
|
Preventing inclusion of bzip2:
|
|
|
|
To build Zip with _no_ bzip2 support on a system where the automatic
|
|
bzip2 detection scheme will find bzip2, you can specify a bad
|
|
IZ_BZIP2 directory. For example:
|
|
|
|
make -f unix/Makefile generic IZ_BZIP2=no_such_directory
|
|
|
|
You can also define NO_BZIP2_SUPPORT to exclude bzip2.
|
|
|
|
|
|
Verifying bzip2 support in Zip:
|
|
|
|
When the Zip build is complete, verify that bzip2 support has been
|
|
enabled by checking the feature list:
|
|
|
|
./zip -v
|
|
|
|
If all went well, bzip2 (and its library version) should be listed.
|
|
|
|
|
|
Installation on other systems
|
|
|
|
MSDOS:
|
|
|
|
Thanks to Robert Riebisch, the DJGPP 2.x Zip port now supports bzip2.
|
|
To include bzip2, first install bzip2. The new msdos/makebz2.dj2
|
|
makefile then looks in the standard bzip2 installation directories
|
|
for the needed files. As he says:
|
|
It doesn't try to be clever about finding libbz2.a. It just
|
|
expects bzip2 stuff installed to the default include and library
|
|
folders, e.g., "C:\DJGPP\include" and "C:\DJGPP\lib" on DOS.
|
|
|
|
Given a standard DJGPP 2.x installation, this should create a
|
|
version of Zip 3.0 with bzip2 support.
|
|
|
|
The bzip2 library for DJGPP can be found on any DJGPP mirror in
|
|
"current/v2apps" (or "beta/v2apps/" for the latest beta). This
|
|
library has been ported to MSDOS/DJGPP by Juan Manuel Guerrero.
|
|
|
|
|
|
WIN32 (Windows NT/2K/XP/2K3/... and Windows 95/98/ME):
|
|
|
|
For Windows there seems to be two approaches, either use bzip2
|
|
as a dynamic link library or compile the bzip2 source in directly.
|
|
I have not gotten the static library libbz2.lib to work, but that
|
|
may be me.
|
|
|
|
Using bzip2 as a dynamic link library:
|
|
|
|
Building bzip2:
|
|
|
|
If you have the needed bzlib.h, libbz2.lib, and libbz2.dll files
|
|
you can skip building bzip2. If not, open the libbz2.dsp project
|
|
and build libbz2.dll
|
|
|
|
This creates
|
|
debug/libbz2.lib
|
|
and
|
|
libbz2.dll
|
|
|
|
|
|
Building Zip:
|
|
|
|
Copy libbz2.lib to the bzip2 directory in the Zip source tree. This
|
|
is needed to compile Zip with bzip2 support. Also copy the matching
|
|
bzlib.h from the bzip2 source to the same directory.
|
|
|
|
Add libbz2.lib to the link list for whatever you are building. Also
|
|
define the compiler define BZIP2_SUPPORT.
|
|
|
|
Build Zip.
|
|
|
|
|
|
Using Zip with bzip2 as dll:
|
|
|
|
Put libbz2.dll in your command path. This is needed to run Zip with
|
|
bzip2 support.
|
|
|
|
Verify that bzip2 is enabled with the command
|
|
|
|
zip -v
|
|
|
|
You should see bzip2 listed.
|
|
|
|
Compiling in bzip2 from the bzip2 source:
|
|
|
|
This approach compiles in the bzip2 code directly. No external
|
|
library is needed.
|
|
|
|
Get a copy of the bzip2 source and copy the contents to the bzip2
|
|
directory in the Zip source tree so that bzlib.h is directly in
|
|
the bzip2 directory.
|
|
|
|
Use the vc6bz2 project to build Zip. This project knows of the
|
|
added bzip2 files.
|
|
|
|
Verify that bzip2 is enabled with the command
|
|
|
|
zip -v
|
|
|
|
|
|
Windows DLL (WIN32):
|
|
|
|
Nothing yet.
|
|
|
|
|
|
Mac OS X:
|
|
|
|
Follow the standard UNIX build procedure. Mac OS X includes bzip2
|
|
and the UNIX builders should find the bzip2 files in the standard
|
|
places. Note that the version of bzip2 on your OS may not be
|
|
current and you can instead specify a different library or compile
|
|
your own bzip2 library as noted in the Unix procedures above.
|
|
|
|
|
|
OS/2:
|
|
|
|
Nothing yet.
|
|
|
|
|
|
VMS (OpenVMS):
|
|
|
|
See [.vms]install_vms.txt for how to enable bzip2 support on VMS.
|
|
|
|
|
|
Last updated 26 March 2007, 15 July 2007, 9 April 2008, 27 June 2008
|
|
S. Schweda, E. Gordon
|