Copyright (C) 2011 Peter Breitenlohner You may freely use, modify and/or distribute this file. Building TeX Live (TL) for a distro =================================== Although they use the same code base, building for a TL binary distribution as shipped by the user groups may be quite different from a `distro' build for, e.g., some kind of Linux distribution, a *Bsd or Mac OS X port, or similar. While a TL binary distribution uses shared libraries (libc, libm, X11 libraries, and libfontconfig) only when absolutely necessary, a distro might use as many shared libraries as possible, including the TL specific libkpathsea and libptexenc. In addition the installation paths will, in general, be quite different. 1. Configuring for a distro =========================== Here we give some hints how to configure TL for a distro (see README.config for a fairly complete description of all configure options). 1.1. General setup ------------------ You must use --disable-native-texlive-build otherwise many options described below are rejected, and should use, e.g., --with-banner-add=/SomeDistro to identify your distro. You may specify --enable-shared to build the TL specific kpathsea and ptexenc libraries as shared libraries and may add --disable-shared if you don't want them as static libraries. You should use --with-system-LIB (for LIB=zlib, libpng, zziplib, etc.) to use installed libraries (including kpathsea and ptexenc for the TL specific libraries, e.g., when rebuilding individual programs) and you may have to add --with-LIB-includes=DIR and/or --with-LIB-libdir=DIR to locate the installed headers and libraries. 1.2. Installation paths ----------------------- If you want your principal TEXMF trees to be, e.g., /usr/share/texmf{,-dist} you must specify --prefix=/usr/share and you probably need to modify texmf.cnf to reflect your paths. The compile-time paths defined in paths.h will be computed accordingly. Specify --bindir=/usr/bin to install binaries under /usr/bin. This will cause the installation of correct symlinks to scripts under ${prefix}/texmf or ${prefix}/texmf-dist. To install the TL kpathsea and ptexenc libraries under /usr/lib specify --libdir=/usr/lib but on 64bit bi-arch systems and depending on your distro this might also be --libdir=/usr/lib64 or similar. The correct choice is important in particular when using shared versions of the TL specific libraries. Alternatively you could specify --exec-prefix=/usr for binaries under /usr/bin and libraries under /usr/lib. You probably should specify --infodir=/usr/share/info --mandir=/usr/share/man to have info and man pages installed under /usr/share/{info,man}, and --includedir=/usr/include to have headers under /usr/include/{kpathsea,ptexenc}. For a `staged install' (see Automake manual 12.4), e.g., mkdir /tmp/staging && make DESTDIR=/tmp/staging install-strip all installation paths are prefixed by the value of DESTDIR. 2. Packaging for a distro ========================= From Norbert Preining , 2011-11-04, email to tldistro. This describes Debian packaging, but the basic ideas are the same for all distros. Let us discuss the few important things in turn: - ls-R files - updmap-sys/updmap.cfg - fmtutil-sys/fmtutil.cnf - fmtutil-sys/language.dat/def/lua.def All these files depend on the actually installed packages. So you should never never use the pre-shipped files (updmap.cfg, ...), because they refer to *all* fonts in a full installation. But if you want to allow for smooth upgrades etc, and partial installs, you cannot do that. So the Debian way for these files is: - at package build time we know which formats/font maps/hyphen patterns there are, and create snippets for these configuration files, and at install time put them into /etc/texmf/updmap.d, fmtutil.d, hyphen.d - after the package has been installed the configuration routine does: . assemble the pieces together to updmap.cfg/fmtutil.cnf/language.* . run the necessary commands (also determined at package *build* time, that is updmap-sys, fmtutil --whatever, etc) Furthermore, in Debian there is another requirement, namely that if a sysadm changes configuration files (hereafter called conffiles) in /etc, and the package is only removed (that is, the conffiles are *NOT* deleted) but NOT purged (purged = also conffiles removed), then a later installation of the package has to honor the changes the sysadm made. That means, there will remain snippets in /etc/updmap.d (for example) if a font package has been removed, but not purged. These snippets should of course NOT be merged into the main config file. So we ship in addition a file /var/lib/texmf/fmt.d/.... and check at assemble time if this file is present. If it is present, then the snippet is used, if not, then it is NOT used. (BTW, this also happens during partial upgrades, so if you are serious about packaging, think about that, too). Well, that is the story at least till 2007. In later version of the Debian packages we now use something called "triggers", where a central package (in our case "tex-common") shows interest in a certain directory, namely the directories /etc/texmf/fmtutil.d etc (all of them), and if a file is dropped there or changed there, only some specific code in tex-common is executed. This way we can reduce the calls to mktexlsr and updmap-sys a *LOT* (think about installing every collection of TeX Live, and run mktexlsr, fmtutil-sys --all, updmap-sys after *EACH* collection, versus running it only once or twice!). But this is Debian specific, and probably no other distribution has a similar system (although very useful). Puuuuh, long email. BTW, there are loads of documents in the tex-common package of Debian: http://packages.debian.org/sid/tex-common, especially the main documents Debian-TeX-Policy and TeX-on-Debian. Although a bit outdated, they describe the reality quite closely. Get the .deb and unpack it with ar ;-) Happy building. Please use the tldistro list for questions or discussion: http://lists.tug.org/tldistro.