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