Readline 5.1 import for HEAD.
[deliverable/binutils-gdb.git] / readline / doc / texi2dvi
CommitLineData
d60d9f65 1#! /bin/sh
9255ee31 2# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
d60d9f65 3# $Id$
c862e87b 4#
5bdf8622
DJ
5# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
6# 2002, 2003 Free Software Foundation, Inc.
c862e87b 7#
d60d9f65
SS
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2, or (at your option)
11# any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, you can either send email to this
20# program's maintainer or write to: The Free Software Foundation,
21# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
c862e87b 22#
9255ee31 23# Original author: Noah Friedman <friedman@gnu.org>.
c862e87b
JM
24#
25# Please send bug reports, etc. to bug-texinfo@gnu.org.
d60d9f65
SS
26# If possible, please send a copy of the output of the script called with
27# the `--debug' option when making a bug report.
d60d9f65
SS
28
29# This string is expanded by rcs automatically when this file is checked out.
30rcs_revision='$Revision$'
9255ee31
EZ
31rcs_version=`set - $rcs_revision; echo $2`
32program=`echo $0 | sed -e 's!.*/!!'`
5bdf8622 33version="texi2dvi (GNU Texinfo 4.5) $rcs_version
d60d9f65 34
5bdf8622 35Copyright (C) 2003 Free Software Foundation, Inc.
9255ee31
EZ
36There is NO warranty. You may redistribute this software
37under the terms of the GNU General Public License.
38For more information about these matters, see the files named COPYING."
d60d9f65 39
9255ee31 40usage="Usage: $program [OPTION]... FILE...
d60d9f65 41
9255ee31
EZ
42Run each Texinfo or LaTeX FILE through TeX in turn until all
43cross-references are resolved, building all indices. The directory
44containing each FILE is searched for included files. The suffix of FILE
45is used to determine its language (LaTeX or Texinfo).
c862e87b 46
9255ee31
EZ
47Makeinfo is used to perform Texinfo macro expansion before running TeX
48when needed.
d60d9f65 49
5bdf8622
DJ
50Operation modes:
51 -b, --batch no interaction
52 -c, --clean remove all auxiliary files
53 -D, --debug turn on shell debugging (set -x)
54 -h, --help display this help and exit successfully
55 -o, --output=OFILE leave output in OFILE (implies --clean);
56 Only one input FILE may be specified in this case
57 -q, --quiet no output unless errors (implies --batch)
58 -s, --silent same as --quiet
59 -v, --version display version information and exit successfully
60 -V, --verbose report on what is done
61
62TeX tuning:
63 -@ use @input instead of \input; for preloaded Texinfo
64 -e, -E, --expand force macro expansion using makeinfo
65 -I DIR search DIR for Texinfo files
66 -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo)
67 -p, --pdf use pdftex or pdflatex for processing
68 -t, --texinfo=CMD insert CMD after @setfilename in copy of input file
69 multiple values accumulate
9255ee31
EZ
70
71The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
72TEX (or PDFTEX), and TEXINDEX environment variables are used to run
73those commands, if they are set.
74
75Email bug reports to <bug-texinfo@gnu.org>,
5bdf8622
DJ
76general questions and discussion to <help-texinfo@gnu.org>.
77Texinfo home page: http://www.gnu.org/software/texinfo/"
9255ee31
EZ
78
79# Initialize variables for option overriding and otherwise.
d60d9f65
SS
80# Don't use `unset' since old bourne shells don't have this command.
81# Instead, assign them an empty value.
9255ee31 82batch=false # eval for batch mode
c862e87b 83clean=
d60d9f65 84debug=
5bdf8622 85escape='\'
9255ee31 86expand= # t for expansion via makeinfo
5bdf8622 87miincludes= # makeinfo include path
9255ee31 88oformat=dvi
5bdf8622
DJ
89oname= # --output
90quiet= # by default let the tools' message be displayed
9255ee31 91set_language=
c862e87b 92textra=
9255ee31 93tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems.
5bdf8622 94txincludes= # TEXINPUTS extensions, with trailing colon
9255ee31 95txiprereq=19990129 # minimum texinfo.tex version to have macro expansion
9255ee31
EZ
96verbose=false # echo for verbose mode
97
98orig_pwd=`pwd`
99
100# Systems which define $COMSPEC or $ComSpec use semicolons to separate
101# directories in TEXINPUTS.
102if test -n "$COMSPEC$ComSpec"; then
103 path_sep=";"
104else
105 path_sep=":"
106fi
d60d9f65 107
5bdf8622
DJ
108# Pacify verbose cds.
109CDPATH=${ZSH_VERSION+.}$path_sep
110
111# In case someone crazy insists on using grep -E.
112: ${EGREP=egrep}
113
c862e87b 114# Save this so we can construct a new TEXINPUTS path for each file.
d60d9f65 115TEXINPUTS_orig="$TEXINPUTS"
9255ee31
EZ
116# Unfortunately makeindex does not read TEXINPUTS.
117INDEXSTYLE_orig="$INDEXSTYLE"
118export TEXINPUTS INDEXSTYLE
119
120# Push a token among the arguments that will be used to notice when we
121# ended options/arguments parsing.
122# Use "set dummy ...; shift" rather than 'set - ..." because on
123# Solaris set - turns off set -x (but keeps set -e).
124# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
125# still expand "$@" to a single argument (the empty string) rather
126# than nothing at all.
127arg_sep="$$--$$"
128set dummy ${1+"$@"} "$arg_sep"; shift
129
130# \f
d60d9f65 131# Parse command line arguments.
9255ee31
EZ
132while test x"$1" != x"$arg_sep"; do
133
134 # Handle --option=value by splitting apart and putting back on argv.
d60d9f65 135 case "$1" in
9255ee31
EZ
136 --*=*)
137 opt=`echo "$1" | sed -e 's/=.*//'`
138 val=`echo "$1" | sed -e 's/[^=]*=//'`
139 shift
140 set dummy "$opt" "$val" ${1+"$@"}; shift
141 ;;
142 esac
143
144 # This recognizes --quark as --quiet. So what.
145 case "$1" in
146 -@ ) escape=@;;
147 # Silently and without documentation accept -b and --b[atch] as synonyms.
148 -b | --b*) batch=eval;;
149 -q | -s | --q* | --s*) quiet=t; batch=eval;;
150 -c | --c*) clean=t;;
151 -D | --d*) debug=t;;
5bdf8622 152 -e | -E | --e*) expand=t;;
9255ee31
EZ
153 -h | --h*) echo "$usage"; exit 0;;
154 -I | --I*)
155 shift
156 miincludes="$miincludes -I $1"
5bdf8622 157 txincludes="$txincludes$1$path_sep"
9255ee31
EZ
158 ;;
159 -l | --l*) shift; set_language=$1;;
5bdf8622
DJ
160 -o | --o*)
161 shift
162 clean=t
163 case "$1" in
164 /* | ?:/*) oname=$1;;
165 *) oname="$orig_pwd/$1";;
166 esac;;
9255ee31
EZ
167 -p | --p*) oformat=pdf;;
168 -t | --t*) shift; textra="$textra\\
169$1";;
170 -v | --vers*) echo "$version"; exit 0;;
171 -V | --verb*) verbose=echo;;
172 --) # What remains are not options.
d60d9f65 173 shift
9255ee31
EZ
174 while test x"$1" != x"$arg_sep"; do
175 set dummy ${1+"$@"} "$1"; shift
176 shift
177 done
178 break;;
179 -*)
180 echo "$0: Unknown or ambiguous option \`$1'." >&2
181 echo "$0: Try \`--help' for more information." >&2
182 exit 1;;
183 *) set dummy ${1+"$@"} "$1"; shift;;
d60d9f65 184 esac
9255ee31 185 shift
d60d9f65 186done
9255ee31
EZ
187# Pop the token
188shift
d60d9f65 189
9255ee31 190# Interpret remaining command line args as filenames.
5bdf8622
DJ
191case $# in
192 0)
9255ee31
EZ
193 echo "$0: Missing file arguments." >&2
194 echo "$0: Try \`--help' for more information." >&2
c862e87b 195 exit 2
5bdf8622
DJ
196 ;;
197 1) ;;
198 *)
199 if test -n "$oname"; then
200 echo "$0: Can't use option \`--output' with more than one argument." >&2
201 exit 2
202 fi
203 ;;
204esac
c862e87b 205
9255ee31
EZ
206# Prepare the temporary directory. Remove it at exit, unless debugging.
207if test -z "$debug"; then
208 trap "cd / && rm -rf $tmpdir" 0 1 2 15
209fi
210
211# Create the temporary directory with strict rights
212(umask 077 && mkdir $tmpdir) || exit 1
213
214# Prepare the tools we might need. This may be extra work in some
215# cases, but improves the readibility of the script.
216utildir=$tmpdir/utils
217mkdir $utildir || exit 1
218
219# A sed script that preprocesses Texinfo sources in order to keep the
220# iftex sections only. We want to remove non TeX sections, and
221# comment (with `@c texi2dvi') TeX sections so that makeinfo does not
222# try to parse them. Nevertheless, while commenting TeX sections,
223# don't comment @macro/@end macro so that makeinfo does propagate
224# them. Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo
225# doesn't work well enough (yet) to use that, so work around with sed.
226comment_iftex_sed=$utildir/comment.sed
227cat <<EOF >$comment_iftex_sed
228/^@tex/,/^@end tex/{
229 s/^/@c texi2dvi/
230}
231/^@iftex/,/^@end iftex/{
232 s/^/@c texi2dvi/
233 /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
234 s/^@c texi2dvi//
235 }
236}
5bdf8622
DJ
237/^@html/,/^@end html/{
238 s/^/@c (texi2dvi)/
239}
240/^@ifhtml/,/^@end ifhtml/{
241 s/^/@c (texi2dvi)/
242}
243/^@ifnottex/,/^@end ifnottex/{
244 s/^/@c (texi2dvi)/
245}
9255ee31
EZ
246/^@ifinfo/,/^@end ifinfo/{
247 /^@node/p
248 /^@menu/,/^@end menu/p
5bdf8622
DJ
249 t
250 s/^/@c (texi2dvi)/
9255ee31 251}
5bdf8622
DJ
252s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
253s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/
9255ee31
EZ
254EOF
255# Uncommenting is simple: Remove any leading `@c texi2dvi'.
256uncomment_iftex_sed=$utildir/uncomment.sed
257cat <<EOF >$uncomment_iftex_sed
258s/^@c texi2dvi//
259EOF
260
261# A shell script that computes the list of xref files.
262# Takes the filename (without extension) of which we look for xref
263# files as argument. The index files must be reported last.
264get_xref_files=$utildir/get_xref.sh
265cat <<\EOF >$get_xref_files
266#! /bin/sh
267
268# Get list of xref files (indexes, tables and lists).
269# Find all files having root filename with a two-letter extension,
270# saves the ones that are really Texinfo-related files. .?o? catches
5bdf8622 271# many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more.
9255ee31
EZ
272for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
273 # If file is empty, skip it.
274 test -s "$this_file" || continue
275 # If the file is not suitable to be an index or xref file, don't
276 # process it. The file can't be if its first character is not a
277 # backslash or single quote.
278 first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
279 if test "x$first_character" = "x\\" \
280 || test "x$first_character" = "x'"; then
281 xref_files="$xref_files ./$this_file"
282 fi
283done
284echo "$xref_files"
285EOF
286chmod 500 $get_xref_files
287
288# File descriptor usage:
289# 0 standard input
290# 1 standard output (--verbose messages)
291# 2 standard error
292# 3 some systems may open it to /dev/tty
293# 4 used on the Kubota Titan
294# 5 tools output (turned off by --quiet)
295
296# Tools' output. If quiet, discard, else redirect to the message flow.
297if test "$quiet" = t; then
298 exec 5>/dev/null
299else
300 exec 5>&1
301fi
302
303# Enable tracing
c862e87b 304test "$debug" = t && set -x
d60d9f65 305
9255ee31
EZ
306# \f
307# TeXify files.
308
c862e87b
JM
309for command_line_filename in ${1+"$@"}; do
310 $verbose "Processing $command_line_filename ..."
311
9255ee31
EZ
312 # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
313 # prepend `./' in order to avoid that the tools take it as an option.
5bdf8622 314 echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \
9255ee31
EZ
315 || command_line_filename="./$command_line_filename"
316
317 # See if the file exists. If it doesn't we're in trouble since, even
c862e87b
JM
318 # though the user may be able to reenter a valid filename at the tex
319 # prompt (assuming they're attending the terminal), this script won't
9255ee31
EZ
320 # be able to find the right xref files and so forth.
321 if test ! -r "$command_line_filename"; then
322 echo "$0: Could not read $command_line_filename, skipping." >&2
c862e87b
JM
323 continue
324 fi
325
9255ee31
EZ
326 # Get the name of the current directory. We want the full path
327 # because in clean mode we are in tmp, in which case a relative
328 # path has no meaning.
329 filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
330 filename_dir=`cd "$filename_dir" >/dev/null && pwd`
331
332 # Strip directory part but leave extension.
333 filename_ext=`basename "$command_line_filename"`
334 # Strip extension.
335 filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
336 ext=`echo "$filename_ext" | sed 's/^.*\.//'`
337
338 # _src. Use same basename since we want to generate aux files with
339 # the same basename as the manual. If --expand, then output the
340 # macro-expanded file to here, else copy the original file.
341 tmpdir_src=$tmpdir/src
342 filename_src=$tmpdir_src/$filename_noext.$ext
343
344 # _xtr. The file with the user's extra commands.
345 tmpdir_xtr=$tmpdir/xtr
346 filename_xtr=$tmpdir_xtr/$filename_noext.$ext
347
348 # _bak. Copies of the previous xref files (another round is run if
349 # they differ from the new one).
350 tmpdir_bak=$tmpdir/bak
351
352 # Make all those directories and give up if we can't succeed.
353 mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1
c862e87b 354
5bdf8622
DJ
355 # Source file might include additional sources.
356 # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
357 # after all other directories have been turned into absolute paths.)
358 # `.' goes first to ensure that any old .aux, .cps,
9255ee31
EZ
359 # etc. files in ${directory} don't get used in preference to fresher
360 # files in `.'. Include orig_pwd in case we are in clean mode, where
361 # we've cd'd to a temp directory.
5bdf8622 362 common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes"
9255ee31
EZ
363 TEXINPUTS="$common$TEXINPUTS_orig"
364 INDEXSTYLE="$common$INDEXSTYLE_orig"
365
5bdf8622
DJ
366 # Convert relative paths to absolute paths, so we can run in another
367 # directory (e.g., in --clean mode, or during the macro-support
368 # detection.)
369 #
370 # Empty path components are meaningful to tex. We rewrite them
371 # as `EMPTY' so they don't get lost when we split on $path_sep.
372 TEXINPUTS=`echo $TEXINPUTS |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
373 INDEXSTYLE=`echo $INDEXSTYLE |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
374 save_IFS=$IFS
375 IFS=$path_sep
376 set x $TEXINPUTS; shift
377 TEXINPUTS=.
378 for dir
379 do
380 case $dir in
381 EMPTY)
382 TEXINPUTS=$TEXINPUTS$path_sep
383 ;;
384 [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed.
385 TEXINPUTS=$TEXINPUTS$path_sep$dir
386 ;;
387 *)
388 abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs
389 ;;
390 esac
391 done
392 set x $INDEXSTYLE; shift
393 INDEXSTYLE=.
394 for dir
395 do
396 case $dir in
397 EMPTY)
398 INDEXSTYLE=$INDEXSTYLE$path_sep
399 ;;
400 [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed.
401 INDEXSTYLE=$INDEXSTYLE$path_sep$dir
402 ;;
403 *)
404 abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs
405 ;;
406 esac
407 done
408 IFS=$save_IFS
409
9255ee31
EZ
410 # If the user explicitly specified the language, use that.
411 # Otherwise, if the first line is \input texinfo, assume it's texinfo.
412 # Otherwise, guess from the file extension.
413 if test -n "$set_language"; then
414 language=$set_language
5bdf8622 415 elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then
9255ee31
EZ
416 language=texinfo
417 else
418 language=
419 fi
420
421 # Get the type of the file (latex or texinfo) from the given language
422 # we just guessed, or from the file extension if not set yet.
423 case ${language:-$filename_ext} in
424 [lL]a[tT]e[xX] | *.ltx | *.tex)
425 # Assume a LaTeX file. LaTeX needs bibtex and uses latex for
426 # compilation. No makeinfo.
427 bibtex=${BIBTEX:-bibtex}
428 makeinfo= # no point in running makeinfo on latex source.
429 texindex=${MAKEINDEX:-makeindex}
430 if test $oformat = dvi; then
431 tex=${LATEX:-latex}
432 else
433 tex=${PDFLATEX:-pdflatex}
434 fi
435 ;;
436
437 *)
438 # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex.
439 bibtex=
440 texindex=${TEXINDEX:-texindex}
441 if test $oformat = dvi; then
442 tex=${TEX:-tex}
443 else
444 tex=${PDFTEX:-pdftex}
445 fi
446 # Unless required by the user, makeinfo expansion is wanted only
447 # if texinfo.tex is too old.
448 if test "$expand" = t; then
449 makeinfo=${MAKEINFO:-makeinfo}
450 else
451 # Check if texinfo.tex performs macro expansion by looking for
452 # its version. The version is a date of the form YEAR-MO-DA.
453 # We don't need to use [0-9] to match the digits since anyway
454 # the comparison with $txiprereq, a number, will fail with non
455 # digits.
456 txiversion_tex=txiversion.tex
457 echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex
458 # Run in the tmpdir to avoid leaving files.
5bdf8622
DJ
459 eval `cd $tmpdir >/dev/null &&
460 $tex $txiversion_tex 2>/dev/null |
461 sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'`
9255ee31
EZ
462 $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
463 if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
464 makeinfo=
465 else
466 makeinfo=${MAKEINFO:-makeinfo}
467 fi
468 # As long as we had to run TeX, offer the user this convenience
469 if test "$txiformat" = Texinfo; then
470 escape=@
471 fi
472 fi
473 ;;
474 esac
c862e87b 475
9255ee31 476 # Expand macro commands in the original source file using Makeinfo.
c862e87b
JM
477 # Always use `end' footnote style, since the `separate' style
478 # generates different output (arguably this is a bug in -E).
479 # Discard main info output, the user asked to run TeX, not makeinfo.
9255ee31
EZ
480 if test -n "$makeinfo"; then
481 $verbose "Macro-expanding $command_line_filename to $filename_src ..."
482 sed -f $comment_iftex_sed "$command_line_filename" \
483 | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
484 -o /dev/null --macro-expand=- \
485 | sed -f $uncomment_iftex_sed >"$filename_src"
486 filename_input=$filename_src
487 fi
488
489 # If makeinfo failed (or was not even run), use the original file as input.
490 if test $? -ne 0 \
491 || test ! -r "$filename_src"; then
c862e87b 492 $verbose "Reverting to $command_line_filename ..."
9255ee31 493 filename_input=$filename_dir/$filename_ext
c862e87b 494 fi
c862e87b
JM
495
496 # Used most commonly for @finalout, @smallbook, etc.
497 if test -n "$textra"; then
9255ee31 498 $verbose "Inserting extra commands: $textra"
c862e87b 499 sed '/^@setfilename/a\
9255ee31
EZ
500'"$textra" "$filename_input" >$filename_xtr
501 filename_input=$filename_xtr
c862e87b
JM
502 fi
503
504 # If clean mode was specified, then move to the temporary directory.
505 if test "$clean" = t; then
9255ee31
EZ
506 $verbose "cd $tmpdir_src"
507 cd "$tmpdir_src" || exit 1
c862e87b
JM
508 fi
509
9255ee31
EZ
510 while :; do # will break out of loop below
511 orig_xref_files=`$get_xref_files "$filename_noext"`
512
513 # Save copies of originals for later comparison.
514 if test -n "$orig_xref_files"; then
515 $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
516 cp $orig_xref_files $tmpdir_bak
517 fi
518
519 # Run bibtex on current file.
520 # - If its input (AUX) exists.
521 # - If AUX contains both `\bibdata' and `\bibstyle'.
522 # - If some citations are missing (LOG contains `Citation').
523 # or the LOG complains of a missing .bbl
524 #
525 # We run bibtex first, because I can see reasons for the indexes
526 # to change after bibtex is run, but I see no reason for the
527 # converse.
528 #
529 # Don't try to be too smart. Running bibtex only if the bbl file
530 # exists and is older than the LaTeX file is wrong, since the
531 # document might include files that have changed. Because there
532 # can be several AUX (if there are \include's), but a single LOG,
533 # looking for missing citations in LOG is easier, though we take
534 # the risk to match false messages.
535 if test -n "$bibtex" \
536 && test -r "$filename_noext.aux" \
537 && test -r "$filename_noext.log" \
538 && (grep '^\\bibdata[{]' "$filename_noext.aux" \
539 && grep '^\\bibstyle[{]' "$filename_noext.aux" \
540 && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
541 || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
542 >/dev/null 2>&1; \
543 then
544 $verbose "Running $bibtex $filename_noext ..."
545 if $bibtex "$filename_noext" >&5; then :; else
546 echo "$0: $bibtex exited with bad status, quitting." >&2
547 exit 1
548 fi
549 fi
550
551 # What we'll run texindex on -- exclude non-index files.
552 # Since we know index files are last, it is correct to remove everything
5bdf8622
DJ
553 # before .aux and .?o?. But don't really do <anything>o<anything>
554 # -- don't match whitespace as <anything>.
555 # Otherwise, if orig_xref_files contains something like
556 # foo.xo foo.whatever
557 # the space after the o will get matched.
9255ee31
EZ
558 index_files=`echo "$orig_xref_files" \
559 | sed "s!.*\.aux!!g;
5bdf8622 560 s!./$filename_noext\.[^ ]o[^ ]!!g;
9255ee31
EZ
561 s/^[ ]*//;s/[ ]*$//"`
562 # Run texindex (or makeindex) on current index files. If they
563 # already exist, and after running TeX a first time the index
564 # files don't change, then there's no reason to run TeX again.
565 # But we won't know that if the index files are out of date or
566 # nonexistent.
567 if test -n "$texindex" && test -n "$index_files"; then
568 $verbose "Running $texindex $index_files ..."
569 if $texindex $index_files 2>&5 1>&2; then :; else
570 echo "$0: $texindex exited with bad status, quitting." >&2
571 exit 1
d60d9f65 572 fi
c862e87b
JM
573 fi
574
575 # Finally, run TeX.
9255ee31
EZ
576 # Prevent $ESCAPE from being interpreted by the shell if it happens
577 # to be `/'.
578 $batch tex_args="\\${escape}nonstopmode\ \\${escape}input"
9255ee31 579 cmd="$tex $tex_args $filename_input"
5bdf8622 580 $verbose "Running $cmd ..."
9255ee31
EZ
581 if $cmd >&5; then :; else
582 echo "$0: $tex exited with bad status, quitting." >&2
583 echo "$0: see $filename_noext.log for errors." >&2
584 test "$clean" = t \
585 && cp "$filename_noext.log" "$orig_pwd"
586 exit 1
c862e87b 587 fi
9255ee31
EZ
588
589
590 # Decide if looping again is needed.
591 finished=t
592
593 # LaTeX (and the package changebar) report in the LOG file if it
594 # should be rerun. This is needed for files included from
595 # subdirs, since texi2dvi does not try to compare xref files in
596 # subdirs. Performing xref files test is still good since LaTeX
597 # does not report changes in xref files.
5bdf8622 598 if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then
9255ee31
EZ
599 finished=
600 fi
601
602 # Check if xref files changed.
603 new_xref_files=`$get_xref_files "$filename_noext"`
604 $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
605 $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`"
606
607 # If old and new lists don't at least have the same file list,
608 # then one file or another has definitely changed.
609 test "x$orig_xref_files" != "x$new_xref_files" && finished=
610
611 # File list is the same. We must compare each file until we find
612 # a difference.
613 if test -n "$finished"; then
614 for this_file in $new_xref_files; do
615 $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
616 # cmp -s returns nonzero exit status if files differ.
617 if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
618 # We only need to keep comparing until we find one that
619 # differs, because we'll have to run texindex & tex again no
620 # matter how many more there might be.
621 finished=
622 $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
623 test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
c862e87b
JM
624 break
625 fi
d60d9f65 626 done
c862e87b 627 fi
d60d9f65 628
9255ee31
EZ
629 # If finished, exit the loop, else rerun the loop.
630 test -n "$finished" && break
c862e87b
JM
631 done
632
633 # If we were in clean mode, compilation was in a tmp directory.
9255ee31 634 # Copy the DVI (or PDF) file into the directory where the compilation
c862e87b
JM
635 # has been done. (The temp dir is about to get removed anyway.)
636 # We also return to the original directory so that
637 # - the next file is processed in correct conditions
638 # - the temporary file can be removed
639 if test -n "$clean"; then
5bdf8622
DJ
640 if test -n "$oname"; then
641 dest=$oname
642 else
643 dest=$orig_pwd
644 fi
645 $verbose "Copying $oformat file from `pwd` to $dest"
646 cp -p "./$filename_noext.$oformat" "$dest"
9255ee31 647 cd / # in case $orig_pwd is on a different drive (for DOS)
c862e87b
JM
648 cd $orig_pwd || exit 1
649 fi
650
9255ee31
EZ
651 # Remove temporary files.
652 if test "x$debug" = "x"; then
653 $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
654 cd /
655 rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
c862e87b 656 fi
d60d9f65
SS
657done
658
c862e87b 659$verbose "$0 done."
9255ee31 660exit 0 # exit successfully, not however we ended the loop.
This page took 0.360365 seconds and 4 git commands to generate.