TeX Live build procedure

To build the executable programs included in TeX Live, there are usual steps of downloading the sources, configuring, compiling, and installing. But there are some peculiarities, briefly described here.

TeX Live, unlike many other projects, ships binaries to TeX users. This web page is especially for the volunteers who contribute those binaries.

We have a mailing list specifically for discussion of build issues: tlbuild@tug.org. Feel free to join or peruse the archives if you are interested.

Downloading the sources

A separate page describes the ways to get the development sources. If all you want to do is compile the sources (as opposed to having a complete runnable TeX system), you can use rsync -a --delete --exclude=.svn tug.org::tldevsrc/Build/source /your/dir/

After the release, we'll provide the final sources in other ways also.


The simplest way is to configure, compile, and install in one step using the top-level Build script. Use Build --debug to compile without optimization. Other options are passed to configure.

The prerequisites for a default build are fairly minimal, but you may want to check through them.

If you want to exclude certain programs from the build, use --without-progname. Run configure --help to see the list.

Most everything that Build does can be overridden with environments; take a look. Alternatively, what Build boils down to is configure && make world, where make world is the same as make install strip. Adapt as desired.

For the TL-distributed executables, please use Build or otherwise arrange for the binaries to be stripped. (The target strip in the top-level Makefile will do this.)

Deployment and testing

The result of the TL make install is a directory such as Build/source/inst/bin/i686-pc-linux-gnu full of executables, but they can't be directly run from there. (The data files created under inst/ aren't directly useful for anything.)

The easiest way to test the newly-built binaries is to copy that bindir to Master/bin/archname in a full TL checkout. Then run, e.g., latex small2e; the latex.fmt file should be automatically built and you should end up with a small2e.dvi file that you can, for example, view with xdvi or convert with dvips.

For the TL-distributed executables, when you are happy with the results, either post a tarball of the bindir (preferably with no top level directory) on the web somewhere and email karl, or commit them to the TL repository yourself. If you like to do it youself, you may find the tl-update-bindir script useful. (It takes care of Subversion housekeeping chores mostly related to symbolic links.)

Special considerations for lzma utilities

lzma is a new compression format (zip with improved parameters), which compresses both better and faster than bzip2. We are using it for packages in TeX Live 2008.

For convenience, there is a copy of the current sources in the TL repository: source/utils/lzma. It is not built by default, because we do not want all the lzma executables in our normal bin directories. What we do want are just the lzmadec and lzma binaries, on their own, in Master/tlpkg/installer, with the architecture name as a suffix, e.g., lzmadec.i386-linux.

So, for the TL-distributed executables, one time only, please:

  1. cd source/utils/lzma && configure --disable-shared && make
  2. strip src/lzma/lzma src/lzmadec/lzmadec
  3. either email those binaries to karl or commit them yourself in the above location.

Special considerations for xindy

In TeX Live 2008, we include Joachim Schrod's xindy indexing program, thanks to Vladimir Volovich. However, xindy requires GNU CLISP; therefore, it is disabled by default in the Build script.

For the TL-distributed executables, to enable xindy, pass --with-xindy --with-clisp=/path/to/clisp to Build or configure, after setting up clisp, as explained in the instructions for setting up clisp. This info is at the end of source/utils/README; ignore the notes about the other programs there (unless you're interested).

The reason for building our own clisp to use for the TL compilation is to minimize shared library dependencies. Although some systems come with clisp, using the system version will almost certainly result in pulling in many other libraries, resulting in an xindy executable that's unlikely to work for many TL users.


This web page isn't the place to write in depth about how TeX and friends are compiled in TeX Live. In brief, Knuth's original sources are implemented as literate programs using Pascal, and TL's web2c process converts them to C for compilation.

Volunteer builders

Here is a list of architectures and their respective builders, to the best of our knowledge. Volunteers for other systems are most welcome.

Please send corrections to the tlbuild list.

$Date: 2008/08/25 23:31:23 $; TeX Live;