1 #! /bin/sh 2 # texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources. 3 # 4 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 5 # 2002, 2003 Free Software Foundation, Inc. 6 # 7 # This program is free software; you can redistribute it and/or modify 8 # it under the terms of the GNU General Public License as published by 9 # the Free Software Foundation; either version 2, or (at your option) 10 # any later version. 11 # 12 # This program is distributed in the hope that it will be useful, 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # GNU General Public License for more details. 16 # 17 # You should have received a copy of the GNU General Public License 18 # along with this program; if not, you can either send email to this 19 # program's maintainer or write to: The Free Software Foundation, 20 # Inc.; 51 Franklin Street, Fifth Floor; Boston, MA 02110-1301, USA. 21 # 22 # Original author: Noah Friedman <friedman (at] gnu.org>. 23 # 24 # Please send bug reports, etc. to bug-texinfo (at] gnu.org. 25 # If possible, please send a copy of the output of the script called with 26 # the `--debug' option when making a bug report. 27 28 program=`echo $0 | sed -e 's!.*/!!'` 29 version="texi2dvi (GNU Texinfo 4.5) 30 31 Copyright (C) 2003 Free Software Foundation, Inc. 32 There is NO warranty. You may redistribute this software 33 under the terms of the GNU General Public License. 34 For more information about these matters, see the files named COPYING." 35 36 usage="Usage: $program [OPTION]... FILE... 37 38 Run each Texinfo or LaTeX FILE through TeX in turn until all 39 cross-references are resolved, building all indices. The directory 40 containing each FILE is searched for included files. The suffix of FILE 41 is used to determine its language (LaTeX or Texinfo). 42 43 Makeinfo is used to perform Texinfo macro expansion before running TeX 44 when needed. 45 46 Operation modes: 47 -b, --batch no interaction 48 -c, --clean remove all auxiliary files 49 -D, --debug turn on shell debugging (set -x) 50 -h, --help display this help and exit successfully 51 -o, --output=OFILE leave output in OFILE (implies --clean); 52 Only one input FILE may be specified in this case 53 -q, --quiet no output unless errors (implies --batch) 54 -s, --silent same as --quiet 55 -v, --version display version information and exit successfully 56 -V, --verbose report on what is done 57 58 TeX tuning: 59 -@ use @input instead of \input; for preloaded Texinfo 60 -e, -E, --expand force macro expansion using makeinfo 61 -I DIR search DIR for Texinfo files 62 -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo) 63 -p, --pdf use pdftex or pdflatex for processing 64 -t, --texinfo=CMD insert CMD after @setfilename in copy of input file 65 multiple values accumulate 66 67 The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO, 68 TEX (or PDFTEX), and TEXINDEX environment variables are used to run 69 those commands, if they are set. 70 71 Email bug reports to <bug-texinfo (at] gnu.org>, 72 general questions and discussion to <help-texinfo (at] gnu.org>. 73 Texinfo home page: http://www.gnu.org/software/texinfo/" 74 75 # Initialize variables for option overriding and otherwise. 76 # Don't use `unset' since old bourne shells don't have this command. 77 # Instead, assign them an empty value. 78 batch=false # eval for batch mode 79 clean= 80 debug= 81 escape='\' 82 expand= # t for expansion via makeinfo 83 miincludes= # makeinfo include path 84 oformat=dvi 85 oname= # --output 86 quiet= # by default let the tools' message be displayed 87 set_language= 88 textra= 89 tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems. 90 txincludes= # TEXINPUTS extensions, with trailing colon 91 txiprereq=19990129 # minimum texinfo.tex version to have macro expansion 92 verbose=false # echo for verbose mode 93 94 orig_pwd=`pwd` 95 96 # Systems which define $COMSPEC or $ComSpec use semicolons to separate 97 # directories in TEXINPUTS. 98 if test -n "$COMSPEC$ComSpec"; then 99 path_sep=";" 100 else 101 path_sep=":" 102 fi 103 104 # Pacify verbose cds. 105 CDPATH=${ZSH_VERSION+.}$path_sep 106 107 # In case someone crazy insists on using grep -E. 108 : ${EGREP=egrep} 109 110 # Save this so we can construct a new TEXINPUTS path for each file. 111 TEXINPUTS_orig="$TEXINPUTS" 112 # Unfortunately makeindex does not read TEXINPUTS. 113 INDEXSTYLE_orig="$INDEXSTYLE" 114 export TEXINPUTS INDEXSTYLE 115 116 # Push a token among the arguments that will be used to notice when we 117 # ended options/arguments parsing. 118 # Use "set dummy ...; shift" rather than 'set - ..." because on 119 # Solaris set - turns off set -x (but keeps set -e). 120 # Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3 121 # still expand "$@" to a single argument (the empty string) rather 122 # than nothing at all. 123 arg_sep="$$--$$" 124 set dummy ${1+"$@"} "$arg_sep"; shift 125 126 # 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 # 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. 659