Home | History | Annotate | Line # | Download | only in dist
      1 
      2 Information to packagers of XZ Utils
      3 ====================================
      4 
      5     0. Preface
      6     1. Package naming
      7     2. Package description
      8     3. License
      9     4. configure options
     10     5. Additional documentation
     11     6. Extra files
     12     7. Installing XZ Utils and LZMA Utils in parallel
     13     8. Example
     14 
     15 
     16 0. Preface
     17 ----------
     18 
     19     This document is meant for people who create and maintain XZ Utils
     20     packages for operating system distributions. The focus is on GNU/Linux
     21     systems, but most things apply to other systems too.
     22 
     23     While the standard "configure && make DESTDIR=$PKG install" should
     24     give a pretty good package, there are some details which packagers
     25     may want to tweak.
     26 
     27     Packagers should also read the INSTALL file.
     28 
     29 
     30 1. Package naming
     31 -----------------
     32 
     33     The preferred name for the XZ Utils package is "xz", because that's
     34     the name of the upstream tarball. Naturally you may have good reasons
     35     to use some other name; I won't get angry about it. ;-) It's just nice
     36     to be able to point people to the correct package name without asking
     37     what distro they have.
     38 
     39     If your distro policy is to split things into small pieces, here is
     40     one suggestion:
     41 
     42         xz              xz, xzdec, scripts (xzdiff, xzgrep, etc.), docs
     43         xz-lzma         lzma, unlzma, lzcat, lzgrep etc. symlinks and
     44                         lzmadec binary for compatibility with LZMA Utils
     45         liblzma         liblzma.so.*
     46         liblzma-devel   liblzma.so, liblzma.a, API headers
     47         liblzma-doc     Example programs and, if enabled at build time,
     48                         Doxygen-generated liblzma API docs (HTML)
     49 
     50 
     51 2. Package description
     52 ----------------------
     53 
     54     Here is a suggestion which you may use as the package description.
     55     If you can use only one-line description, pick only the first line.
     56     Naturally, feel free to use some other description if you find it
     57     better, and maybe send it to me too.
     58 
     59         Library and command line tools for XZ and LZMA compressed files
     60 
     61         XZ Utils provide a general purpose data compression library
     62         and command line tools. The native file format is the .xz
     63         format, but also the legacy .lzma format is supported. The .xz
     64         format supports multiple compression algorithms, of which LZMA2
     65         is currently the primary algorithm. With typical files, XZ Utils
     66         create about 30 % smaller files than gzip.
     67 
     68     If you are splitting XZ Utils into multiple packages, here are some
     69     suggestions for package descriptions:
     70 
     71     xz:
     72 
     73         Command line tools for XZ and LZMA compressed files
     74 
     75         This package includes the xz compression tool and other command
     76         line tools from XZ Utils. xz has command line syntax similar to
     77         that of gzip. The native file format is the .xz format, but also
     78         the legacy .lzma format is supported. The .xz format supports
     79         multiple compression algorithms, of which LZMA2 is currently the
     80         primary algorithm. With typical files, XZ Utils create about 30 %
     81         smaller files than gzip.
     82 
     83         Note that this package doesn't include the files needed for
     84         LZMA Utils 4.32.x compatibility. Install also the xz-lzma
     85         package to make XZ Utils emulate LZMA Utils 4.32.x.
     86 
     87     xz-lzma:
     88 
     89         LZMA Utils emulation with XZ Utils
     90 
     91         This package includes executables and symlinks to make
     92         XZ Utils emulate lzma, unlzma, lzcat, and other command
     93         line tools found from the legacy LZMA Utils 4.32.x package.
     94 
     95     liblzma:
     96 
     97         Library for XZ and LZMA compressed files
     98 
     99         liblzma is a general purpose data compression library with
    100         an API similar to that of zlib. liblzma supports multiple
    101         algorithms, of which LZMA2 is currently the primary algorithm.
    102         The native file format is .xz, but also the legacy .lzma
    103         format and raw streams (no headers at all) are supported.
    104 
    105         This package includes the shared library.
    106 
    107     liblzma-devel:
    108 
    109         Library for XZ and LZMA compressed files
    110 
    111         This package includes the API headers, static library, and
    112         other development files related to liblzma.
    113 
    114     liblzma-doc:
    115 
    116         liblzma API documentation in HTML and example usage
    117 
    118         This package includes the Doxygen-generated liblzma API
    119         HTML docs and example programs showing how to use liblzma.
    120 
    121 
    122 3. License
    123 ----------
    124 
    125     If the package manager supports a license field, you probably should
    126     put GPLv2+ there (GNU GPL v2 or later). The interesting parts of
    127     XZ Utils are under the BSD Zero Clause License (0BSD), but some less
    128     important files ending up into the binary package are under GPLv2+.
    129     So it is simplest to just say GPLv2+ if you cannot specify
    130     "BSD0 and GPLv2+".
    131 
    132     If you split XZ Utils into multiple packages as described earlier
    133     in this file, liblzma and liblzma-dev packages will contain only
    134     0BSD-licensed code from XZ Utils (compiler or linker may add some
    135     third-party code which may have other licenses).
    136 
    137 
    138 4. configure options
    139 --------------------
    140 
    141     Unless you are building a package for a distribution that is meant
    142     only for embedded systems, don't use the following configure options:
    143 
    144         --enable-debug
    145         --enable-encoders (*)
    146         --enable-decoders
    147         --enable-match-finders
    148         --enable-checks
    149         --enable-small (*)
    150         --disable-threads (*)
    151         --disable-microlzma (*)
    152         --disable-lzip-decoder (*)
    153 
    154     (*) These are OK when building xzdec and lzmadec as described
    155         in INSTALL.
    156 
    157     xzdec and lzmadec don't provide any functionality that isn't already
    158     available in the xz tool. Shipping xzdec and lzmadec without size
    159     optimization and statically-linked liblzma isn't very useful. Doing
    160     that would give users the xzdec man page, which may make it easier
    161     for people to find out that such tools exists, but the executables
    162     wouldn't have any advantage over the full-featured xz.
    163 
    164 
    165 5. Additional documentation
    166 ---------------------------
    167 
    168     "make install" copies some additional documentation to $docdir
    169     (--docdir in configure). There is a copy of the GNU GPL v2, which
    170     can be replaced with a symlink if your distro ships with shared
    171     copies of the common license texts.
    172 
    173     The Doxygen-generated liblzma API documentation (HTML) is built and
    174     installed if the configure option --enable-doxygen is used (it's
    175     disabled by default). This requires that Doxygen is available. The
    176     API documentation is installed by "make install" to $docdir/api.
    177 
    178         NOTE: The files generated by Doxygen include content from
    179         Doxygen itself. Check the license info before distributing
    180         the Doxygen-generated files.
    181 
    182 
    183 6. Extra files
    184 --------------
    185 
    186     The "extra" directory contains some small extra tools or other files.
    187     The exact set of extra files can vary between XZ Utils releases. The
    188     extra files have only limited use or they are too dangerous to be
    189     put directly to $bindir (7z2lzma.sh is a good example, since it can
    190     silently create corrupt output if certain conditions are not met).
    191 
    192     If you feel like it, you may copy the extra directory under the doc
    193     directory (e.g. /usr/share/doc/xz/extra). Maybe some people will find
    194     them useful. However, most people needing these tools probably are
    195     able to find them from the source package too.
    196 
    197     The "debug" directory contains some tools that are useful only when
    198     hacking on XZ Utils. Don't package these tools.
    199 
    200 
    201 7. Installing XZ Utils and LZMA Utils in parallel
    202 -------------------------------------------------
    203 
    204     XZ Utils and LZMA Utils 4.32.x can be installed in parallel by
    205     omitting the compatibility symlinks (lzma, unlzma, lzcat, lzgrep etc.)
    206     from the XZ Utils package. It's probably a good idea to still package
    207     the symlinks into a separate package so that users may choose if they
    208     want to use XZ Utils or LZMA Utils for handling .lzma files.
    209 
    210 
    211 8. Example
    212 ----------
    213 
    214     Here is an example for i686 GNU/Linux that
    215       - links xz and lzmainfo against shared liblzma;
    216       - links size-optimized xzdec and lzmadec against static liblzma
    217         while avoiding libpthread dependency;
    218       - includes only shared liblzma in the final package; and
    219       - copies also the "extra" directory to the package.
    220 
    221     PKG=/tmp/xz-pkg
    222     tar xf xz-x.y.z.tar.gz
    223     cd xz-x.y.z
    224     ./configure \
    225             --prefix=/usr \
    226             --disable-static \
    227             --disable-xzdec \
    228             --disable-lzmadec \
    229             CFLAGS='-march=i686 -mtune=generic -O2'
    230     make
    231     make DESTDIR=$PKG install-strip
    232     make clean
    233     ./configure \
    234             --prefix=/usr \
    235             --disable-shared \
    236             --disable-nls \
    237             --disable-encoders \
    238             --enable-small \
    239             --disable-threads \
    240             CFLAGS='-march=i686 -mtune=generic -Os'
    241     make -C src/liblzma
    242     make -C src/xzdec
    243     make -C src/xzdec DESTDIR=$PKG install-strip
    244     cp -a extra $PKG/usr/share/doc/xz
    245 
    246