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