123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- 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
|