Annotation of embedaddon/readline/doc/texi2dvi, revision 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>