370 lines
15 KiB
Plaintext
370 lines
15 KiB
Plaintext
|
|
XZ Utils Installation
|
|
=====================
|
|
|
|
0. Preface
|
|
1. Supported platforms
|
|
1.1. Compilers
|
|
1.2. Platform-specific notes
|
|
1.2.1. IRIX
|
|
1.2.2. Tru64
|
|
1.2.3. Windows
|
|
1.2.4. DOS
|
|
1.2.5. OS/2
|
|
1.2.6. OpenVMS
|
|
1.3. Adding support for new platforms
|
|
2. configure options
|
|
3. xzgrep and other scripts
|
|
3.1. Dependencies
|
|
3.2. PATH
|
|
4. Troubleshooting
|
|
4.1. "No C99 compiler was found."
|
|
4.1. "No POSIX conforming shell (sh) was found."
|
|
4.2. configure works but build fails at crc32_x86.S
|
|
|
|
|
|
0. Preface
|
|
----------
|
|
|
|
If you aren't familiar with building packages that use GNU Autotools,
|
|
see the file INSTALL.generic for generic instructions before reading
|
|
further.
|
|
|
|
If you are going to build a package for distribution, see also the
|
|
file PACKAGERS. It contains information that should help making the
|
|
binary packages as good as possible, but the information isn't very
|
|
interesting to those making local builds for private use or for use
|
|
in special situations like embedded systems.
|
|
|
|
|
|
1. Supported platforms
|
|
----------------------
|
|
|
|
XZ Utils are developed on GNU/Linux, but they should work on many
|
|
POSIX-like operating systems like *BSDs and Solaris, and even on
|
|
a few non-POSIX operating systems.
|
|
|
|
|
|
1.1. Compilers
|
|
|
|
A C99 compiler is required to compile XZ Utils. If you use GCC, you
|
|
need at least version 3.x.x. GCC version 2.xx.x doesn't support some
|
|
C99 features used in XZ Utils source code, thus GCC 2 won't compile
|
|
XZ Utils.
|
|
|
|
XZ Utils takes advantage of some GNU C extensions when building
|
|
with GCC. Because these extensions are used only when building
|
|
with GCC, it should be possible to use any C99 compiler.
|
|
|
|
|
|
1.2. Platform-specific notes
|
|
|
|
1.2.1. IRIX
|
|
|
|
MIPSpro 7.4.4m has been reported to produce broken code if using
|
|
the -O2 optimization flag ("make check" fails). Using -O1 should
|
|
work.
|
|
|
|
|
|
1.2.2. Tru64
|
|
|
|
If you try to use the native C compiler on Tru64 (passing CC=cc to
|
|
configure), it is possible that the configure script will complain
|
|
that no C99 compiler was found even when the native compiler supports
|
|
C99. You can safely override the test for C99 compiler by passing
|
|
ac_cv_prog_cc_c99= as the argument to the configure script.
|
|
|
|
|
|
1.2.3. Windows
|
|
|
|
Building XZ Utils on Windows is supported under MinGW + MSYS and
|
|
Cygwin. There is windows/build.sh to ease packaging XZ Utils with
|
|
MinGW + MSYS into a redistributable .zip or .7z file. See
|
|
windows/INSTALL-Windows.txt for more information.
|
|
|
|
It might be possible to build liblzma with a non-GNU toolchain too,
|
|
but that will probably require writing a separate makefile. Building
|
|
the command line tools with non-GNU toolchains will be harder than
|
|
building only liblzma.
|
|
|
|
Even if liblzma is built with MinGW, the resulting DLL or static
|
|
library can be used by other compilers and linkers, including MSVC.
|
|
Thus, it shouldn't be a problem to use MinGW to build liblzma even
|
|
if you cannot use MinGW to build the rest of your project. See
|
|
windows/README-Windows.txt for details.
|
|
|
|
|
|
1.2.4. DOS
|
|
|
|
There is an experimental Makefile in the "dos" directory to build
|
|
XZ Utils on DOS using DJGPP. Support for long file names (LFN) is
|
|
needed. See dos/README for more information.
|
|
|
|
GNU Autotools based build hasn't been tried on DOS. If you try, I
|
|
would like to hear if it worked.
|
|
|
|
|
|
1.2.5. OS/2
|
|
|
|
To omit large number of harmless warnings about visibility support,
|
|
pass gl_cv_cc_visibility=no as an argument to the configure script.
|
|
This isn't mandatory since it should have no effect on the resulting
|
|
binaries.
|
|
|
|
|
|
1.2.6. OpenVMS
|
|
|
|
XZ Utils can be built for OpenVMS, but the build system files are
|
|
currently not included in the XZ Utils source package. The required
|
|
OpenVMS-specific files are maintained by Jouk Jansen and can be
|
|
downloaded here:
|
|
|
|
http://nchrem.tnw.tudelft.nl/openvms/software2.html#xzutils
|
|
|
|
|
|
1.3. Adding support for new platforms
|
|
|
|
If you have written patches to make XZ 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++.
|
|
|
|
|
|
2. configure options
|
|
--------------------
|
|
|
|
In most cases, the defaults are what you want. Most of the options
|
|
below are useful only when building a size-optimized version of
|
|
liblzma or command line tools.
|
|
|
|
--enable-encoders=LIST
|
|
--disable-encoders
|
|
Specify a comma-separated LIST of filter encoders to
|
|
build. See "./configure --help" for exact list of
|
|
available filter encoders. The default is to build all
|
|
supported encoders.
|
|
|
|
If LIST is empty or --disable-encoders is used, no filter
|
|
encoders will be built and also the code shared between
|
|
encoders will be omitted.
|
|
|
|
Disabling encoders will remove some symbols from the
|
|
liblzma ABI, so this option should be used only when it
|
|
is known to not cause problems.
|
|
|
|
--enable-decoders=LIST
|
|
--disable-decoders
|
|
This is like --enable-encoders but for decoders. The
|
|
default is to build all supported decoders.
|
|
|
|
--enable-match-finders=LIST
|
|
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
|
|
LZMA1 or LZMA2 filter encoders. 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 if LZMA1
|
|
or LZMA2 filter encoders are being built.
|
|
|
|
--enable-checks=LIST
|
|
liblzma support multiple integrity checks. CRC32 is
|
|
mandatory, and cannot be omitted. See "./configure --help"
|
|
for exact list of available integrity check types.
|
|
|
|
liblzma and the command line tools can decompress files
|
|
which use unsupported integrity check type, but naturally
|
|
the file integrity cannot be verified in that case.
|
|
|
|
Disabling integrity checks may remove some symbols from
|
|
the liblzma ABI, so this option should be used only when
|
|
it is known to not cause problems.
|
|
|
|
--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-unaligned-access
|
|
Allow liblzma to use unaligned memory access for 16-bit
|
|
and 32-bit loads and stores. This should be enabled only
|
|
when the hardware supports this, i.e. when unaligned
|
|
access is fast. Some operating system kernels emulate
|
|
unaligned access, which is extremely slow. This option
|
|
shouldn't be used on systems that rely on such emulation.
|
|
|
|
Unaligned access is enabled by default on x86, x86-64,
|
|
and big endian PowerPC.
|
|
|
|
--enable-small
|
|
Reduce the size of liblzma by selecting smaller but
|
|
semantically equivalent version of some functions, and
|
|
omit precomputed lookup tables. This option tends to
|
|
make liblzma slightly slower.
|
|
|
|
Note that while omitting the precomputed tables makes
|
|
liblzma smaller on disk, the tables are still needed at
|
|
run time, and need to be computed at startup. This also
|
|
means that the RAM holding the tables won't be shared
|
|
between applications linked against shared liblzma.
|
|
|
|
This option doesn't modify CFLAGS to tell the compiler
|
|
to optimize for size. You need to add -Os or equivalent
|
|
flag(s) to CFLAGS manually.
|
|
|
|
--enable-assume-ram=SIZE
|
|
On the most common operating systems, XZ Utils is able to
|
|
detect the amount of physical memory on the system. This
|
|
information is used to set the default memory usage limit.
|
|
|
|
On some systems, there is no code to detect the amount of
|
|
RAM though. Using --enable-assume-ram one can set how much
|
|
memory to assume on these systems. SIZE is given as MiB.
|
|
The default is 128 MiB, which allows decompressing files
|
|
created with "xz -9".
|
|
|
|
Feel free to send patches to add support for detecting
|
|
the amount of RAM on the operating system you use. See
|
|
src/common/tuklib_physmem.c for details.
|
|
|
|
--disable-threads
|
|
Disable threading support. This makes some things
|
|
thread-unsafe, meaning that if multithreaded application
|
|
calls liblzma functions from more than one thread,
|
|
something bad may happen.
|
|
|
|
Use this option if threading support causes you trouble,
|
|
or if you know that you will use liblzma only from
|
|
single-threaded applications and want to avoid dependency
|
|
on libpthread.
|
|
|
|
--enable-dynamic=TYPE
|
|
Specify how command line tools should be linked against
|
|
liblzma. Possible TYPES:
|
|
|
|
yes All command line tools are linked against
|
|
shared liblzma (if shared liblzma was built).
|
|
This is equivalent to --enable-dynamic (i.e.
|
|
no =TYPE).
|
|
|
|
mixed Some tools are linked against static liblzma
|
|
and some against shared liblzma. This is the
|
|
default and recommended way.
|
|
|
|
no All command line tools are linked against
|
|
static liblzma (if static liblzma was built).
|
|
This is equivalent to --disable-dynamic.
|
|
|
|
This option is mostly useful for packagers, if distro
|
|
policy requires linking against shared libaries. See the
|
|
file PACKAGERS for more information about pros and cons
|
|
of this option.
|
|
|
|
--enable-debug
|
|
This enables the assert() macro and possibly some other
|
|
run-time consistency checks. It makes the code slower, so
|
|
you normally don't want to have this enabled.
|
|
|
|
--enable-werror
|
|
If building with GCC, make 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.
|
|
|
|
|
|
3. xzgrep and other scripts
|
|
---------------------------
|
|
|
|
3.1. Dependencies
|
|
|
|
POSIX shell (sh) and bunch of other standard POSIX tools are required
|
|
to run the scripts. The configure script tries to find a POSIX
|
|
compliant sh, but if it fails, you can force the shell by passing
|
|
gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure
|
|
script.
|
|
|
|
Some of the scripts require also mktemp. The original mktemp can be
|
|
found from <http://www.mktemp.org/>. On GNU, most will use the mktemp
|
|
program from GNU coreutils instead of the original implementation.
|
|
Both mktemp versions are fine for XZ Utils (and practically for
|
|
everything else too).
|
|
|
|
|
|
3.2. PATH
|
|
|
|
The scripts assume that the required tools (standard POSIX utilities,
|
|
mktemp, and xz) are in PATH; the scripts don't set the PATH themselves.
|
|
Some people like this while some think this is a bug. Those in the
|
|
latter group can easily patch the scripts before running the configure
|
|
script by taking advantage of a placeholder line in the scripts.
|
|
|
|
For example, to make the scripts prefix /usr/bin:/bin to PATH:
|
|
|
|
perl -pi -e 's|^#SET_PATH.*$|PATH=/usr/bin:/bin:\$PATH|' \
|
|
src/scripts/xz*.in
|
|
|
|
|
|
4. Troubleshooting
|
|
------------------
|
|
|
|
4.1. "No C99 compiler was found."
|
|
|
|
You need a C99 compiler to build XZ Utils. If the configure script
|
|
cannot find a C99 compiler and you think you have such a compiler
|
|
installed, set the compiler command by passing CC=/path/to/c99 as
|
|
an argument to the configure script.
|
|
|
|
If you get this error even when you think your compiler supports C99,
|
|
you can override the test by passing ac_cv_prog_cc_c99= as an argument
|
|
to the configure script. The test for C99 compiler is not perfect (and
|
|
it is not as easy to make it perfect as it sounds), so sometimes this
|
|
may be needed. You will get a compile error if your compiler doesn't
|
|
support enough C99.
|
|
|
|
|
|
4.1. "No POSIX conforming shell (sh) was found."
|
|
|
|
xzgrep and other scripts need a shell that (roughly) conforms
|
|
to POSIX. The configure script tries to find such a shell. If
|
|
it fails, you can force the shell to be used by passing
|
|
gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure
|
|
script.
|
|
|
|
|
|
4.2. configure works but build fails at crc32_x86.S
|
|
|
|
The easy fix is to pass --disable-assembler to the configure script.
|
|
|
|
The configure script determines if assembler code can be used by
|
|
looking at the configure triplet; there is currently no check if
|
|
the assembler code can actually actually be built. The x86 assembler
|
|
code should work on x86 GNU/Linux, *BSDs, Solaris, Darwin, MinGW,
|
|
Cygwin, and DJGPP. On other x86 systems, there may be problems and
|
|
the assembler code may need to be disabled with the configure option.
|
|
|
|
If you get this error when building for x86-64, you have specified or
|
|
the configure script has misguessed your architecture. Pass the
|
|
correct configure triplet using the --build=CPU-COMPANY-SYSTEM option
|
|
(see INSTALL.generic).
|
|
|