| |
| LZMA Utils |
| ---------- |
| |
| Warning |
| |
| This is an early alpha version. Don't trust the files produced by |
| this version of the software - not even if the software can |
| uncompress the files properly! This is because the file format |
| isn't completely frozen yet. |
| |
| So please test a lot, but don't use for anything serious yet. |
| |
| |
| Overview |
| |
| LZMA is a general purporse compression algorithm designed by |
| Igor Pavlov as part of 7-Zip. It provides high compression ratio |
| while keeping the decompression speed fast. |
| |
| LZMA Utils are an attempt to make LZMA compression easy to use |
| on free (as in freedom) operating systems. This is achieved by |
| providing tools and libraries which are similar to use than the |
| equivalents of the most popular existing compression algorithms. |
| |
| LZMA Utils consist of a few relatively separate parts: |
| * liblzma is an encoder/decoder library with support for several |
| filters (algorithm implementations). The primary filter is LZMA. |
| * libzfile enables reading from and writing to gzip, bzip2 and |
| LZMA compressed and uncompressed files with an API similar to |
| the standard ANSI-C file I/O. |
| [ NOTE: libzfile is not implemented yet. ] |
| * lzma command line tool has almost identical syntax than gzip |
| and bzip2. It makes LZMA easy for average users, but also |
| provides advanced options to finetune the compression settings. |
| * A few shell scripts make diffing and grepping LZMA compressed |
| files easy. The scripts were adapted from gzip and bzip2. |
| |
| |
| Supported platforms |
| |
| LZMA Utils are developed on GNU+Linux, but they should work at |
| least on *BSDs and Solaris. They probably work on some other |
| POSIX-like operating systems too. |
| |
| If you use GCC to compile LZMA Utils, you need at least version |
| 3.x.x. GCC version 2.xx.x doesn't support some C99 features used |
| in LZMA Utils source code, thus GCC 2 won't compile LZMA Utils. |
| |
| If you have written patches to make LZMA Utils to work on previously |
| unsupported platform, please send the patches to me! I will consider |
| including them to the official version. It's nice to minimize the |
| need of third-party patching. |
| |
| One exception: Don't request or send patches to change the whole |
| source package to C89. I find C99 substantially nicer to write and |
| maintain. However, the public library headers must be in C89 to |
| avoid frustrating those who maintain programs, which are strictly |
| in C89 or C++. |
| |
| |
| Version numbering |
| |
| Starting from LZMA Utils 5, the version number of LZMA Utils has |
| absolutely nothing to do with the version number of LZMA SDK or |
| 7-Zip. The new version number format of LZMA Utils is X.Y.ZS: |
| |
| - X is the major version. When this is incremented, the library |
| API and ABI break. |
| |
| - Y is the minor version. It is incremented when new features are |
| added without breaking existing API or ABI. Even Y indicates |
| stable release and odd Y indicates unstable (alpha or beta |
| version). |
| |
| - Z is the revision. This has different meaning for stable and |
| unstable releases: |
| * Stable: Z is incremented when bugs get fixed without adding |
| any new features. |
| * Unstable: Z is just a counter. API or ABI of features added |
| in earlier unstable releases having the same X.Y may break. |
| |
| - S indicates stability of the release. It is missing from the |
| stable releases where Y is an even number. When Y is odd, S |
| is either "alpha" or "beta" to make it very clear that such |
| versions are not stable releases. The same X.Y.Z combination is |
| not used for more than one stability level i.e. after X.Y.Zalpha, |
| the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta. |
| |
| |
| configure options |
| |
| If you are not familiar with `configure' scripts, read the file |
| INSTALL first. |
| |
| In most cases, the default --enable/--disable/--with/--without options |
| are what you want. Don't touch them if you are unsure. |
| |
| --disable-encoder |
| Do not compile the encoder component of liblzma. This |
| implies --disable-match-finders. If you need only |
| the decoder, you can decrease the library size |
| dramatically with this option. |
| |
| The default is to build the encoder. |
| |
| --disable-decoder |
| Do not compile the decoder component of liblzma. |
| |
| The default is to build the decoder. |
| |
| --enable-filters= |
| liblzma supports several filters. See liblzma-intro.txt |
| for a little more information about these. |
| |
| The default is to build all the filters. |
| |
| --enable-match-finders= |
| liblzma includes two categories of match finders: |
| hash chains and binary trees. Hash chains (hc3 and hc4) |
| are quite fast but they don't provide the best compression |
| ratio. Binary trees (bt2, bt3 and bt4) give excellent |
| compression ratio, but they are slower and need more |
| memory than hash chains. |
| |
| You need to enable at least one match finder to build the |
| LZMA filter encoder. Usually hash chains are used only in |
| the fast mode, while binary trees are used to when the best |
| compression ratio is wanted. |
| |
| The default is to build all the match finders. |
| |
| --enable-checks= |
| liblzma support multiple integrity checks. CRC32 is |
| mandatory, and cannot be omitted. See liblzma-intro.txt |
| for more information about usage of the integrity checks. |
| |
| --disable-assembler |
| liblzma includes some assembler optimizations. Currently |
| there is only assembler code for CRC32 and CRC64 for |
| 32-bit x86. |
| |
| All the assembler code in liblzma is position-independent |
| code, which is suitable for use in shared libraries and |
| position-independent executables. So far only i386 |
| instructions are used, but the code is optimized for i686 |
| class CPUs. If you are compiling liblzma exclusively for |
| pre-i686 systems, you may want to disable the assembler |
| code. |
| |
| --enable-small |
| Omits precomputed tables. This makes liblzma a few KiB |
| smaller. Startup time increases, because the tables need |
| to be computed first. |
| |
| --enable-debug |
| This enables the assert() macro and possibly some other |
| run-time consistency checks. It slows down things somewhat, |
| so you normally don't want to have this enabled. |
| |
| --enable-werror |
| Makes all compiler warnings an error, that abort the |
| compilation. This may help catching bugs, and should work |
| on most systems. This has no effect on the resulting |
| binaries. |
| |
| |
| Static vs. dynamic linking of the command line tools |
| |
| By default, the command line tools are linked statically against |
| liblzma. There a are a few reasons: |
| |
| - The executable(s) can be in /bin while the shared liblzma can still |
| be in /usr/lib (if the distro uses such file system hierachy). |
| |
| - It's easier to copy the executables to other systems, since they |
| depend only on libc. |
| |
| - It's slightly faster on some architectures like x86. |
| |
| If you don't like this, you can get the command line tools linked |
| against the shared liblzma by specifying --disable-static to configure. |
| This disables building static liblzma completely. |
| |