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