Make sure the build scripts work again
[mplib] / src / texk / kpathsea / kpathsea.texi
1 \input texinfo
2 @setfilename kpathsea.info
3 @settitle Kpathsea: A library for path searching
4
5 @set version 3.5.6dev
6 @set month-year March 2008
7
8 @c Define new indices for commands, filenames, and options.
9 @defcodeindex cm
10 @defcodeindex fl
11 @defcodeindex op
12
13 @c Put everything in one index (arbitrarily chosen to be the concept index).
14 @syncodeindex cm cp
15 @syncodeindex fl cp
16 @syncodeindex fn cp
17 @syncodeindex ky cp
18 @syncodeindex op cp
19 @syncodeindex pg cp
20 @syncodeindex tp cp
21 @syncodeindex vr cp
22
23 @dircategory TeX
24 @direntry
25 * Kpathsea: (kpathsea).                       File lookup along search paths.
26 * kpsewhich: (kpathsea)Invoking kpsewhich.    TeX file searching.
27 * mktexfmt: (kpathsea)mktex scripts.          Format (fmt/base/mem) generation.
28 * mktexlsr: (kpathsea)Filename database.      Update ls-R.
29 * mktexmf: (kpathsea)mktex scripts.           MF source generation.
30 * mktexpk: (kpathsea)mktex scripts.           PK bitmap generation.
31 * mktextex: (kpathsea)mktex scripts.          TeX source generation.
32 * mktextfm: (kpathsea)mktex scripts.          TeX font metric generation.
33 @end direntry
34
35 @copying
36 This file documents the Kpathsea library for path searching.
37
38 Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
39 2004, 2005, 2007, 2008 Karl Berry & Olaf Weber.
40
41 Permission is granted to make and distribute verbatim copies of this
42 manual provided the copyright notice and this permission notice are
43 preserved on all copies.
44
45 @ignore
46 Permission is granted to process this file through TeX and print the
47 results, provided the printed document carries a copying permission
48 notice identical to this one except for the removal of this paragraph
49 (this paragraph not being relevant to the printed manual).
50 @end ignore
51
52 Permission is granted to copy and distribute modified versions of this
53 manual under the conditions for verbatim copying, provided that the
54 entire resulting derived work is distributed under the terms of a
55 permission notice identical to this one.
56
57 Permission is granted to copy and distribute translations of this manual
58 into another language, under the above conditions for modified versions,
59 except that this permission notice may be stated in a translation
60 approved by the Free Software Foundation.
61 @end copying
62
63
64 @titlepage
65
66 @title Kpathsea library
67 @subtitle for version @value{version}
68 @subtitle @value{month-year}
69 @author Karl Berry (@email{kb@@mail.tug.org})
70 @author Olaf Weber (@email{infovore@@xs4all.nl})
71
72 @page
73 @vskip 0pt plus 1filll
74 @insertcopying
75 @end titlepage
76
77
78 @ifnottex
79 @node Top
80 @top Kpathsea library
81
82 This manual documents how to install and use the Kpathsea library for
83 filename lookup.  It corresponds to version @value{version},
84 released in @value{month-year}.
85
86 @menu
87 * Introduction::                Overview.
88 * Installation::                Compilation, installation, and bug reporting.
89
90 * Path searching::              How filename lookups work.
91 * TeX support::                 Special support for TeX-related file lookups.
92
93 * Programming::                 How to use Kpathsea features in your program.
94
95 * Index::                       General index.
96 @end menu
97 @end ifnottex
98
99
100 @node Introduction
101 @chapter Introduction
102
103 @cindex introduction
104 @cindex fundamental purpose of Kpathsea
105
106 This manual corresponds to version @value{version} of the Kpathsea
107 library, released in @value{month-year}.
108
109 The library's fundamental purpose is to return a filename from a list of
110 directories specified by the user, similar to what shells do when
111 looking up program names to execute.
112
113 @cindex programs using the library
114 The following software, all of which we maintain, uses this library:
115
116 @itemize @bullet
117 @item Dviljk (see the @samp{dvilj} man page)
118 @item Dvipsk (@pxref{Top, , Introduction, dvips, Dvips: A DVI driver})
119 @item GNU font utilities (@pxref{Top, , Introduction, fontu, GNU font
120 utilities})
121 @item Web2c (@pxref{Top, , Introduction, web2c, Web2c: A @TeX{}
122 implementation})
123 @item Xdvik (see the @samp{xdvi} man page)
124 @end itemize
125
126 @noindent Other software that we do not maintain also uses it.
127
128 @cindex interface, not frozen
129 @cindex comments, making
130 @cindex suggestions, making
131 We are still actively maintaining the library (and probably always will
132 be, despite our hopes).  If you have comments or suggestions, please send
133 them to us (@pxref{Reporting bugs}).
134
135 @cindex conditions for use
136 @cindex license for using the library
137 @cindex GNU General Public License
138 We distribute the library under the GNU Library General Public License
139 (LGPL).  In short, this means if you write a program using the library,
140 you must (offer to) distribute the source to the library, along with any
141 changes you have made, and allow anyone to modify the library source and
142 distribute their modifications.  It does not mean you have to distribute
143 the source to your program, although we hope you will.  See the files
144 @file{GPL} and @file{LGPL} for the text of the GNU licenses.
145
146 @cindex @TeX{} Users Group
147 If you know enough about @TeX{} to be reading this manual, then you (or
148 your institution) should consider joining the @TeX{} Users Group (if
149 you're already a member, great!).  TUG produces the periodical
150 @cite{TUGboat}, sponsors an annual meeting and publishes the
151 proceedings, and arranges courses on @TeX{} for all levels of users
152 throughout the world.  Anyway, here is the address:
153
154 @flindex tug@@tug.org
155 @display
156 @TeX{} Users Group
157 P.O. Box 2311
158 Portland OR 97208-2311
159 USA
160 phone: +1 503 223-9994
161 fax:   +1 503 223-3960
162 email: @email{tug@@tug.org}
163 @end display
164
165 @menu
166 * History::
167 @end menu
168
169
170 @node History
171 @section History
172
173 @cindex history of Kpathsea
174
175 @cindex Knuth, Donald E.
176 (This section is for those people who are curious about how the library
177 came about.)  (If you like to read historical accounts of software, we
178 urge you to seek out the GNU Autoconf manual and the ``Errors of
179 @TeX{}'' paper by Don Knuth, published in @cite{Software---Practice and
180 Experience} 19(7), July 1989.)
181
182 @cindex Morgan, Tim
183 @cindex Rokicki, Tom
184 @cindex Berry, Karl
185 @cindex VAX 11/750
186 @cindex Sun 2
187 @pindex pxp @r{Pascal preprocessor}
188 @pindex pc @r{Pascal compiler}
189 [Karl writes.]  My first ChangeLog entry for Web2c seems to be February
190 1990, but I may have done some work before then.  In any case, Tim
191 Morgan and I were jointly maintaining it for a time.  (I should mention
192 here that Tim had made Web2c into a real distribution long before I had
193 ever used it or even heard of it, and Tom Rokicki did the original
194 implementation.  I was using @code{pxp} and @code{pc} on VAX 11/750's
195 and the hot new Sun 2 machines.)
196
197 It must have been later in 1990 and 1991 that I started working on
198 @cite{@TeX{} for the Impatient}. Dvips, Xdvi, Web2c, and the GNU
199 fontutils (which I was also writing at the time) all used different
200 environment variables, and, more importantly, had different bugs in
201 their path searching. This became extremely painful, as I was stressing
202 everything to the limit working on the book.  I also desperately wanted
203 to implement subdirectory searching, since I couldn't stand putting
204 everything in one big directory, and also couldn't stand having to
205 explicitly specify @file{cm}, @file{pandora}, @dots{} in a path.
206
207 @cindex Vojta, Paul
208 In the first incarnation, I just hacked separately on each
209 program---that was the original subdirectory searching code in both Xdvi
210 and Dvips, though I think Paul Vojta has completely rewritten Xdvi's
211 support by now.  That is, I tried to go with the flow in each program,
212 rather than changing the program's calling sequences to conform to
213 common routines.
214
215 Then, as bugs inevitably appeared, I found I was fixing the same thing
216 three times (Web2c and fontutils were always sharing code, since I
217 maintained those---there was no Dvipsk or Xdvik or Dviljk at this
218 point).  After a while, I finally started sharing source files.  They
219 weren't yet a library, though.  I just kept things up to date with shell
220 scripts.  (I was developing on a 386 running ISC 2.2 at the time, and so
221 didn't have symbolic links.  An awful experience.)
222
223 @cindex MacKenzie, David
224 The ChangeLogs for Xdvik and Dvipsk record initial releases of those
225 distributions in May and June 1992.  I think it was because I was tired
226 of the different configuration strategies of each program, not so much
227 because of the path searching.  (Autoconf was being developed by David
228 MacKenzie and others, and I was adapting it to @TeX{} and friends.)
229
230 @cindex zuhn, david
231 I started to make a separate library that other programs could link with
232 on my birthday in April 1993, according to the ChangeLog.  I don't
233 remember exactly why I finally took the time to make it a separate
234 library; a conversation with david zuhn that initiated it.  Just seemed
235 like it was time.
236
237 @cindex Walsh, Norman
238 @cindex Neumann, Gustaf
239 Dviljk got started in March 1994 after I bought a Laserjet 4.  (Kpathsea
240 work got suspended while Norm Walsh and I, with Gustaf Neumann's help,
241 implemented a way for @TeX{} to get at all those neat builtin LJ4 fonts
242 @dots{} such a treat to have something to typeset in besides Palatino!)
243
244 By spring of 1995, I had implemented just about all the path-searching
245 features in Kpathsea that I plan to, driven beyond my initial goals by
246 Thomas Esser and others.  I then started to integrate Web2c with
247 Kpathsea. After the release of a stable Web2c, I hope to be able to stop
248 development, and turn most of my attention back to making fonts for GNU.
249 (Always assuming Micros**t hasn't completely obliterated Unix by then,
250 or that software patents haven't stopped software development by anybody
251 smaller than a company with a million-dollar-a-year legal budget.  Which
252 is actually what I think is likely to happen, but that's another
253 story@dots{})
254
255 @cindex Weber, Olaf
256 [Olaf writes.]  At the end of 1997, UNIX is still alive and kicking,
257 individuals still develop software, and Web2c development still
258 continues.  Karl had been looking for some time for someone to take up
259 part of the burden, and I volunteered.
260
261
262 @include install.texi
263 @include hier.texi
264 @include unixtex.texi
265 @include bugs.texi
266
267
268 @node Path searching
269 @chapter Path searching
270
271 @cindex path searching
272
273 This chapter describes the generic path searching mechanism Kpathsea
274 provides.  For information about searching for particular file types
275 (e.g., @TeX{} fonts), see the next chapter.
276
277 @menu
278 * Searching overview::          Basic scheme for searching.
279 * Path sources::                Where search paths can be defined.
280 * Path expansion::              Special constructs in search paths.
281 * Filename database::           Using an externally-built list to search.
282 * Invoking kpsewhich::          Standalone path lookup.
283 @end menu
284
285
286 @node Searching overview
287 @section Searching overview
288
289 @cindex searching overview
290 @cindex path searching, overview
291 @cindex overview of path searching
292
293 @cindex search path, defined
294 A @dfn{search path} is a colon-separated list of @dfn{path elements},
295 which are directory names with a few extra frills.  A search path can
296 come from (a combination of) many sources; see below.  To look up a file
297 @samp{foo} along a path @samp{.:/dir}, Kpathsea checks each element of
298 the path in turn: first @file{./foo}, then @file{/dir/foo}, returning
299 the first match (or possibly all matches).
300
301 @cindex magic characters
302 @kindex : @r{may not be :}
303 @kindex / @r{may not be /}
304 The ``colon'' and ``slash'' mentioned here aren't necessarily @samp{:}
305 and @samp{/} on non-Unix systems.  Kpathsea tries to adapt to other
306 operating systems' conventions.
307
308 @cindex database search
309 @cindex searching the database
310 To check a particular path element @var{e}, Kpathsea first sees if a
311 prebuilt database (@pxref{Filename database}) applies to @var{e}, i.e.,
312 if the database is in a directory that is a prefix of @var{e}.  If so,
313 the path specification is matched against the contents of the database.
314
315 @cindex floating directories
316 @cindex filesystem search
317 @cindex disk search
318 @cindex searching the disk
319 If the database does not exist, or does not apply to this path element,
320 or contains no matches, the filesystem is searched (if this was not
321 forbidden by the specification with @samp{!!} and if the file being
322 searched for must exist).  Kpathsea constructs the list of directories
323 that correspond to this path element, and then checks in each for the
324 file being searched for.  (To help speed future lookups of files in the
325 same directory, the directory in which a file is found is floated to the
326 top of the directory list.)
327
328 @cindex must exist
329 @cindex VF files, not found
330 @flindex cmr10.vf
331 @findex \openin
332 The ``file must exist'' condition comes into play with VF files and
333 input files read by the @TeX{} @samp{\openin} command.  These files may
334 not exist (consider @file{cmr10.vf}), and so it would be wrong to search
335 the disk for them.  Therefore, if you fail to update @file{ls-R} when
336 you install a new VF file, it will never be found.
337
338 Each path element is checked in turn: first the database, then the disk.
339 If a match is found, the search stops and the result is returned.  This
340 avoids possibly-expensive processing of path specifications that are
341 never needed on a particular run.  (Unless the search explicitly
342 requested all matches.)
343
344 @cindex expansion, path element
345 Although the simplest and most common path element is a directory name,
346 Kpathsea supports additional features in search paths: layered default
347 values, environment variable names, config file values, users' home
348 directories, and recursive subdirectory searching.  Thus, we say that
349 Kpathsea @dfn{expands} a path element, meaning transforming all the
350 magic specifications into the basic directory name or names.  This
351 process is described in the sections below.  It happens in the same
352 order as the sections.
353
354 @cindex absolute filenames
355 @cindex relative filenames
356 @cindex explicitly relative filenames
357 @cindex filenames, absolute or explicitly relative
358 Exception to all of the above: If the filename being searched for is
359 absolute or explicitly relative, i.e., starts with @samp{/} or @samp{./}
360 or @samp{../}, Kpathsea simply checks if that file exists.
361
362 @cindex permission denied
363 @cindex unreadable files
364 @cindex access warnings
365 @cindex warnings, file access
366 @flindex lost+found @r{directory}
367 @vindex TEX_HUSH
368 Ordinarily, if Kpathsea tries to access a file or directory that cannot
369 be read, it gives a warning.  This is so you will be alerted to
370 directories or files that accidentally lack read permission (for
371 example, a @file{lost+found}).  If you prefer not to see these warnings,
372 include the value @samp{readable} in the @code{TEX_HUSH} environment
373 variable or config file value.
374
375 This generic path searching algorithm is implemented in
376 @file{kpathsea/pathsearch.c}.  It is employed by a higher-level
377 algorithm when searching for a file of a particular type (@pxref{File
378 lookup}, and @ref{Glyph lookup}).
379
380
381 @node Path sources
382 @section Path sources
383
384 @cindex path sources
385 @cindex sources for search paths
386
387 A search path can come from many sources.  In the order in which
388 Kpathsea uses them:
389
390 @enumerate
391 @item
392 @cindex environment variable, source for path
393 A user-set environment variable, e.g., @code{TEXINPUTS}.
394 Environment variables with an underscore and the program name appended
395 override; for example, @code{TEXINPUTS_latex} overrides @code{TEXINPUTS}
396 if the program being run is named @samp{latex}.
397
398 @item
399 A program-specific configuration file, e.g., an @samp{S /a:/b} line in
400 Dvips' @file{config.ps} (@pxref{Config files,,, dvips, Dvips}).
401
402 @item
403 @cindex configuration file, source for path
404 @cindex Kpathsea config file, source for path
405 @flindex texmf.cnf@r{, source for path}
406 A line in a Kpathsea configuration file @file{texmf.cnf}, e.g.,
407 @samp{TEXINPUTS=/c:/d} (see below).
408
409 @item
410 @cindex compilation value, source for path
411 The compile-time default (specified in @file{kpathsea/paths.h}).
412 @end enumerate
413
414 You can see each of these values for a given search path by using the
415 debugging options (@pxref{Debugging}).
416
417 These sources may be combined via default expansion (@pxref{Default
418 expansion}).
419
420 @menu
421 * Config files::        Kpathsea's runtime config files (texmf.cnf).
422 @end menu
423
424
425 @node Config files
426 @subsection Config files
427
428 @cindex config files
429 @flindex texmf.cnf@r{, definition for}
430
431 @cindex runtime configuration files
432 @vindex TEXMFCNF
433 As mentioned above, Kpathsea reads @dfn{runtime configuration files}
434 named @file{texmf.cnf} for search path and other definitions.  The
435 search path used to look for these configuration files is named
436 @code{TEXMFCNF}, and is constructed in the usual way, as described
437 above, except that configuration files cannot be used to define the
438 path, naturally; also, an @file{ls-R} database is not used to search for
439 them.
440
441 Kpathsea reads @emph{all} @file{texmf.cnf} files in the search path, not
442 just the first one found; definitions in earlier files override those in
443 later files.  Thus, if the search path is @samp{.:$TEXMF}, values from
444 @file{./texmf.cnf} override those from @file{$TEXMF/texmf.cnf}.
445
446 @vindex KPATHSEA_WARNING
447 @cindex warning, about missing @file{texmf.cnf}
448 @cindex @file{texmf.cnf} missing, warning about
449 If Kpathsea cannot find any @file{texmf.cnf} file, it reports a
450 warning including all the directories it checked.  If you don't want
451 to see this warning, set the environment variable
452 @env{KPATHSEA_WARNING} to the single character @samp{0} (zero, not
453 oh).
454
455 While (or instead of) reading this description, you may find it helpful
456 to look at the distributed @file{texmf.cnf}, which uses or at least
457 mentions most features.  The format of @file{texmf.cnf} files follows:
458
459 @itemize @bullet
460 @item
461 @cindex comments, in @file{texmf.cnf}
462 Comments start with @samp{%} and continue to the end of the line.
463
464 @item
465 @cindex blank lines, in @file{texmf.cnf}
466 Blank lines are ignored.
467
468 @item
469 @cindex backslash-newline
470 @cindex continuation character
471 @cindex whitespace, not ignored on continuation lines
472 @kindex \@r{, line continuation in @file{texmf.cnf}}
473 A @samp{\} at the end of a line acts as a continuation character, i.e.,
474 the next line is appended.  Whitespace at the beginning of continuation
475 lines is not ignored.
476
477 @item Each remaining line must look like
478
479 @example
480 @var{variable} @r{[}. @var{progname}@r{]} @r{[}=@r{]} @var{value}
481 @end example
482
483 @noindent where the @samp{=} and surrounding whitespace is optional.
484
485 @item 
486 @cindex identifiers, characters valid in
487 The @var{variable} name may contain any character other than whitespace,
488 @samp{=}, or @samp{.}, but sticking to @samp{A-Za-z_} is safest.
489
490 @item If @samp{.@var{progname}} is present, the definition only
491 applies if the program that is running is named (i.e., the last
492 component of @code{argv[0]} is) @var{progname} or
493 @file{@var{progname}.exe}.  This allows different flavors of @TeX{} to
494 have different search paths, for example.
495
496 @item 
497 @cindex right-hand side of variable assignments
498 @var{value} may contain any characters except @samp{%} and @samp{@@}.
499 (These restrictions are only necessary because of the processing done on
500 @file{texmf.cnf} at build time, so you can stick those characters in
501 after installation if you have to.)  The @samp{$@var{var}.@var{prog}}
502 feature is not available on the right-hand side; instead, you must use
503 an additional variable (see below for example).  A @samp{;} in
504 @var{value} is translated to @samp{:} if running under Unix; this is
505 useful to write a single @file{texmf.cnf} which can be used under both
506 Unix and NT.
507
508 @item All definitions are read before anything is expanded, so you can
509 use variables before they are defined (like Make, unlike most other
510 programs).
511 @end itemize
512
513 @noindent Here is a configuration file fragment illustrating most of
514 these points:
515
516 @example
517 % TeX input files -- i.e., anything to be found by \input or \openin ...
518 latex209_inputs = .:$TEXMF/tex/latex209//:$TEXMF/tex//
519 latex2e_inputs = .:$TEXMF/tex/latex//:$TEXMF/tex//
520 TEXINPUTS = .:$TEXMF/tex//
521 TEXINPUTS.latex209 = $latex209_inputs
522 TEXINPUTS.latex2e = $latex2e_inputs
523 TEXINPUTS.latex = $latex2e_inputs
524 @end example
525
526 @cindex shell scripts as configuration files
527 @cindex configuration files as shell scripts.
528 Although this format has obvious similarities to Bourne shell
529 scripts---change the comment character to @code{#}, disallow spaces
530 around the @code{=}, and get rid of the @code{.@var{name}} convention,
531 and it could be run through the shell.  But there seemed little
532 advantage to doing this, since all the information would have to passed
533 back to Kpathsea and parsed there anyway, since the @code{sh} process
534 couldn't affect its parent's environment.
535
536 @flindex cnf.c
537 The implementation of all this is in @file{kpathsea/cnf.c}.
538
539
540 @node Path expansion
541 @section Path expansion
542
543 @cindex path expansion
544 @cindex expansion, search path
545
546 Kpathsea recognizes certain special characters and constructions in
547 search paths, similar to that in shells.  As a general example:
548 @samp{~$USER/@{foo,bar@}//baz} expands to all subdirectories under
549 directories @file{foo} and @file{bar} in @t{$USER}'s home directory that
550 contain a directory or file @file{baz}.  These expansions are explained
551 in the sections below.
552
553 @menu
554 * Default expansion::           a: or :a or a::b expands to a default.
555 * Variable expansion::          $foo and $@{foo@} expand to environment values.
556 * Tilde expansion::             ~ and ~user expand to home directories.
557 * Brace expansion::             a@{foo,bar@}b expands to afoob abarb.
558 * KPSE_DOT expansion::          . is replaced with $KPSE_DOT if it is defined.
559 * Subdirectory expansion::      a// and a//b recursively expand to subdirs.
560 @end menu
561
562
563 @node Default expansion
564 @subsection Default expansion
565
566 @kindex :: @r{expansion}
567 @cindex doubled colons
568 @cindex leading colons
569 @cindex trailing colons
570 @cindex extra colons
571 @cindex default expansion
572 @cindex expansion, default
573
574 If the highest-priority search path (@pxref{Path sources}) contains an
575 @dfn{extra colon} (i.e., leading, trailing, or doubled), Kpathsea
576 inserts at that point the next-highest-priority search path that is
577 defined.  If that inserted path has an extra colon, the same happens
578 with the next-highest.  (An extra colon in the compile-time default
579 value has unpredictable results, so installers beware.)
580
581 For example, given an environment variable setting
582
583 @example
584 setenv TEXINPUTS /home/karl:
585 @end example
586
587 @noindent and a @code{TEXINPUTS} value from @file{texmf.cnf} of
588
589 @example
590 .:$TEXMF//tex
591 @end example
592
593 @noindent then the final value used for searching will be:
594
595 @example
596 /home/karl:.:$TEXMF//tex
597 @end example
598
599 Put another way, default expansion works on ``formats'' (search
600 paths), and not directly on environment variables.  Example, showing
601 the trailing @samp{:} ignored in the first case and expanded in the second:
602
603 @example
604 $ env TTFONTS=/tmp: kpsewhich --expand-path '$TTFONTS'
605 /tmp
606 $ env TTFONTS=/tmp: kpsewhich --show-path=.ttf
607 /tmp:.:/home/olaf/texmf/fonts/truetype//:...
608 @end example
609
610 Since Kpathsea looks for multiple configuration files, it would be
611 natural to expect that (for example) an extra colon in
612 @file{./texmf.cnf} would expand to the path in @file{$TEXMF/texmf.cnf}.
613 Or, with Dvips' configuration files, that an extra colon in
614 @file{config.$PRINTER} would expand to the path in @file{config.ps}.
615 This doesn't happen.  It's not clear this would be desirable in all
616 cases, and trying to devise a way to specify the path to which the extra
617 colon should expand seemed truly baroque.
618 @cindex Bach, Johann Sebastian
619
620 Technicality: Since it would be useless to insert the default value in
621 more than one place, Kpathsea changes only one extra @samp{:} and leaves
622 any others in place (they will eventually be ignored).  Kpathsea checks
623 first for a leading @samp{:}, then a trailing @samp{:}, then a doubled
624 @samp{:}.
625
626 @flindex kdefault.c
627 You can trace this by debugging ``paths'' (@pxref{Debugging}).
628 Default expansion is implemented in the source file
629 @file{kpathsea/kdefault.c}.
630
631
632 @node Variable expansion
633 @subsection Variable expansion
634
635 @kindex $ @r{expansion}
636 @cindex environment variables in paths
637 @cindex variable expansion
638 @cindex expansion, variable
639 @flindex texmf.cnf@r{, and variable expansion}
640
641 @samp{$foo} or @samp{$@{foo@}} in a path element is replaced by (1) the
642 value of an environment variable @samp{foo} (if defined); (2) the value
643 of @samp{foo} from @file{texmf.cnf} (if defined); (3) the empty string.
644
645 If the character after the @samp{$} is alphanumeric or @samp{_}, the
646 variable name consists of all consecutive such characters. If the
647 character after the @samp{$} is a @samp{@{}, the variable name consists
648 of everything up to the next @samp{@}} (braces may not be nested around
649 variable names).  Otherwise, Kpathsea gives a warning and ignores the
650 @samp{$} and its following character.
651
652 @cindex quoting variable values
653 @cindex shell variables
654 You must quote the @t{$}'s and braces as necessary for your shell.
655 @emph{Shell} variable values cannot be seen by Kpathsea, i.e., ones
656 defined by @code{set} in C shells and without @code{export} in Bourne
657 shells.
658
659 For example, given
660 @example
661 setenv tex /home/texmf
662 setenv TEXINPUTS .:$tex:$@{tex@}prev
663 @end example
664 @noindent the final @code{TEXINPUTS} path is the three directories:
665 @example
666 .:/home/texmf:/home/texmfprev
667 @end example
668
669 The @samp{.@var{progname}} suffix on variables and
670 @samp{_@var{progname}} on environment variable names are not implemented
671 for general variable expansions.  These are only recognized when search
672 paths are initialized (@pxref{Path sources}).
673
674 @flindex variable.c
675 Variable expansion is implemented in the source file
676 @file{kpathsea/variable.c}.
677
678
679 @node Tilde expansion
680 @subsection Tilde expansion
681
682 @kindex ~ @r{expansion}
683 @cindex home directories in paths
684 @cindex tilde expansion
685 @cindex expansion, tilde
686
687 @vindex HOME@r{, as ~ expansion}
688 @vindex USERPROFILE@r{, as ~ expansion}
689 A leading @samp{~} in a path element is replaced by the value of the
690 environment variable @code{HOME}, or @file{.} if @code{HOME} is not
691 set.  On Windows, the environment variable @code{USERPROFILE} is
692 checked instead of @code{HOME}.
693
694 A leading @samp{~@var{user}} in a path element is replaced by
695 @var{user}'s home directory from the system @file{passwd} database.
696
697 For example,
698 @example
699 setenv TEXINPUTS ~/mymacros:
700 @end example
701
702 @noindent will prepend a directory @file{mymacros} in your home
703 directory to the default path.
704
705 @cindex @t{root} user
706 @cindex trailing @samp{/} in home directory
707 @kindex /@r{, trailing in home directory}
708 As a special case, if a home directory ends in @samp{/}, the trailing
709 slash is dropped, to avoid inadvertently creating a @samp{//} construct
710 in the path.  For example, if the home directory of the user @samp{root}
711 is @samp{/}, the path element @samp{~root/mymacros} expands to just
712 @samp{/mymacros}, not @samp{//mymacros}.
713
714 @flindex tilde.c
715 Tilde expansion is implemented in the source file @file{kpathsea/tilde.c}.
716
717
718 @node Brace expansion
719 @subsection Brace expansion
720
721 @kindex @{ @r{expansion}
722 @cindex brace expansion
723
724 @samp{x@{@var{a},@var{b}@}y} expands to @samp{x@var{a}y:x@var{b}y}.
725 For example:
726
727 @example
728 foo/@{1,2@}/baz
729 @end example
730
731 @noindent expands to @samp{foo/1/baz:foo/2/baz}.  @samp{:} is the path
732 separator on the current system; e.g., on a DOS system, it's @samp{;}.
733
734 Braces can be nested; for example, @samp{x@{A,B@{1,2@}@}y} expands to
735 @samp{xAy:xB1y:xB2y}.
736
737 Multiple non-nested braces are expanded from right to left; for example,
738 @samp{x@{A,B@}@{1,2@}y} expands to @samp{x@{A,B@}1y:x@{A,B@}2y}, which
739 expands to @samp{xA1y:xB1y:xA2y:xB2y}.
740
741 @cindex multiple @TeX{} hierarchies
742 This feature can be used to implement multiple @TeX{} hierarchies, by
743 assigning a brace list to @code{$TEXMF}, as mentioned in
744 @file{texmf.in}.
745
746 You can also use the path separator in stead of the comma.  The last
747 example could have been written @samp{x@{A:B@}@{1:2@}y}.
748
749
750 @flindex expand.c
751 Brace expansion is implemented in the source file
752 @file{kpathsea/expand.c}.  It is a modification of the Bash sources, and
753 is thus covered by the GNU General Public License, rather than the
754 Library General Public License that covers the rest of Kpathsea.
755
756
757 @node KPSE_DOT expansion
758 @subsection @code{KPSE_DOT} expansion
759
760 @kindex KPSE_DOT @r{expansion}
761
762 When @code{KPSE_DOT} is defined in the environment, it names a directory
763 that should be considered the current directory for the purpose of
764 looking up files in the search paths.  This feature is needed by the
765 @samp{mktex@dots{}} scripts @ref{mktex scripts}, because these
766 change the working directory.  You should not ever define it yourself.
767
768
769 @node Subdirectory expansion
770 @subsection Subdirectory expansion
771
772 @kindex //
773 @cindex subdirectory searching
774 @cindex expansion, subdirectory
775
776 @cindex alphabetical order, not
777 Two or more consecutive slashes in a path element following a directory
778 @var{d} is replaced by all subdirectories of @var{d}: first those
779 subdirectories directly under @var{d}, then the subsubdirectories under
780 those, and so on.  At each level, the order in which the directories are
781 searched is unspecified.  (It's ``directory order'', and definitely not
782 alphabetical.)
783
784 If you specify any filename components after the @samp{//}, only
785 subdirectories which match those components are included.  For example,
786 @samp{/a//b} would expand into directories @file{/a/1/b}, @file{/a/2/b},
787 @file{/a/1/1/b}, and so on, but not @file{/a/b/c} or @file{/a/1}.
788
789 You can include multiple @samp{//} constructs in the path.
790
791 @samp{//} at the beginning of a path is ignored; you didn't really want
792 to search every directory on the system, did you?
793
794 @cindex trick for detecting leaf directories
795 @cindex leaf directory trick
796 @cindex Farwell, Matthew
797 @cindex MacKenzie, David
798 I should mention one related implementation trick, which I took from GNU
799 find.  Matthew Farwell suggested it, and David MacKenzie implemented it.
800
801 @vindex st_nlink
802 The trick is that in every real Unix implementation (as opposed to the
803 POSIX specification), a directory which contains no subdirectories will
804 have exactly two links (namely, one for @file{.} and one for @file{..}).
805 That is to say, the @code{st_nlink} field in the @samp{stat} structure
806 will be two.  Thus, we don't have to stat everything in the bottom-level
807 (leaf) directories---we can just check @code{st_nlink}, notice it's two,
808 and do no more work.
809
810 But if you have a directory that contains a single subdirectory and 500
811 regular files, @code{st_nlink} will be 3, and Kpathsea has to stat every
812 one of those 501 entries.  Therein lies slowness.
813
814 @vindex UNIX_ST_LINK
815 You can disable the trick by undefining @code{UNIX_ST_LINK} in
816 @file{kpathsea/config.h}. (It is undefined by default except under Unix.)
817
818 @flindex elt-dirs.c
819 Unfortunately, in some cases files in leaf directories are
820 @code{stat}'d: if the path specification is, say,
821 @samp{$TEXMF/fonts//pk//}, then files in a subdirectory
822 @samp{@dots{}/pk}, even if it is a leaf, are checked. The reason cannot
823 be explained without reference to the implementation, so read
824 @file{kpathsea/elt-dirs.c} (search for @samp{may descend}) if you are
825 curious.  And if you can find a way to @emph{solve} the problem, please
826 let me know.
827
828 @flindex elt-dirs.c
829 Subdirectory expansion is implemented in the source file
830 @file{kpathsea/elt-dirs.c}.
831
832
833 @node Filename database
834 @section Filename database (@code{ls-R})
835
836 @cindex filename database
837 @cindex database, for filenames
838 @cindex externally-built filename database
839
840 Kpathsea goes to some lengths to minimize disk accesses for searches
841 (@pxref{Subdirectory expansion}).  Nevertheless, at installations with
842 enough directories, searching each possible directory for a given file
843 can take an excessively long time (depending on the speed of the disk,
844 whether it's NFS-mounted, how patient you are, etc.).
845
846 In practice, a font tree containing the standard PostScript and PCL
847 fonts is large enough for searching to be noticeably slow on typical
848 systems these days.  Therefore, Kpathsea can use an externally-built
849 ``database'' file named @file{ls-R} that maps files to directories, thus
850 avoiding the need to exhaustively search the disk.
851
852 A second database file @file{aliases} allows you to give additional
853 names to the files listed in @file{ls-R}.  This can be helpful to adapt
854 to ``8.3'' filename conventions in source files.
855
856 The @file{ls-R} and @file{aliases} features are implemented in the
857 source file @file{kpathsea/db.c}.
858
859 @menu
860 * ls-R::                        The main filename database.
861 * Filename aliases::            Aliases for those names.
862 * Database format::             Syntax details of the database file.
863 @end menu
864
865
866 @node ls-R
867 @subsection @file{ls-R}
868
869 @flindex ls-R @r{database file}
870 @vindex TEXMFDBS
871
872 As mentioned above, you must name the main filename database
873 @file{ls-R}.  You can put one at the root of each @TeX{} installation
874 hierarchy you wish to search (@code{$TEXMF} by default); most sites have
875 only one hierarchy.  Kpathsea looks for @file{ls-R} files along the
876 @code{TEXMFDBS} path, so that should presumably match the list of
877 hierarchies.
878
879 The recommended way to create and maintain @samp{ls-R} is to run the
880 @code{mktexlsr} script, which is installed in @samp{$(bindir)}
881 (@file{/usr/local/bin} by default).  That script goes to some trouble to
882 follow symbolic links as necessary, etc.  It's also invoked by the
883 distributed @samp{mktex@dots{}} scripts.
884
885 @flindex ls-R@r{, simplest build}
886 At its simplest, though, you can build @file{ls-R} with the command
887 @example
888 cd @var{/your/texmf/root} && ls -LAR ./ >ls-R
889 @end example
890
891 @noindent
892 @opindex --color=tty
893 @flindex /etc/profile @r{and aliases}
894 presuming your @code{ls} produces the right output format (see the
895 section below).  GNU @code{ls}, for example, outputs in this format.
896 Also presuming your @code{ls} hasn't been aliased in a system file
897 (e.g., @file{/etc/profile}) to something problematic, e.g., @samp{ls
898 --color=tty}.  In that case, you will have to disable the alias before
899 generating @file{ls-R}.  For the precise definition of the file format,
900 see @ref{Database format}.
901
902 Regardless of whether you use the supplied script or your own, you will
903 almost certainly want to invoke it via @code{cron}, so when you make
904 changes in the installed files (say if you install a new La@TeX{}
905 package), @file{ls-R} will be automatically updated.
906
907 @opindex -A @r{option to @code{ls}}
908 @cindex dot files
909 @flindex . @r{files}
910 @flindex . @r{directories, ignored}
911 @flindex .tex @r{file, included in @file{ls-R}}
912 The @samp{-A} option to @code{ls} includes files beginning with @samp{.}
913 (except for @file{.} and @file{..}), such as the file @file{.tex}
914 included with the La@TeX{} tools package.  (On the other hand,
915 @emph{directories} whose names begin with @samp{.} are always ignored.)
916
917 @cindex symbolic links, and @file{ls-R}
918 @opindex -L @r{option to @code{ls}}
919 If your system does not support symbolic links, omit the @samp{-L}.
920
921 @cindex automounter, and @file{ls-R}
922 @cindex NFS and @file{ls-R}
923 @code{ls -LAR @var{/your/texmf/root}} will also work.  But using
924 @samp{./} avoids embedding absolute pathnames, so the hierarchy can be
925 easily transported.  It also avoids possible trouble with automounters
926 or other network filesystem conventions.
927
928 @cindex warning about unusable @file{ls-R}
929 @cindex unusable @file{ls-R} warning
930 Kpathsea warns you if it finds an @file{ls-R} file, but the file does
931 not contain any usable entries.  The usual culprit is running plain
932 @samp{ls -R} instead of @samp{ls -LR ./} or @samp{ls -R
933 @var{/your/texmf/root}}.  Another possibility is some system directory
934 name starting with a @samp{.} (perhaps if you are using AFS); Kpathsea
935 ignores everything under such directories.
936
937 @kindex !! @r{in path specifications}
938 @cindex disk searching, avoiding
939 Because the database may be out-of-date for a particular run, if a file
940 is not found in the database, by default Kpathsea goes ahead and
941 searches the disk. If a particular path element begins with @samp{!!},
942 however, @emph{only} the database will be searched for that element,
943 never the disk.  If the database does not exist, nothing will be
944 searched.  Because this can surprise users (``I see the font
945 @file{foo.tfm} when I do an @code{ls}; why can't Dvips find it?''), it
946 is not in any of the default search paths.
947
948
949 @node Filename aliases
950 @subsection Filename aliases
951
952 @cindex filename aliases
953 @cindex aliases, for filenames
954
955 In some circumstances, you may wish to find a file under several names.
956 For example, suppose a @TeX{} document was created using a DOS system
957 and tries to read @file{longtabl.sty}.  But now it's being run on a Unix
958 system, and the file has its original name, @file{longtable.sty}.  The
959 file won't be found.  You need to give the actual file
960 @file{longtable.sty} an alias @samp{longtabl.sty}.
961
962 @c As another example, suppose you are creating a @TeX{} distribution on a
963 @c CD-ROM or a DOS system; then the file @file{mf.base} gets stored as
964 @c @file{mf.bas}.  But Metafont on Unix wants to find @file{mf.base}.  Here
965 @c you need to give the actual file @file{mf.bas} an alias @samp{mf.base}.
966
967 You can handle this by creating a file @file{aliases} as a companion to
968 the @file{ls-R} for the hierarchy containing the file in question.  (You
969 must have an @file{ls-R} for the alias feature to work.)
970
971 The format of @file{aliases} is simple: two whitespace-separated words
972 per line; the first is the real name @file{longtable.sty}, and second is
973 the alias (@file{longtabl.sty}).  These must be base filenames, with no
974 directory components.  @file{longtable.sty} must be in the sibling
975 @file{ls-R}.
976
977 Also, blank lines and lines starting with @samp{%} or @samp{#} are
978 ignored in @file{aliases}, to allow for comments.
979
980 If a real file @file{longtabl.sty} exists, it is used regardless of any
981 aliases.
982
983
984 @node Database format
985 @subsection Database format
986
987 @cindex format of external database
988 @cindex database, format of
989
990 The ``database'' read by Kpathsea is a line-oriented file of plain
991 text. The format is that generated by GNU (and most other) @code{ls}
992 programs given the @samp{-R} option, as follows.
993
994 @itemize @bullet
995 @item
996 Blank lines are ignored.
997
998 @item
999 If a line begins with @samp{/} or @samp{./} or @samp{../} and ends with
1000 a colon, it's the name of a directory.  (@samp{../} lines aren't useful,
1001 however, and should not be generated.)
1002
1003 @item
1004 All other lines define entries in the most recently seen directory.
1005 @t{/}'s in such lines will produce possibly-strange results.
1006
1007 @item
1008 Files with no preceding directory line are ignored.
1009 @end itemize
1010
1011 For example, here's the first few lines of @file{ls-R} (which totals
1012 about 30K bytes) on my system:
1013
1014 @example
1015 bibtex
1016 dvips
1017 fonts
1018 ls-R
1019 metafont
1020 metapost
1021 tex
1022 web2c
1023
1024 ./bibtex:
1025 bib
1026 bst
1027 doc
1028
1029 ./bibtex/bib:
1030 asi.bib
1031 btxdoc.bib
1032 @dots{}
1033 @end example
1034
1035
1036 @node Invoking kpsewhich
1037 @section @code{kpsewhich}: Standalone path searching
1038
1039 @pindex kpsewhich
1040 @cindex path searching, standalone
1041 @cindex standalone path searching
1042
1043 The Kpsewhich program exercises the path searching functionality
1044 independent of any particular application.  This can also be useful as a
1045 sort of @code{find} program to locate files in your @TeX{} hierarchies,
1046 perhaps in administrative scripts.  It is used heavily in the
1047 distributed @samp{mktex@dots{}} scripts.
1048
1049 Synopsis:
1050 @example
1051 kpsewhich @var{option}@dots{} @var{filename}@dots{}
1052 @end example
1053
1054 The options and filename(s) to look up can be intermixed.
1055 Options can start with either @samp{-} or @samp{--}, and any unambiguous
1056 abbreviation is accepted.
1057
1058 @menu
1059 * Path searching options::      Changing the mode, resolution, etc.
1060 * Auxiliary tasks::             Path and variable expansion.
1061 * Standard options::            --help and --version.
1062 @end menu
1063
1064
1065 @node Path searching options
1066 @subsection Path searching options
1067
1068 @cindex path searching options
1069
1070 Kpsewhich looks up each non-option argument on the command line as a
1071 filename, and returns the first file found.
1072
1073 Various options alter the path searching behavior:
1074
1075 @table @samp
1076 @item --all
1077 @opindex --all
1078 @cindex all matches, finding
1079 Report all matches found, one per line.  By default, if there is more
1080 than one match, just one will be reported (chosen effectively at random).
1081
1082 @item --dpi=@var{num}
1083 @opindex --dpi=@var{num}
1084 @opindex -D @var{num}
1085 @cindex resolution, setting
1086 Set the resolution to @var{num}; this only affects @samp{gf} and
1087 @samp{pk} lookups.  @samp{-D} is a synonym, for compatibility with
1088 Dvips.  Default is 600.
1089
1090 @item --engine=@var{name}
1091 @opindex --engine=@var{name}
1092 @cindex engine name
1093 Set the engine name to @var{name}.  By default it is not set.  The
1094 engine name is used in some search paths to allow files with the same
1095 name but used by different engines to coexist.
1096
1097 @item --format=@var{name}
1098 @opindex --format=@var{name}
1099 Set the format for lookup to @var{name}.  By default, the format is
1100 guessed from the filename, with @samp{tex} being used if nothing else
1101 fits.  The recognized filename extensions (including any leading
1102 @samp{.}) are also allowable @var{name}s.
1103
1104 All formats also have a name, which is the only way to specify formats
1105 with no associated suffix.  For example, for Dvips configuration files
1106 you can use @samp{--format="dvips config"}.  (The quotes are for the
1107 sake of the shell.)
1108
1109 @flindex config.ps
1110 @flindex pdftex.cfg
1111 @flindex pdftexconfig.tex
1112 When the filename being searched for is @file{config.ps}, the format
1113 is automatically switched to @samp{dvips config}.  Similarly, when the
1114 filename is @file{pdftex.cfg}, the format is switched to @samp{pdftex
1115 config} (although @file{pdftex.cfg} is not used any more; look for
1116 @file{pdftexconfig.tex} instead.)
1117
1118 Here's the current list of recognized names and the associated suffixes.
1119 @xref{Supported file formats}, for more information on each of these.
1120 @example
1121 gf: gf
1122 pk: pk
1123 bitmap font
1124 afm: .afm
1125 base: .base
1126 bib: .bib
1127 bst: .bst
1128 cnf: .cnf
1129 ls-R: ls-R
1130 fmt: .fmt
1131 map: .map
1132 mem: .mem
1133 mf: .mf
1134 mfpool: .pool
1135 mft: .mft
1136 mp: .mp
1137 mppool: .pool
1138 MetaPost support
1139 ocp: .ocp
1140 ofm: .ofm .tfm
1141 opl: .opl
1142 otp: .otp
1143 ovf: .ovf
1144 ovp: .ovp
1145 graphic/figure: .eps .epsi
1146 tex: .tex
1147 TeX system documentation
1148 texpool: .pool
1149 TeX system sources
1150 PostScript header/font: .pro
1151 Troff fonts
1152 tfm: .tfm
1153 type1 fonts: .pfa .pfb
1154 vf: .vf
1155 dvips config
1156 ist: .ist
1157 truetype fonts: .ttf .ttc
1158 type42 fonts
1159 web2c files
1160 other text files
1161 other binary files
1162 misc fonts
1163 web: .web
1164 cweb: .w .web
1165 enc: .enc
1166 cmap: .cmap
1167 sfd: .sfd
1168 opentype fonts
1169 pdftex config
1170 lig files: .lig
1171 texmfscripts
1172 @end example
1173
1174 This option and @samp{--path} are mutually exclusive.
1175
1176 @item --interactive
1177 @opindex --interactive
1178 @cindex interactive query
1179 After processing the command line, read additional filenames to look up
1180 from standard input.
1181
1182 @item -mktex=@var{filetype}
1183 @itemx -no-mktex=@var{filetype}
1184 @opindex -mktex=@var{filetype}
1185 @opindex -no-mktex=@var{filetype}
1186 Turn on or off the @samp{mktex} script associated with @var{filetype}.
1187 The only values that make sense for @var{filetype} are @samp{pk},
1188 @samp{mf}, @samp{tex}, and @samp{tfm}. By default, all are off in
1189 Kpsewhich.  @xref{mktex scripts}.
1190
1191 @item --mode=@var{string}
1192 @opindex --mode=@var{string}
1193 Set the mode name to @var{string}; this also only affects @samp{gf} and
1194 @samp{pk} lookups.  No default: any mode will be found.  @xref{mktex
1195 script arguments}.
1196
1197 @item --must-exist
1198 @opindex --must-exist
1199 Do everything possible to find the files, notably including searching
1200 the disk.  By default, only the @file{ls-R} database is checked, in the
1201 interest of efficiency.
1202
1203 @item --path=@var{string}
1204 @opindex --path=@var{string}
1205 Search along the path @var{string} (colon-separated as usual), instead
1206 of guessing the search path from the filename.  @samp{//} and all the
1207 usual expansions are supported (@pxref{Path expansion}).  This option
1208 and @samp{--format} are mutually exclusive.  To output the complete
1209 directory expansion of a path, instead of doing a one-shot lookup, see
1210 @samp{--expand-path} and @samp{--show-path} in the following section.
1211
1212 @item --progname=@var{name}
1213 @opindex --progname=@var{name}
1214 Set the program name to @var{name}; default is @samp{kpsewhich}.  This
1215 can affect the search paths via the @samp{.@var{prognam}} feature in
1216 configuration files (@pxref{Config files}).
1217
1218 @item --subdir=@var{string}
1219 @opindex --subdir=@var{string}
1220 Report only those matches whose directory part @emph{ends} with
1221 @var{string} (compared literally, except case is ignored on a
1222 case-insensitive operating system).  For example, suppose there are
1223 two matches for a given name:
1224
1225 @example
1226 kpsewhich foo.sty
1227 @result{} /some/where/foo.sty
1228 /another/place/foo.sty
1229 @end example
1230
1231 @noindent
1232 Then we can narrow the result to what we are interested in with
1233 @option{--subdir}:
1234
1235 @example
1236 kpsewhich --subdir=where foo.sty
1237 @result{} /some/where/foo.sty
1238
1239 kpsewhich --subdir=place foo.sty
1240 @result{} /another/place/foo.sty
1241 @end example
1242
1243 @noindent
1244 The string to match must be at the end of the directory part of the
1245 match, and it is taken literally, with no pattern matching:
1246
1247 @example
1248 kpsewhich --subdir=another foo.sty
1249 @result{}
1250 @end example
1251
1252 @noindent
1253 The string to match may cross directory components:
1254
1255 @example
1256 kpsewhich --subdir=some/where foo.sty
1257 @result{} /some/where/foo.sty
1258 @end example
1259
1260 @noindent
1261 @option{--subdir} implies @option{--all}; if there is more than one
1262 match, they will all be reported (in our example, both @samp{where}
1263 and @samp{place} end in @samp{e}):
1264
1265 @example
1266 kpsewhich --subdir=e
1267 @result{} /some/where/foo.sty
1268 /another/place/foo.sty
1269 @end example
1270
1271 @noindent
1272 Because of the above rules, the presence of a leading @samp{/} is
1273 important, since it ``anchors'' the match to a full component name:
1274
1275 @example
1276 kpsewhich --subdir=/lace foo.sty
1277 @result{} 
1278 @end example
1279
1280 @noindent
1281 However, a trailing @samp{/} is immaterial (and ignored), since the
1282 match always takes place at the end of the directory part:
1283
1284 @example
1285 kpsewhich --subdir=lace/ foo.sty
1286 @result{} /another/place/foo.sty
1287 @end example
1288
1289 @noindent
1290 The purpose of these rules is to make it convenient to find results
1291 only within a particular area of the tree.  For instance, a given
1292 script named @file{foo.lua} might exist within both
1293 @file{texmf-dist/scripts/pkg1/} and @file{texmf-dist/scripts/pkg2/}.
1294 By specifying, say, @samp{--subdir=/pkg1}, you can be sure of getting
1295 the one you are interested in.
1296
1297 We only match at the end because a site might happen to install @TeX{}
1298 in @file{/some/coincidental/pkg1/path/}, and we wouldn't want
1299 @file{texmf-dist/scripts/pkg2/} to match that when searching for
1300 @samp{/pkg1}.
1301
1302 @end table
1303
1304
1305 @node Auxiliary tasks
1306 @subsection Auxiliary tasks
1307
1308 @cindex auxiliary tasks
1309
1310 Kpsewhich provides some additional features not strictly related to path
1311 lookup:
1312
1313 @itemize @bullet
1314 @item
1315 @opindex --debug=@var{num}
1316 @samp{--debug=@var{num}} sets the debugging options to @var{num}.
1317 @xref{Debugging}.
1318
1319 @item
1320 @opindex --var-value=@var{variable}
1321 @samp{--var-value=@var{variable}} outputs the value of @var{variable},
1322 expanding @samp{$} (@pxref{Variable expansion} and @samp{~} (@pxref{Tilde
1323 expansion}) constructs, but not performing other expansions.
1324
1325 @item
1326 @opindex --expand-braces=@var{string}
1327 @samp{--expand-braces=@var{string}} outputs the variable and brace
1328 expansion of @var{string}.  @xref{Path expansion}.
1329
1330 @item
1331 @opindex --expand-var=@var{string}
1332 @samp{--expand-var=@var{string}} outputs the variable and tilde
1333 expansion of @var{string}.  For example, the @samp{mktex@dots{}}
1334 scripts run @samp{kpsewhich --expand-var='$TEXMF'} to find the root of
1335 the @TeX{} system hierarchy.  @xref{Path expansion}.
1336
1337 @item
1338 @opindex --expand-path=@var{string}
1339 @samp{--expand-path=@var{string}} outputs the complete expansion of
1340 @var{string}, with each element separated by the usual path separator
1341 on the current system (@samp{;} on Windows, @samp{:} otherwise).
1342 This may be useful to construct a custom search path for a format not
1343 otherwise supported.  To retrieve the search path for a format that is
1344 already supported, see @samp{--show-path}, next.
1345
1346 Nonexistent directories are culled from the output:
1347
1348 @example
1349 $ kpsewhich --expand-path '/tmp'
1350 @result{} /tmp
1351 $ kpsewhich --expand-path '/nonesuch'
1352 @result{}
1353 @end example
1354
1355 For one-shot uses of an arbitrary (not built in to Kpathsea) path, see
1356 @samp{--path} in the previous section.
1357
1358 @item
1359 @opindex --show-path=@var{name}
1360 @samp{--show-path=@var{name}} shows the path that would be used for file
1361 lookups of file type @var{name}.  Either a filename extension
1362 (@samp{pk}, @samp{.vf}, etc.) or an integer can be used, just as with
1363 @samp{--format}, described in the previous section.
1364
1365 @end itemize
1366
1367
1368 @node Standard options
1369 @subsection Standard options
1370
1371 @cindex standard options
1372
1373 Kpsewhich accepts the standard GNU options:
1374
1375 @itemize @bullet
1376 @item
1377 @opindex --help
1378 @samp{--help} prints a help message on standard output and exits.
1379
1380 @item
1381 @opindex --version
1382 @samp{--version} prints the Kpathsea version number and exits.
1383 @end itemize
1384
1385
1386 @node TeX support
1387 @chapter @TeX{} support
1388
1389 @cindex @TeX{} support
1390
1391 Although the basic features in Kpathsea can be used for any type of path
1392 searching, it came about (like all libraries) with a specific
1393 application in mind: I wrote Kpathsea specifically for @TeX{} system
1394 programs.  I had been struggling with the programs I was using (Dvips,
1395 Xdvi, and @TeX{} itself) having slightly different notions of how to
1396 specify paths; and debugging was painful, since no code was shared.
1397
1398 Therefore, Kpathsea provides some @TeX{}-specific formats and features.
1399 Indeed, many of the supposedly generic path searching features were
1400 provided because they seemed useful in that con@TeX{}t (font lookup,
1401 particularly).
1402
1403 Kpathsea provides a standard way to search for files of any of the
1404 supported file types; glyph fonts are a bit different than all the rest.
1405 Searches are based solely on filenames, not file contents---if a GF
1406 file is named @file{cmr10.600pk}, it will be found as a PK file.
1407
1408 @menu
1409 * Supported file formats::      File types Kpathsea knows about.
1410 * File lookup::                 Searching for most kinds of files.
1411 * Glyph lookup::                Searching for bitmap fonts.
1412 * Suppressing warnings::        Avoiding warnings via TEX_HUSH.
1413 @end menu
1414
1415
1416 @node Supported file formats
1417 @section Supported file formats
1418
1419 @cindex supported file formats
1420 @cindex file formats, supported
1421
1422 @cindex environment variables for @TeX{}
1423 @cindex @TeX{} environment variables
1424
1425 Kpathsea has support for a number of file types.  Each file type has a
1426 list of environment and config file variables that are checked to define
1427 the search path, and most have a default suffix that plays a role in
1428 finding files (see the next section).  Some also define additional
1429 suffixes, and/or a program to be run to create missing files on the fly.
1430
1431 @cindex program-varying paths
1432 Since environment variables containing periods, such as
1433 @samp{TEXINPUTS.latex}, are not allowed on some systems, Kpathsea looks
1434 for environment variables with an underscore, e.g.,
1435 @samp{TEXINPUTS_latex} (@pxref{Config files}).
1436
1437 The following table lists the above information.
1438
1439 @table @samp
1440 @item afm
1441 @flindex .afm
1442 @vindex AFMFONTS
1443 (Adobe font metrics, @pxref{Metric files,,, dvips, Dvips})
1444 @code{AFMFONTS};
1445 suffix @samp{.afm}.
1446
1447 @item base
1448 @flindex .base
1449 @vindex MFBASES
1450 @vindex TEXMFINI
1451 (Metafont memory dump, @pxref{Memory dumps,,, web2c, Web2c})
1452 @code{MFBASES}, @code{TEXMFINI};
1453 suffix @samp{.base}.
1454
1455 @item bib
1456 @flindex .bib
1457 @vindex BIBINPUTS
1458 @vindex TEXBIB
1459 (Bib@TeX{} bibliography source, @pxref{bibtex invocation,,, web2c, Web2c})
1460 @code{BIBINPUTS}, @code{TEXBIB};
1461 suffix @samp{.bib}.
1462
1463 @item bst
1464 @flindex .bst
1465 @vindex BSTINPUTS
1466 (Bib@TeX{} style file, @pxref{Basic BibTeX style files,, Basic Bib@TeX{}
1467 style files, web2c, Web2c})
1468 @code{BSTINPUTS};
1469 suffix @samp{.bst}.
1470
1471 @item cmap
1472 @flindex .cmap
1473 @vindex CMAPFONTS
1474 (character map files)
1475 @code{CMAPFONTS};
1476 suffix @samp{.cmap}.
1477
1478 @item cnf
1479 @flindex .cnf
1480 @vindex TEXMFCNF
1481 (Runtime configuration files, @pxref{Config files})
1482 @code{TEXMFCNF};
1483 suffix @samp{.cnf}.
1484
1485 @item cweb
1486 @flindex .w
1487 @flindex .web
1488 @vindex CWEBINPUTS
1489 (CWEB input files)
1490 @code{CWEBINPUTS};
1491 suffixes @samp{.w}, @samp{.web};
1492 additional suffix @samp{.ch}.
1493
1494 @item dvips config
1495 @vindex TEXCONFIG
1496 @flindex config.ps@r{, search path for}
1497 (Dvips @samp{config.*} files, such as @file{config.ps}, @pxref{Config
1498 files,,, dvips, Dvips})
1499 @code{TEXCONFIG}.
1500
1501 @item enc files
1502 @flindex .enc
1503 @vindex ENCFONTS
1504 (encoding vectors)
1505 @code{ENCFONTS};
1506 suffix @samp{.enc}.
1507
1508 @item fmt
1509 @flindex .fmt
1510 @vindex TEXFORMATS
1511 @vindex TEXMFINI
1512 (@TeX{} memory dump, @pxref{Memory dumps,,, web2c, Web2c})
1513 @code{TEXFORMATS}, @code{TEXMFINI};
1514 suffix @samp{.fmt}.
1515
1516 @item gf
1517 @flindex gf
1518 @vindex GFFONTS
1519 @vindex GLYPHFONTS
1520 @vindex TEXFONTS
1521 (generic font bitmap, @pxref{Glyph files,,, dvips, Dvips})
1522 @code{@var{program}FONTS}, @code{GFFONTS}, @code{GLYPHFONTS}, @code{TEXFONTS};
1523 suffix @samp{gf}.
1524
1525 @item graphic/figure
1526 @flindex .eps
1527 @flindex .epsi
1528 @vindex TEXPICTS
1529 @vindex TEXINPUTS
1530 (Encapsulated PostScript figures, @pxref{PostScript figures,,, dvips, Dvips})
1531 @code{TEXPICTS}, @code{TEXINPUTS};
1532 additional suffixes: @samp{.eps}, @samp{.epsi}.
1533
1534 @item ist
1535 @flindex .ist
1536 @vindex TEXINDEXSTYLE
1537 @vindex INDEXSTYLE
1538 (makeindex style files)
1539 @code{TEXINDEXSTYLE}, @code{INDEXSTYLE};
1540 suffix @samp{.ist}.
1541
1542 @item lig files
1543 @flindex .lig
1544 @vindex LIGFONTS
1545 (ligature definition files)
1546 @code{LIGFONTS};
1547 suffix @samp{.lig}.
1548
1549 @item ls-R
1550 @flindex ls-R
1551 @vindex TEXMFDBS
1552 (Filename databases, @pxref{Filename database})
1553 @code{TEXMFDBS}.
1554
1555 @item map
1556 @flindex .map
1557 @vindex TEXFONTMAPS
1558 (Fontmaps, @pxref{Fontmap})
1559 @code{TEXFONTMAPS};
1560 suffix @samp{.map}.
1561
1562 @item mem
1563 @flindex .mem
1564 @vindex MPMEMS
1565 @vindex TEXMFINI
1566 (MetaPost memory dump, @pxref{Memory dumps,,, web2c, Web2c})
1567 @code{MPMEMS}, @code{TEXMFINI};
1568 suffix @samp{.mem}.
1569
1570 @item @r{MetaPost support}
1571 @vindex MPSUPPORT
1572 (MetaPost support files, used by DMP; @pxref{dmp invocation,,, web2c, Web2c}) 
1573 @code{MPSUPPORT}.
1574
1575 @item mf
1576 @flindex .mf
1577 @vindex MFINPUTS
1578 (Metafont source, @pxref{mf invocation,,, web2c, Web2c})
1579 @code{MFINPUTS};
1580 suffix @samp{.mf};
1581 dynamic creation program: @code{mktexmf}.
1582
1583 @item mfpool
1584 @flindex .pool
1585 @vindex MFPOOL
1586 (Metafont program strings, @pxref{pooltype invocation,,, web2c, Web2c})
1587 @code{MFPOOL}, @code{TEXMFINI};
1588 suffix @samp{.pool}.
1589
1590 @item mft
1591 @flindex .mft
1592 @vindex MFTINPUTS
1593 (@code{MFT} style file, @pxref{mft invocation,,, web2c, Web2c})
1594 @code{MFTINPUTS};
1595 suffix @samp{.mft}.
1596
1597 @item misc fonts
1598 @vindex MISCFONTS
1599 (font-related files that don't fit the other categories)
1600 @code{MISCFONTS}
1601
1602 @item mp
1603 @flindex .mp
1604 @vindex MPINPUTS
1605 (MetaPost source, @pxref{mpost invocation,,, web2c, Web2c})
1606 @code{MPINPUTS};
1607 suffix @samp{.mp}.
1608
1609 @item mppool
1610 @flindex .pool
1611 @vindex MPPOOL
1612 (MetaPost program strings, @pxref{pooltype invocation,,, web2c, Web2c})
1613 @code{MPPOOL}, @code{TEXMFINI};
1614 suffix @samp{.pool}.
1615
1616 @item ocp
1617 @flindex .ocp
1618 @vindex OCPINPUTS
1619 (Omega compiled process files)
1620 @code{OCPINPUTS}; @*
1621 suffix @samp{.ocp};
1622 dynamic creation program: @code{MakeOmegaOCP}.
1623
1624 @item ofm
1625 @flindex .ofm
1626 @vindex OFMFONTS
1627 (Omega font metrics)
1628 @code{OFMFONTS}, @code{TEXFONTS}; @*
1629 suffixes @samp{.ofm}, @samp{.tfm};
1630 dynamic creation program: @code{MakeOmegaOFM}.
1631
1632 @item opentype fonts
1633 @vindex OPENTYPEFONTS
1634 (OpenType fonts)
1635 @code{OPENTYPEFONTS}.
1636
1637 @item opl
1638 @flindex .opl
1639 (Omega property lists)
1640 @code{OPLFONTS}, @code{TEXFONTS};
1641 suffix @samp{.opl}.
1642
1643 @item otp
1644 @flindex .otp
1645 @vindex OTPINPUTS
1646 (Omega translation process files)
1647 @code{OTPINPUTS};
1648 suffix @samp{.otp}.
1649
1650 @item ovf
1651 @flindex .ovf
1652 @vindex OVFFONTS
1653 (Omega virtual fonts)
1654 @code{OVFFONTS}, @code{TEXFONTS};
1655 suffix @samp{.ovf}.
1656
1657 @item ovp
1658 @flindex .ovp
1659 @vindex OVPFONTS
1660 (Omega virtual property lists)
1661 @code{OVPFONTS}, @code{TEXFONTS};
1662 suffix @samp{.ovp}.
1663
1664 @item pdftex config
1665 @vindex PDFTEXCONFIG
1666 (PDF@TeX{}-specific configuration files)
1667 @code{PDFTEXCONFIG}.
1668
1669 @item pk
1670 @flindex .pk
1671 @vindex PKFONTS
1672 @vindex TEXPKS
1673 @vindex GLYPHFONTS
1674 @vindex TEXFONTS
1675 (packed bitmap fonts, @pxref{Glyph files,,, dvips, Dvips})
1676 @code{@var{PROGRAM}FONTS} (@var{program} being @samp{XDVI}, etc.),
1677 @code{PKFONTS}, @code{TEXPKS}, @code{GLYPHFONTS}, @code{TEXFONTS};
1678 suffix @samp{pk};
1679 dynamic creation program: @code{mktexpk}.
1680
1681 @item PostScript header
1682 @flindex .pro
1683 @vindex TEXPSHEADERS
1684 @vindex PSHEADERS
1685 (downloadable PostScript, @pxref{Header files,,, dvips, Dvips})
1686 @code{TEXPSHEADERS}, @code{PSHEADERS};
1687 additional suffix @samp{.pro}.
1688
1689 @item subfont definition files
1690 @flindex .sfd
1691 @vindex SFDFONTS
1692 (subfont definition files)
1693 @code{SFDFONTS}
1694 suffix @samp{.sfd}.
1695
1696 @item tex
1697 @flindex .tex
1698 @vindex TEXINPUTS
1699 (@TeX{} source, @pxref{tex invocation,,, web2c, Web2c})
1700 @code{TEXINPUTS};
1701 suffix @samp{.tex};
1702 additional suffixes: none, because such a list cannot be complete;
1703 dynamic creation program: @code{mktextex}.
1704
1705 @item TeX system documentation
1706 @flindex doc files
1707 @vindex TEXDOCS
1708 (Documentation files for the @TeX{} system)
1709 @code{TEXDOCS}.
1710
1711 @item TeX system sources
1712 @flindex source files
1713 @vindex TEXSOURCES
1714 (Source files for the @TeX{} system)
1715 @code{TEXSOURCES}.
1716
1717 @item texmfscripts
1718 @vindex TEXMFSCRIPTS
1719 (Architecture-independent executables distributed in the texmf tree)
1720 @code{TEXMFSCRIPTS}.
1721
1722 @item texpool
1723 @flindex .pool
1724 @vindex TEXPOOL
1725 (@TeX{} program strings, @pxref{pooltype invocation,,, web2c, Web2c})
1726 @code{TEXPOOL}, @code{TEXMFINI};
1727 suffix @samp{.pool}.
1728
1729 @item tfm
1730 @flindex .tfm
1731 @vindex TFMFONTS
1732 @vindex TEXFONTS
1733 (@TeX{} font metrics, @pxref{Metric files,,, dvips, Dvips})
1734 @code{TFMFONTS}, @code{TEXFONTS};
1735 suffix @samp{.tfm};
1736 dynamic creation program: @code{mktextfm}.
1737
1738 @item Troff fonts
1739 @vindex TRFONTS
1740 (Troff fonts, used by DMP; @pxref{DMP invocation,,, web2c, Web2c}) 
1741 @code{TRFONTS}.
1742
1743 @item truetype fonts
1744 @flindex .ttf
1745 @flindex .ttc
1746 @vindex TTFONTS
1747 (TrueType outline fonts) @code{TTFONTS}; suffixes @samp{.ttf},
1748 @samp{.ttc}.
1749
1750 @item type1 fonts
1751 @flindex .pfa
1752 @flindex .pfb
1753 @vindex T1FONTS
1754 @vindex T1INPUTS
1755 @vindex TEXPSHEADERS
1756 @vindex DVIPSHEADERS
1757 (Type 1 PostScript outline fonts, @pxref{Glyph files,,, dvips, Dvips})
1758 @code{T1FONTS}, @code{T1INPUTS}, @code{TEXPSHEADERS}, @code{DVIPSHEADERS};
1759 suffixes @samp{.pfa}, @samp{.pfb}.
1760
1761 @item type42 fonts
1762 @vindex T42FONTS
1763 (Type 42 PostScript outline fonts) @code{T42FONTS}.
1764
1765 @item vf
1766 @flindex .vf
1767 @vindex VFFONTS
1768 @vindex TEXFONTS
1769 (virtual fonts, @pxref{Virtual fonts,,, dvips, Dvips})
1770 @code{VFFONTS}, @code{TEXFONTS};
1771 suffix @samp{.vf}.
1772
1773 @item web
1774 @flindex .web
1775 @vindex WEBINPUTS
1776 (WEB input files)
1777 @code{WEBINPUTS};
1778 suffix @samp{.web};
1779 additional suffix @samp{.ch}.
1780
1781 @item web2c files
1782 @vindex WEB2C
1783 (files specific to the web2c implementation)
1784 @code{WEB2C}.
1785 @end table
1786
1787 There are two special cases, because the paths and environment variables
1788 always depend on the name of the program: the variable name is
1789 constructed by converting the program name to upper case, and then
1790 appending @samp{INPUTS}.  Assuming the program is called @samp{foo},
1791 this gives us the following table.
1792
1793 @table @samp
1794 @item other text files
1795 @vindex FOOINPUTS
1796 (text files used by @samp{foo})
1797 @code{FOOINPUTS}.
1798
1799 @item other binary files
1800 @vindex FOOINPUTS
1801 (binary files used by @samp{foo})
1802 @code{FOOINPUTS}.
1803 @end table
1804
1805 If an environment variable by these names are set, the corresponding
1806 @file{texmf.cnf} definition won't be looked at (unless, as usual, the
1807 environment variable value has an extra @samp{:}).  @xref{Default
1808 expansion}.
1809
1810 For the font variables, the intent is that:
1811 @itemize @bullet
1812 @item
1813 @code{TEXFONTS} is the default for everything.
1814
1815 @item
1816 @code{GLYPHFONTS} is the default for bitmap (or, more precisely,
1817 non-metric) files.
1818
1819 @item
1820 Each font format has a variable of its own.
1821
1822 @item
1823 @vindex XDVIFONTS
1824 @vindex DVIPSFONTS
1825 Each program has its own font override path as well; e.g.,
1826 @code{DVIPSFONTS} for Dvipsk.  Again, this is for bitmaps, not metrics.
1827
1828 @end itemize
1829
1830
1831 @node File lookup
1832 @section File lookup
1833
1834 @cindex file lookup
1835 @cindex searching for files
1836 @cindex @TeX{} file lookup
1837
1838 This section describes how Kpathsea searches for most files (bitmap font
1839 searches are the exception, as described in the next section).
1840
1841 Here is the search strategy for a file @var{name}:
1842 @enumerate
1843 @item
1844 If the file format defines default suffixes, and the suffix of
1845 @var{name} name is not already a known suffix for that format, try the
1846 name with each default appended, and use alternative names found in the
1847 fontmaps if necessary.  We postpone searching the disk as long as
1848 possible.  Example: given @samp{foo.sty}, look for @samp{foo.sty.tex}
1849 before @samp{foo.sty}.  This is unfortunate, but allows us to find
1850 @samp{foo.bar.tex} before @samp{foo.bar} if both exist and we were given
1851 @samp{foo.bar}.
1852
1853 @item
1854 Search for @var{name}, and if necessary for alternative names found in
1855 the fontmaps.  Again we avoid searching the disk if possible.  Example:
1856 given @samp{foo}, we look for @samp{foo}.
1857
1858 @item
1859 If the file format defines a program to invoke to create missing files,
1860 run it (@pxref{mktex scripts}).
1861 @end enumerate
1862
1863 @flindex tex-file.c
1864 @findex kpse_find_file
1865 This is implemented in the routine @code{kpse_find_file} in
1866 @file{kpathsea/tex-file.c}.  You can watch it in action with the
1867 debugging options (@pxref{Debugging}).
1868
1869
1870 @node Glyph lookup
1871 @section Glyph lookup
1872
1873 @cindex glyph lookup
1874 @cindex searching for glyphs
1875 @cindex @TeX{} glyph lookup
1876
1877 This section describes how Kpathsea searches for a bitmap font in GF or
1878 PK format (or either) given a font name (e.g., @samp{cmr10}) and a
1879 resolution (e.g., 600).
1880
1881 Here is an outline of the search strategy (details in the sections
1882 below) for a file @var{name} at resolution @var{dpi}.  The search stops
1883 at the first successful lookup.
1884
1885 @enumerate
1886 @item
1887 Look for an existing file @var{name}.@var{dpi}@var{format} in the
1888 specified format(s).
1889
1890 @item If @var{name} is an alias for a file @var{f} in the fontmap
1891 file @file{texfonts.map}, look for @var{f}.@var{dpi}.
1892
1893 @item Run an external program (typically named @samp{mktexpk}) to
1894 generate the font (@pxref{mktex scripts})
1895
1896 @item Look for @var{fallback}.@var{dpi}, where @var{fallback} is some
1897 last-resort font (typically @samp{cmr10}).
1898 @end enumerate
1899
1900 @flindex tex-glyph.c
1901 @findex kpse_find_glyph_format
1902 This is implemented in @code{kpse_find_glyph_format} in
1903 @file{kpathsea/tex-glyph.c}.
1904
1905 @menu
1906 * Basic glyph lookup::          Features common to all glyph lookups.
1907 * Fontmap::                     Aliases for fonts.
1908 * Fallback font::               Resolutions and fonts of last resort.
1909 @end menu
1910
1911
1912 @node Basic glyph lookup
1913 @subsection Basic glyph lookup
1914
1915 @cindex basic glyph lookup
1916 @cindex common features in glyph lookup
1917
1918 When Kpathsea looks for a bitmap font @var{name} at resolution @var{dpi}
1919 in a format @var{format}, it first checks each directory in the search
1920 path for a file @samp{@var{name}.@var{dpi}@var{format}}; for example,
1921 @samp{cmr10.600pk}.  Kpathsea looks for a PK file first, then a GF file.
1922
1923 If that fails, Kpathsea looks for
1924 @samp{dpi@var{dpi}/@var{name}.@var{format}}; for example,
1925 @samp{dpi600/cmr10.pk}. This is how fonts are typically stored on
1926 filesystems (such as DOS) that permit only three-character extensions.
1927
1928 @cindex tolerance for glyph lookup
1929 @cindex glyph lookup bitmap tolerance
1930 @findex KPSE_BITMAP_TOLERANCE
1931 If that fails, Kpathsea looks for a font with a close-enough @var{dpi}.
1932 ``Close enough'' is defined by the macro @code{KPSE_BITMAP_TOLERANCE} in
1933 @file{kpathsea/tex-glyph.h} to be @code{@var{dpi} / 500 + 1}.  This is
1934 slightly more than the 0.2% minimum allowed by the DVI standard
1935 (@url{@var{CTAN:}/dviware/driv-standard/level-0}).
1936
1937
1938 @node Fontmap
1939 @subsection Fontmap
1940
1941 @cindex fontmap files
1942 @cindex font alias files
1943 @cindex aliases for fonts
1944
1945 @flindex texfonts.map
1946 If a bitmap font or metric file is not found with the original name (see
1947 the previous section), Kpathsea looks through any @dfn{fontmap} files
1948 for an @dfn{alias} for the original font name.  These files are named
1949 @file{texfonts.map} and searched for along the @code{TEXFONTMAPS}
1950 environment/config file variable.  All @file{texfonts.map} files that
1951 are found are read; earlier definitions override later ones.
1952
1953 This feature is intended to help in two respects:
1954
1955 @enumerate
1956
1957 @item
1958 @cindex fontnames, arbitrary length
1959 An alias name is limited in length only by available memory, not by your
1960 filesystem.  Therefore, if you want to ask for @samp{Times-Roman}
1961 instead of @file{ptmr}, you can (you get @samp{ptmr8r}).
1962
1963 @item
1964 @cindex circle fonts
1965 @flindex lcircle10
1966 A few fonts have historically had multiple names: specifically,
1967 La@TeX{}'s ``circle font'' has variously been known as @file{circle10},
1968 @file{lcircle10}, and @file{lcirc10}.  Aliases can make all the names
1969 equivalent, so that it no longer matters what the name of the installed
1970 file is; @TeX{} documents will find their favorite name.
1971
1972 @end enumerate
1973
1974 The format of fontmap files is straightforward:
1975
1976 @itemize @bullet
1977 @cindex comments, in fontmap files
1978 @item Comments start with @samp{%} and continue to the end of the line.
1979 @cindex whitespace, in fontmap files
1980 @item Blank lines are ignored.
1981 @item Each nonblank line is broken up into a series of @dfn{words}:
1982   a sequence of non-whitespace characters.
1983 @findex include @r{fontmap directive}
1984 @item If the first word is @samp{include}, the second word is used as
1985   a filename, and it is searched for and read.
1986 @item Otherwise, the first word on each line is the true filename;
1987 @item the second word is the alias;
1988 @item subsequent words are ignored.
1989 @end itemize
1990
1991 If an alias has an extension, it matches only those files with that
1992 extension; otherwise, it matches anything with the same root, regardless
1993 of extension.  For example, an alias @samp{foo.tfm} matches only when
1994 @file{foo.tfm} is being searched for; but an alias @samp{foo} matches
1995 @file{foo.vf}, @file{foo.600pk}, etc.
1996
1997 As an example, here is an excerpt from the @file{texfonts.map} in the
1998 Web2c distribution.  It makes the circle fonts equivalent and includes
1999 automatically generated maps for most PostScript fonts available from
2000 various font suppliers.
2001
2002 @example
2003 circle10        lcircle10
2004 circle10        lcirc10
2005 lcircle10       circle10
2006 lcircle10       lcirc10
2007 lcirc10         circle10
2008 lcirc10         lcircle10
2009 @dots{}
2010 include adobe.map
2011 include apple.map
2012 include bitstrea.map
2013 @dots{}
2014 @end example
2015
2016 Fontmaps are implemented in the file @file{kpathsea/fontmap.c}.
2017 The Fontname distribution has much more information on font naming
2018 (@pxref{Introduction,,, fontname, Filenames for @TeX{} fonts}).
2019
2020
2021 @node Fallback font
2022 @subsection Fallback font
2023
2024 @cindex fallback font
2025 @cindex fallback resolutions
2026 @cindex font of last resort
2027 @cindex resolutions, last-resort
2028 @cindex last-resort font
2029
2030 @vindex DVIPSSIZES
2031 @vindex XDVISIZES
2032 @vindex DVILJSIZES
2033 @vindex TEXSIZES
2034 @vindex default_texsizes
2035 If a bitmap font cannot be found or created at the requested size,
2036 Kpathsea looks for the font at a set of @dfn{fallback resolutions}.  You
2037 specify these resolutions as a colon-separated list (like search paths).
2038 Kpathsea looks first for a program-specific environment variable (e.g.,
2039 @code{DVIPSSIZES} for Dvipsk), then the environment variable
2040 @code{TEXSIZES}, then a default specified at compilation time (the Make
2041 variable @code{default_texsizes}).  You can set this list to be empty if
2042 you prefer to find fonts at their stated size or not at all.
2043
2044 @flindex cmr10@r{, as fallback font}
2045 @vindex kpse_fallback_font
2046 Finally, if the font cannot be found even at the fallback resolutions,
2047 Kpathsea looks for a fallback font, typically @file{cmr10}.  Programs
2048 must enable this feature by assigning to the global variable
2049 @code{kpse_fallback_font} or calling @code{kpse_init_prog}
2050 (@pxref{Calling sequence}); the default is no fallback font.
2051
2052
2053 @node Suppressing warnings
2054 @section Suppressing warnings
2055
2056 @cindex warnings, suppressing
2057 @cindex suppressing warnings
2058
2059 @vindex TEX_HUSH
2060 Kpathsea provides a way to suppress selected usually-harmless warnings;
2061 this is useful at large sites where most users are not administrators,
2062 and thus the warnings are merely a source of confusion, not a help.  To
2063 do this, you set the environment variable or configuration file value
2064 @code{TEX_HUSH} to a colon-separated list of values.  Here are the
2065 possibilities:
2066
2067 @vtable @samp
2068 @item all
2069 Suppress everything possible.
2070
2071 @item checksum
2072 @cindex mismatched checksum warnings
2073 Suppress mismatched font checksum warnings.
2074
2075 @item lostchar
2076 @cindex missing character warnings
2077 Suppress warnings when a character is missing from a font that a DVI or
2078 VF file tries to typeset.
2079
2080 @item none
2081 Don't suppress any warnings.
2082
2083 @item readable
2084 @cindex unreadable file warnings
2085 Suppress warnings about attempts to access a file whose permissions
2086 render it unreadable.
2087
2088 @item special
2089 @cindex unknown special warnings
2090 @findex \special@r{, suppressing warnings about}
2091 Suppresses warnings about an unimplemented or unparsable
2092 @samp{\special} command.
2093 @end vtable
2094
2095 @noindent @file{tex-hush.c} defines the function that checks the
2096 variable value.  Each driver implements its own checks where
2097 appropriate.
2098
2099
2100 @node Programming
2101 @chapter Programming
2102
2103 This chapter is for programmers who wish to use Kpathsea.
2104 @xref{Introduction}, for the conditions under which you may do so.
2105
2106 @menu
2107 * Overview: Programming overview.         Introduction.
2108 * Calling sequence::                      Specifics of what to call.
2109 * Program-specific files::                How to handle these.
2110 * Config: Programming with config files.  Getting info from texmf.cnf.
2111 @end menu
2112
2113
2114 @node Programming overview
2115 @section Programming overview
2116
2117 @cindex programming overview
2118 @cindex overview of programming with Kpathsea
2119
2120 Aside from this manual, your best source of information is the source to
2121 the programs I've modified to use Kpathsea (@pxref{Introduction}).  Of
2122 those, Dviljk is probably the simplest, and hence a good place to start.
2123 Xdvik adds VF support and the complication of X resources.  Dvipsk adds
2124 the complication of its own config files.  Web2c is source code I also
2125 maintain, so it uses Kpathsea rather straightforwardly, but is of course
2126 complicated by the Web to C translation.  Finally, Kpsewhich is a small
2127 utility program whose sole purpose is to exercise the main
2128 path-searching functionality.
2129
2130 @flindex pathsearch.h
2131 @flindex tex-file.h
2132 @flindex tex-glyph.h
2133 @flindex kpathsea.h
2134 Beyond these examples, the @file{.h} files in the Kpathsea source
2135 describe the interfaces and functionality (and of course the @file{.c}
2136 files define the actual routines, which are the ultimate documentation).
2137 @file{pathsearch.h} declares the basic searching routine.
2138 @file{tex-file.h} and @file{tex-glyph.h} define the interfaces for
2139 looking up particular kinds of files.  In view of the way the headers
2140 depend on each other, it is recommended to use @code{#include
2141 <kpathsea/kpathsea.h>}, which includes every Kpathsea header.
2142
2143 @flindex config.h
2144 @flindex c-auto.h
2145 If you want to include only specific headers, you should still consider
2146 including @file{kpathsea/config.h} before including any other Kpathsea
2147 header, as it provides symbols used in the other headers.  Note that
2148 @file{kpathsea/config.h} includes @file{kpathsea/c-auto.h}, which is
2149 generated by Autoconf.
2150
2151 @cindex file types, registering new
2152 The library provides no way for an external program to register new file
2153 types: @file{tex-file.[ch]} must be modified to do this. For example,
2154 Kpathsea has support for looking up Dvips config files, even though no
2155 program other than Dvips will likely ever want to do so.  I felt this
2156 was acceptable, since along with new file types should also come new
2157 defaults in @file{texmf.cnf} (and its descendant @file{paths.h}), since
2158 it's simplest for users if they can modify one configuration file for
2159 all kinds of paths.
2160
2161 Kpathsea does not parse any formats itself; it barely opens any files.
2162 Its primary purpose is to return filenames.  The GNU font utilities does
2163 contain libraries to read TFM, GF, and PK files, as do the programs
2164 above, of course.
2165
2166
2167 @node Calling sequence
2168 @section Calling sequence
2169
2170 @cindex programming with Kpathsea
2171 @cindex calling sequence
2172
2173 The typical way to use Kpathsea in your program goes something like this:
2174
2175 @enumerate
2176
2177 @item
2178 @findex kpse_set_program_name
2179 @vindex argv[0]
2180 Call @code{kpse_set_program_name} with @code{argv[0]} as the first
2181 argument; the second argument is a string or @code{NULL}.  The second
2182 argument is used by Kpathsea as the program name for the
2183 @code{.@var{program}} feature of config files (@pxref{Config files}).
2184 If the second argument is @code{NULL}, the value of the first argument
2185 is used.  This function must be called before any other use of the
2186 Kpathsea library.
2187
2188 @vindex program_invocation_name
2189 @vindex program_invocation_short_name
2190 @vindex kpse_program_name
2191 @vindex KPATHSEA_DEBUG
2192 @cindex SELFAUTOLOC
2193 @cindex SELFAUTODIR
2194 @cindex SELFAUTOPARENT
2195 @cindex error message macros
2196 @cindex symlinks, resolving
2197 @cindex expanding symlinks
2198 If necessary, @code{kpse_set_program_name} sets the global variables
2199 @code{program_invocation_name} and @code{program_invocation_short_name}.
2200 These variables are used in the error message macros defined in
2201 @file{kpathsea/lib.h}.  It sets the global variable
2202 @code{kpse_program_name} to the program name it uses.  It also
2203 initializes debugging options based on the environment variable
2204 @code{KPATHSEA_DEBUG} (if that is set).  Finally, it sets the variables
2205 @code{SELFAUTOLOC}, @code{SELFAUTODIR} and @code{SELFAUTOPARENT} to the
2206 location, parent and grandparent directory of the executable, removing
2207 @file{.} and @file{..} path elements and resolving symbolic links.
2208 These are used in the default configuration file to allow people to
2209 invoke TeX from anywhere, specifically from a mounted CD-ROM.  (You can
2210 use @samp{--expand-var=\$SELFAUTOLOC}, etc., to see the values finds.)
2211
2212 @item
2213 @findex kpse_set_progname
2214 @vindex argv[0]
2215 The @code{kpse_set_progname} is deprecated.  A call to
2216 @code{kpse_set_progname} with @code{argv[0]} is equivalent to a call of
2217 @code{kpse_set_program_name} with first argument @code{argv[0]} and
2218 second argument @code{NULL}.  The function is deprecated because it
2219 cannot ensure that the @code{.@var{program}} feature of config files
2220 will always work (@pxref{Config files}).
2221
2222 @item
2223 @vindex kpathsea_debug @r{variable}
2224 @cindex debugging options, in Kpathsea-using program
2225 Set debugging options. @xref{Debugging}.  If your program doesn't have a
2226 debugging option already, you can define one and set
2227 @code{kpathsea_debug} to the number that the user supplies (as in Dviljk
2228 and Web2c), or you can just omit this altogether (people can always set
2229 @code{KPATHSEA_DEBUG}).  If you do have runtime debugging already, you
2230 need to merge Kpathsea's options with yours (as in Dvipsk and Xdvik).
2231
2232 @item
2233 @vindex client_path @r{in @code{kpse_format_info}}
2234 @vindex kpse_format_info
2235 @flindex resident.c
2236 @cindex config files, for Kpathsea-using programs
2237 If your program has its own configuration files that can define search
2238 paths, you should assign those paths to the @code{client_path} member in
2239 the appropriate element of the @code{kpse_format_info} array.  (This
2240 array is indexed by file type; see @file{tex-file.h}.)  See
2241 @file{resident.c} in Dvipsk for an example.
2242
2243 @item
2244 @findex kpse_init_prog
2245 @flindex proginit.h
2246 Call @code{kpse_init_prog} (see @file{proginit.c}). It's useful for the
2247 DVI drivers, at least, but for other programs it may be simpler to
2248 extract the parts of it that actually apply.  This does not initialize
2249 any paths, it just looks for (and sets) certain environment variables
2250 and other random information.  (A search path is always initialized at
2251 the first call to find a file of that type; this eliminates much useless
2252 work, e.g., initializing the Bib@TeX{} search paths in a DVI driver.)
2253
2254 @item
2255 @findex kpse_find_*
2256 @findex kpse_find_file
2257 The routine to actually find a file of type @var{format} is
2258 @code{kpse_find_@var{format}}, defined in @file{tex-file.h}. These are
2259 macros that expand to a call to @file{kpse_find_file}.  You can call,
2260 say, @code{kpse_find_tfm} after doing only the first of the
2261 initialization steps above---Kpathsea automatically reads the
2262 @file{texmf.cnf} generic config files, looks for environment variables,
2263 and does expansions at the first lookup.
2264
2265 @item
2266 To find PK and/or GF bitmap fonts, the routines are @code{kpse_find_pk},
2267 @code{kpse_find_gf} and @code{kpse_find_glyph}, defined in
2268 @file{tex-glyph.h}. These return a structure in addition to the
2269 resultant filename, because fonts can be found in so many ways. See the
2270 documentation in the source.
2271
2272 @item
2273 @findex kpse_open_file
2274 To actually open a file, not just return a filename, call
2275 @code{kpse_open_file}.  This function takes the name to look up and a
2276 Kpathsea file format as arguments, and returns the usual @code{FILE *}.
2277 It always assumes the file must exist, and thus will search the disk if
2278 necessary (unless the search path specified @samp{!!}, etc.).  In other
2279 words, if you are looking up a VF or some other file that need not
2280 exist, don't use this.
2281
2282 @end enumerate
2283
2284 @cindex hash table routines
2285 @cindex memory allocation routines
2286 @cindex string routines
2287 @cindex reading arbitrary-length lines
2288 @cindex input lines, reading
2289 @cindex lines, reading arbitrary-length
2290 Kpathsea also provides many utility routines. Some are generic: hash
2291 tables, memory allocation, string concatenation and copying, string
2292 lists, reading input lines of arbitrary length, etc. Others are
2293 filename-related: default path, tilde, and variable expansion,
2294 @code{stat} calls, etc. (Perhaps someday I'll move the former to a
2295 separate library.)
2296
2297 @flindex c-*.h
2298 @pindex autoconf@r{, recommended}
2299 The @file{c-*.h} header files can also help your program adapt to many
2300 different systems.  You will almost certainly want to use Autoconf for
2301 configuring your software if you use Kpathsea; I strongly recommend
2302 using Autoconf regardless.  It is available from
2303 @url{ftp://prep.ai.mit.edu/pub/gnu/}.
2304
2305
2306 @node Program-specific files
2307 @section Program-specific files
2308
2309 Many programs will need to find some configuration files.  Kpathsea
2310 contains some support to make it easy to place them in their own
2311 directories.  The Standard @TeX{} directory structure (@pxref{Top,,
2312 Introduction, tds, A Directory Structure for @TeX{} files}), specifies
2313 that such files should go into a subdirectory named after the program,
2314 like @samp{texmf/ttf2pk}.
2315
2316 Two special formats, @samp{kpse_program_text_format} and
2317 @samp{kpse_program_binary_format} exist, which use
2318 @code{.:$TEXMF/@var{program}//} as their compiled-in search path.  To
2319 override this default, you can use the variable
2320 @code{@var{PROGRAM}INPUTS} in the environment and/or @samp{texmf.cnf}.
2321 That is to say, the name of the variable is constructed by converting
2322 the name of the program to upper case, and appending @code{INPUTS}.
2323
2324 The only difference between these two formats is whether
2325 @code{kpse_open_file} will open the files it finds in text or binary
2326 mode.
2327
2328
2329 @node Programming with config files
2330 @section Programming with config files
2331
2332 @cindex programming with config files
2333 @cindex config files, programming with
2334
2335 You can (and probably should) use the same @code{texmf.cnf}
2336 configuration file that Kpathsea uses for your program.  This helps
2337 installers by keeping all configuration in one place.
2338
2339 @findex kpse_var_value
2340 @flindex variable.h
2341 @vindex shell_escape@r{, example for code}
2342 To retrieve a value @var{var} from config files, the best way is to call
2343 @code{kpse_var_value} on the string @code{@var{var}}.  This will look
2344 first for an environment variable @var{var}, then a config file value.
2345 The result will be the value found or @samp{NULL}.  This function is
2346 declared in @file{kpathsea/variable.h}.  For an example, see the
2347 @code{shell_escape} code in @file{web2c/lib/texmfmp.c}.
2348
2349 The routine to do variable expansion in the context of a search path (as
2350 opposed to simply retrieving a value) is @code{kpse_var_expand}, also
2351 declared in @file{kpathsea/variable.h}.  It's generally only necessary
2352 to set the search path structure components as explained in the previous
2353 section, rather than using this yourself.
2354
2355 @findex kpse_cnf_get
2356 @flindex cnf.h
2357 If for some reason you want to retrieve a value @emph{only} from a
2358 config file, not automatically looking for a corresponding environment
2359 variable, call @code{kpse_cnf_get} (declared in @file{kpathsea/cnf.h})
2360 with the string @var{var}.
2361
2362 No initialization calls are needed.
2363
2364
2365 @node Index
2366 @unnumbered Index
2367
2368 @printindex cp
2369
2370 @contents
2371
2372 @bye