1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
|
(This file was generated by makeinfo and splitinfo.gawk.)
(Released under the old-style GNU documentation license;
see sources or other output files for full text.)
6 Layout and infrastructure
***************************
The TeX Live source tree is the subtree rooted at 'Build/source' of the
complete TL distribution and contains the sources for all executables
distributed by TL, as well as 'configure' scripts and 'make' rules to
build and install them together with some of their support files.
6.1 Build system tools
======================
As mentioned above (*note Prerequisites::), a normal build requires very
little. On the other hand, if you want to modify the TeX Live
infrastructure sources, such as 'configure.ac' or 'Makefile.am' files,
you will need to have several additional tools installed.
In general, the TL build system uses the latest released versions of
the GNU build tools, installed directly from the original GNU releases
(e.g., by building them with 'configure --prefix=/usr/local/gnu' and
having 'PATH' start with '/usr/local/gnu/bin'). We have found that
trying to use the versions of these tools packaged for distros causes
many extra hassles, so don't do that, tempting as it may be.
Currently the versions we use are:
autoconf (GNU Autoconf) 2.69
automake (GNU automake) 1.14.1
bison (GNU Bison) 3.0.2
flex 2.5.39
ltmain.sh (GNU libtool) 2.4.2
m4 (GNU M4) 1.4.17
makeinfo (GNU texinfo) 5.2
These versions should be used to update the generated files (e.g.,
'configure' or 'Makefile.in') in all or parts of the TL tree after their
dependencies have been changed. This can be done explicitly with the
top-level 'reautoconf' script or implicitly by using the configure
option '--enable-maintainer-mode'.
The files in the Subversion repository (see
<http://tug.org/texlive/svn>) are all up to date, but unfortunately this
may not be reflected by their timestamps. (For starters, be sure to set
'use-commit-times=yes' in '~/.subversion/config' or the equivalent.)
To avoid unnecessary runs of 'bison', 'flex', or 'makeinfo' it may be
necessary to 'touch' the generated ('.c', '.h', or '.info') files. With
'--enable-maintainer-mode' it may also be necessary to 'touch' first
'aclocal.m4', then 'configure' and 'config.h.in' (or 'c-auto.in'), and
finally all 'Makefile.in' files. Perhaps 'make -t' will help.
6.2 Top-level directories
=========================
Here is a brief description of the top-level directories in the TeX Live
source tree.
As mentioned at the beginning of the chapter (*note Overview of build
system::), the main source directories are 'texk/' (TeX-specific
programs and libraries), 'utils/' (additional programs), and 'libs'
(generic libraries).
The top-level directories 'am/' and 'm4/' contain 'Makefile.am'
fragments and Autoconf macros, respectively, used in many places.
Specifically, the file 'm4/kpse-pkgs.m4' contains lists of all program
and library modules; missing modules are silently ignored. (This helps
in creating cut-down source trees.)
Each module contributes fragments (in separate files) defining its
capabilities and requirements to the 'configure.ac' scripts at the
top-level and in the subdirectories 'libs', 'utils', and 'texk'. The
fragments from program modules supply 'configure' options to disable or
enable building them; those from library modules specify if an installed
(system) version of that library can be used. This ultimately
determines which modules need to be built--although all modules must be
configured for the benefit of 'make' targets such as 'dist' or
'distcheck'.
The top-level 'build-aux/' directory contains the common files
'compile', 'config.guess', 'config.sub', 'depcomp', etc. for most
packages, pulled from the GNU Gnulib sources
(<http://www.gnu.org/software/gnulib>), which in turn synchronizes with
the appropriate ultimate upstream repository. There are, however,
independent copies in, e.g., 'libs/freetype2/freetype-*/builds/unix/',
and similar places. The 'reautoconf' script does not touch those, but a
TL cron job keeps them in sync (nightly).
The directory 'extra/' contains things which are not part of the TL
build, but are present for convenience, e.g., 'epstopdf' developed here
and 'xz/' required by the TL installer.
6.3 Autoconf macros
===================
Here we describe some of the Autoconf macros used in several modules-not
a complete list, by any means. These general macros are supplemented by
module-specific macros in directories such as 'texk/dvipng/m4/'; some of
those are described in *note Library modules:: and *note Program
modules::.
6.3.1 General setup macros
--------------------------
The TL sources use two general setup macros:
-- Macro: KPSE_BASIC (NAME, [MORE-OPTIONS])
Initialize the basic TL infrastructure for module NAME:
'AM_INIT_AUTOMAKE([foreign MORE-OPTIONS])'
'AM_MAINTAINER_MODE'
'KPSE_COMPILER_WARNINGS'
and make sure the C compiler understands function prototypes. This
is used for all generic library and program modules.
-- Macro: KPSE_COMMON (NAME, [MORE-OPTIONS])
Like 'KPSE_BASIC' but add:
'LT_PREREQ([2.2.6])'
'LT_INIT([win32-dll])'
'AC_SYS_LARGEFILE'
'AC_FUNC_FSEEKO'
and check for frequently used functions, headers, types, and
structures. This is used for TeX-specific modules.
6.3.2 Macros for programs
-------------------------
Macros for program checks:
-- Macro: KPSE_CHECK_LATEX
Set 'LATEX' to the name of the first of 'latex', 'elatex', or
'lambda' which exists in 'PATH', or to 'no' if none of them exists.
Call 'AC_SUBST' for 'LATEX'. The result of this test can be
overridden by setting the 'LATEX' environment variable or the cache
variable 'ac_cv_prog_LATEX'.
-- Macro: KPSE_CHECK_PDFLATEX
Check for 'pdflatex' in 'PATH' and set 'PDFLATEX'.
-- Macro: KPSE_CHECK_PERL
Check for 'perl' or 'perl5' in 'PATH' and set 'PERL'.
-- Macro: KPSE_PROG_LEX
Call 'AC_PROG_LEX' and add the flag '-l' for 'flex'.
6.3.3 Macros for compilers
--------------------------
Macros for compiler-related checks:
-- Macro: KPSE_COMPILER_WARNINGS
When using the (Objective) C/C++ compiler, set
'WARNING_[OBJ]C[XX']FLAGS to suitable warning flags (depending on
the value given to or implied for '--enable-compiler-warnings').
Call 'AC_SUBST' for them. At the moment this only works for GNU
compilers, but could be extended to others if necessary.
This macro caches its results in the 'kpse_cv_warning_cflags', ...
variables.
-- Macro: KPSE_COMPILER_VISIBILITY
When using the C or C++ compiler, try to set
'VISIBILITY_C[XX]FLAGS' to flags to hide external symbols. Call
'AC_SUBST' for this variable. At the moment this only tests for
the compiler option '-fvisibility=hidden', but that could be
extended with more checks if necessary.
This macro caches its results in the 'kpse_cv_visibility_cflags' or
'kpse_cv_visibility_cxxflags' variable.
-- Macro: KPSE_CXX_HACK
Provide the configure option '--enable-cxx-runtime-hack'. If
enabled and when using 'g++', try to statically link with
'libstdc++', somewhat improving portability of the resulting
binary.
This macro caches its result in the 'kpse_cv_cxx_hack' variable.
6.3.4 Macros for libraries
--------------------------
One macro for a library check:
-- Macro: KPSE_LARGEFILE (VARIABLE, [EXTRA-DEFINE])
Call 'AC_SYS_LARGEFILE' and 'AC_FUNC_FSEEKO' and append suitable
'-D' flags (optionally including '-DEXTRA-DEFINE') to VARIABLE.
6.3.5 Macros for library and header flags
-----------------------------------------
Each library module 'libs/LIB' or 'texk/LIB' is supplemented by a macro
'KPSE_LIB_FLAGS' (all uppercase) that provides make variables for that
library. E.g., for 'libs/libpng':
-- Macro: KPSE_LIBPNG_FLAGS
Provide the configure option '--with-system-libpng'. Set and
'AC_SUBST' 'make' variables for modules using this library (either
an installed version or from the TeX Live tree): 'LIBPNG_INCLUDES'
for use in CPPFLAGS, LIBPNG_LIBS for use in LDADD, LIBPNG_DEPEND
for use as dependency, and LIBPNG_RULE defining 'make' rules to
rebuild the library.
-- Macro: KPSE_ADD_FLAGS (LIBNAME)
Temporarily extend CPPFLAGS and LIBS with the values required for
the library module 'NAME'.
-- Macro: KPSE_RESTORE_FLAGS
Restore 'CPPFLAGS' and 'LIBS' to their original values.
As an example, the 'configure.ac' file for a hypothetical program
'utils/foo' using 'libpng', and hence 'zlib', would contain
KPSE_ZLIB_FLAGS
KPSE_LIBPNG_FLAGS
and its 'Makefile.am' would be along these lines:
bin_PROGRAMS = foo
AM_CPPFLAGS = ${ZLIB_INCLUDES} ${LIBPNG_INCLUDES}
foo_LDADD = ${ZLIB_LIBS} ${LIBPNG_LIBS}
foo_DEPENDENCIES = ${ZLIB_DEPEND} ${LIBPNG_DEPEND}
## Rebuild libz
@ZLIB_RULE@
## Rebuild libpng
@LIBPNG_RULE@
If it was necessary to examine whether certain 'zlib' or 'libpng'
features were available, 'configure.ac' should be continued this way:
KPSE_ADD_FLAGS([zlib])
... # tests for 'zlib' features, if any
KPSE_ADD_FLAGS([libpng])
... # tests for 'libpng' features
KPSE_RESTORE_FLAGS # restore 'CPPFLAGS' and 'LIBS'
6.3.6 Macros for Windows
------------------------
Windows differs in several aspects from Unix-like systems, many of them
due to the lack of symbolic links.
-- Macro: KPSE_CHECK_WIN32
Check if compiling for a Windows system. The result is 'no' for
Unix-like systems (including Cygwin), 'mingw32' for Windows with
GCC, or 'native' for Windows with MSVC. The result is cached in the
'kpse_cv_have_win32' variable.
-- Macro: KPSE_COND_WIN32
Call 'KPSE_CHECK_WIN32' and define the Automake conditional 'WIN32'
('true' if the value of 'kpse_cv_have_win32' is not 'no').
-- Macro: KPSE_COND_MINGW32
Call 'KPSE_COND_WIN32' and define the Automake conditional
'MINGW32' ('true' if the value of 'kpse_cv_have_win32' is
'mingw32').
-- Macro: KPSE_COND_WIN32_WRAP
Call 'KPSE_COND_WIN32' and define the Automake conditional
'WIN32_WRAP' ('true' if the standard Windows wrapper
('texk/texlive/w32_wrapper/runscript.exe') exists. This wrapper is
used on Windows instead of symlinks for the "linked scripts" (*note
Linked scripts::).
-- Macro: KPSE_WIN32_CALL
Call 'KPSE_COND_WIN32', check if the file
'texk/texlive/w32_wrapper/callexe.c' exists; if it does, create a
symlink in the build tree. Compiling 'callexe.c' with
'-DEXEPROG='"FOO.exe"'' and installing 'callexe.exe' as 'BAR.exe'
is used on Windows instead of a symlink 'BAR->FOO' for Unix-like
systems.
6.4 Library modules
===================
Here we discuss some specifics for a few of the libraries in TL, both
for the details themselves, and as a way of illuminating the general
structure and variation.
6.4.1 The 'png' library in 'libs/libpng'
----------------------------------------
This generic library uses the source tree in, e.g., the subdirectory
'libpng-1.5.17' with all modifications for TL recorded in
'libpng-1.5.17-PATCHES/*'. The 'configure.ac' fragment
'ac/withenable.ac' contains
KPSE_WITH_LIB([libpng], [zlib])
specifying the module name, and indicating the dependency on 'zlib'. A
third literal argument 'tree' would specify that the library from the
TeX Live tree cannot be replaced by a system version. That not being
the case here, a second fragment 'ac/libpng.ac' contains
KPSE_TRY_LIB([libpng],
[#include <png.h>],
[png_structp png; png_voidp io; png_rw_ptr fn;
png_set_read_fn(png, io, fn);])
thus providing the simple C code
#include <png.h>
int main ()
{ png_structp png; png_voidp io; png_rw_ptr fn;
png_set_read_fn(png, io, fn);
return 0; }
which Autoconf uses to verify the usability of a system version with C
code. The analogous macro 'KPSE_TRY_LIBXX' would check using C++ code.
These fragments are included by 'configure.ac' at the top level.
For this library, among many other modules, a proxy build system for
TL is used ('configure.ac', 'Makefile.am', and 'include/Makefile.am'),
ignoring the distributed one. Consequently, a few generated files and
auxiliary scripts are removed from the distributed source tree. The
public headers 'png.h', 'pngconf.h', and 'pnglibconf.h' are "installed"
(as symlinks) under 'include/' in the build tree exactly as they are for
a system version under, e.g., '/usr/include/'.
The module is supplemented by the file 'm4/kpse-libpng-flags.m4' that
defines the M4 macro 'KPSE_LIBPNG_FLAGS' used by all modules depending
on this library in their 'configure.ac' to generate the 'make' variables
'LIBPNG_INCLUDES' for use in 'CPPFLAGS', 'LIBPNG_LIBS' for use in
'LDADD', 'LIBPNG_DEPEND' for use as dependencies, and 'LIBPNG_RULE'
defining 'make' rules to rebuild the library.
'm4/kpse-libpng-flags.m4' also supplies the configure option
'--with-system-libpng' and uses 'pkg-config' to determine the flags
required for the system library.
6.4.2 The 'zlib' library in 'libs/zlib'
---------------------------------------
This generic library is very much analogous to 'libpng', but without the
dependency on any other library. The file 'm4/kpse-zlib-flags.m4'
supplies the configure option '--with-system-zlib', as well as
'--with-zlib-includes' and '--with-zlib-libdir' to specify non-standard
locations of the 'zlib' headers and/or library.
6.4.3 The 'freetype' library in 'libs/freetype2'
------------------------------------------------
This module uses a wrapper build system with an almost trivial
'configure.ac' and with a 'Makefile.am' that invokes 'configure' and
'make' for the distributed source, followed by 'make install' with the
build tree as destination. The flags required for the system library
are obtained through 'freetype-config'.
6.4.4 The 'kpathsea' library in 'texk/kpathsea'
-----------------------------------------------
This is one of the TeX-specific libraries that are maintained as part of
TeX Live (*note (kpathsea)::). Despite being a core part of the TeX
system, it is not a terribly special case in the infrastructure. The
TeX libraries are Libtool libraries (static and/or shared) and are
installed by 'make install' together with the programs. They are,
however, not part of the TL DVD as distributed by TeX user groups, and
have never been officially released for standalone use.
It is possible, and possibly even useful for distro builds (*note
Distro builds::, to specify the configure option
'--with-system-kpathsea' in order to use a system version of the library
and it may then be necessary to specify '--with-kpathsea-includes'
and/or '--with-kpathsea-libdir'.
In addition to 'ac/withenable.ac' and 'ac/kpathsea.ac' there is a
third fragment 'ac/mktex.ac' included by both 'ac/withenable.ac' and
'configure.ac' that supplies configure options such as
'--enable-mktextfm-default', which determine the compile time default of
whether or not to run 'mktextfm' to generate a missing '.tfm' file. In
any case, however, the command line options '-mktex=tfm' or
'-no-mktex=tfm' for the TeX-like engines override this default.
6.5 Program modules
===================
As with libraries (*note Library modules::), here we discuss the details
for a few of the programs in TL.
6.5.1 The 't1utils' package in 'utils/t1utils'
----------------------------------------------
Once again we use the distributed source tree 't1utils-1.38' with
modifications documented in 't1utils-1.38-PATCHES/*' and a proxy build
system consisting of 'configure.ac' and 'Makefile.am'. The fragment
'ac/withenable.ac' contains
KPSE_ENABLE_PROG([t1utils])
specifying the module name without any dependencies, and supplies the
configure option '--disable-t1utils'.
6.5.2 The 'xindy' package in 'utils/xindy'
------------------------------------------
This module uses the distributed source tree 'xindy-2.4' with
modifications documented in 'xindy-2.4-PATCHES/*', a proxy
'configure.ac', and a wrapper 'Makefile.am' that descends into
'xindy-2.4'. The 'xindy' build requires that the distributed
'Makefile's allow a 'VPATH' build, can handle all targets, and do not
refer to '${top_srcdir}' or '${top_builddir}'. The fragment
'ac/withenable.ac' contains
KPSE_ENABLE_PROG([xindy], , [disable native])
m4_include(kpse_TL[utils/xindy/ac/xindy.ac])
m4_include(kpse_TL[utils/xindy/ac/clisp.ac])
where 'disable' in the third argument indicates that 'xindy' is only
built if explicitly enabled by the user with 'configure --enable-xindy'
(the need for 'clisp' is too painful to require by default), and
'native' disallows cross compilation. The additional fragments
'ac/xindy.ac' and 'ac/clisp.ac' specify more 'configure' options to be
seen at the top level with 'ac/xindy.ac' also included by
'configure.ac'.
6.5.3 The 'xdvik' package in 'texk/xdvik'
-----------------------------------------
This package is maintained as part of the TeX Live tree with sources in
its top level directory and the subdirectory 'gui'. The fragment
'ac/withenable.ac' contains
dnl extra_dirs = texk/xdvik/squeeze
KPSE_ENABLE_PROG([xdvik], [kpathsea freetype2], [x])
m4_include(kpse_TL[texk/xdvik/ac/xdvik.ac])
thus specifying the dependency on the 'kpathsea', 'freetype', and X11
libraries. The M4 comment (following 'dnl') signals the subsidiary
'squeeze/configure.ac'. This is needed because the main executable
'xdvi-bin' (to be installed as, e.g., 'xdvi-xaw') is for the 'host'
system whereas the auxiliary program 'squeeze/squeeze' has to run on the
'build' system and in a cross compilation they differ.
The additional fragment 'ac/xdvik.ac' is also included by
'configure.ac' and supplies the configure option '--with-xdvi-x-toolkit'
also seen at the top-level.
6.5.4 The subdirectory 'utils/asymptote'
----------------------------------------
This subdirectory contains the sources for 'asy' and 'xasy' but due to
its complexity and prerequisites (e.g., OpenGL) it is not part of the TL
build system. These programs must be built and installed independently,
but are included on the TL DVD together with their support files.
6.6 Extending TeX Live
======================
This section outlines the basic process for adding new packages to the
TL build system.
6.6.1 Adding a new program module
---------------------------------
A TeX-specific program module in a subdirectory 'texk/PROG' may use the
TeX-specific libraries and is included by adding its name 'PROG' to the
M4 list 'kpse_texk_pkgs' defined in 'm4/kpse-pkgs.m4'.
A generic program module in a subdirectory 'utils/PROG' must not use
the TeX-specific libraries and is included by adding its name 'PROG' to
the M4 list 'kpse_utils_pkgs' in 'm4/kpse-pkgs.m4'.
In either case, apart from the program sources and build system
('configure.ac' and 'Makefile.am'), the subdirectory 'texk/PROG' or
'utils/PROG' must provide a fragment 'ac/withenable.ac' that contains
the M4 macro 'KPSE_ENABLE_PROG' defined in 'm4/kpse-setup.m4' with
'PROG' as the mandatory first argument and three optional arguments:
1. a list of required libraries from the TL tree;
2. a list of options ('disable' if this module is not to be built
without the configure option '--enable-PROG', 'native' if cross
compilation is not possible, 'x' if the program requires X11
libraries);
3. and a comment added to the help text for the 'configure' option
'--enable-PROG' or '--disable-PROG'.
If the module requires specific configure options to be seen at the
top-level, they should be defined in an additional fragment 'ac/PROG.ac'
included from 'ac/withenable.ac' and 'configure.ac'.
6.6.2 Adding a new generic library module
-----------------------------------------
A generic library module in a subdirectory 'libs/LIB' must not depend on
TeX-specific libraries, by definition. It is included by adding its
name 'LIB' to the M4 list 'kpse_libs_pkgs' in 'm4/kpse-pkgs.m4'--before
any other libraries from the TeX Live tree on which it depends.
As with program modules, the subdirectory 'libs/LIB' must contain the
sources and build system for the library (and any installable support
programs) and a fragment 'ac/withenable.ac' that contains the M4 macro
'KPSE_WITH_LIB' defined in 'm4/kpse-setup.m4' with 'LIB' as the
mandatory first argument and two optional arguments: a list of required
libraries from the TL tree, and a list of options (currently there is
only one: specify 'tree' if this library cannot be replaced by a system
version).
If a system version can be used, a second fragment 'ac/LIB.ac' is
needed, containing the M4 macro 'KPSE_TRY_LIB' (or 'KPSE_TRY_LIBXX')
with 'LIB' as the mandatory first argument and two additional arguments
for the Autoconf macro 'AC_LANG_PROGRAM' used to compile and link a
small C (or C++) program as sanity check for using the system library.
In addition a file 'm4/kpse-LIB-flags' (at the top level) must define
the M4 macro 'KPSE_LIB_FLAGS' (all uppercase) setting up the 'make'
variables 'LIB_INCLUDES', 'LIB_LIBS', 'LIB_DEPEND', and 'LIB_RULE' with
the values required for 'CPPFLAGS', 'LDADD', dependencies, and a
(multi-line) 'make' rule to rebuild the library when necessary. All of
that is needed for the library from the TL tree and, if supported, for a
system version.
If a system library is allowed, 'KPSE_LIB_FLAGS' also provides the
configure option '--with-system-LIB' and uses the additional M4 macro
'KPSE_LIB_SYSTEM_FLAGS' to generate the 'make' variables for a system
library. Furthermore the definition of the M4 macro
'KPSE_ALL_SYSTEM_FLAGS' in 'm4/kpse-pkgs.m4' must be extended by the
line:
'AC_REQUIRE([KPSE_LIB_SYSTEM_FLAGS])'
6.6.3 Adding a new TeX-specific library module
----------------------------------------------
A TeX-specific library module in a subdirectory 'texk/LIB' may depend on
other TeX-specific libraries but must not depend on any generic library
from the TL tree. It is included in the same general ways as a generic
library (see the previous section), with these modifications:
* The library name 'LIB' is added to the M4 list 'kpse_texlibs_pkgs'
also in 'm4/kpse-pkgs.m4'.
* The fragment 'ac/withenable.ac' must use 'KPSE_WITH_TEXLIB'.
|