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>