658 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			658 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#! /bin/sh
 | 
						||
# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
 | 
						||
# $Id: texi2dvi,v 1.14 2003/02/05 00:42:33 karl Exp $
 | 
						||
#
 | 
						||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
 | 
						||
# 2002, 2003 Free Software Foundation, Inc.
 | 
						||
#
 | 
						||
#   This program is free software: you can redistribute it and/or modify
 | 
						||
#   it under the terms of the GNU General Public License as published by
 | 
						||
#   the Free Software Foundation, either version 3 of the License, or
 | 
						||
#   (at your option) any later version.
 | 
						||
#
 | 
						||
#   This program is distributed in the hope that it will be useful,
 | 
						||
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						||
#   GNU General Public License for more details.
 | 
						||
#
 | 
						||
#   You should have received a copy of the GNU General Public License
 | 
						||
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						||
#
 | 
						||
# Original author: Noah Friedman <friedman@gnu.org>.
 | 
						||
#
 | 
						||
# Please send bug reports, etc. to bug-texinfo@gnu.org.
 | 
						||
# If possible, please send a copy of the output of the script called with
 | 
						||
# the `--debug' option when making a bug report.
 | 
						||
 | 
						||
# This string is expanded by rcs automatically when this file is checked out.
 | 
						||
rcs_revision='$Revision: 1.14 $'
 | 
						||
rcs_version=`set - $rcs_revision; echo $2`
 | 
						||
program=`echo $0 | sed -e 's!.*/!!'`
 | 
						||
version="texi2dvi (GNU Texinfo 4.5) $rcs_version
 | 
						||
 | 
						||
Copyright (C) 2003 Free Software Foundation, Inc.
 | 
						||
There is NO warranty.  You may redistribute this software
 | 
						||
under the terms of the GNU General Public License.
 | 
						||
For more information about these matters, see the files named COPYING."
 | 
						||
 | 
						||
usage="Usage: $program [OPTION]... FILE...
 | 
						||
 | 
						||
Run each Texinfo or LaTeX FILE through TeX in turn until all
 | 
						||
cross-references are resolved, building all indices.  The directory
 | 
						||
containing each FILE is searched for included files.  The suffix of FILE
 | 
						||
is used to determine its language (LaTeX or Texinfo).
 | 
						||
 | 
						||
Makeinfo is used to perform Texinfo macro expansion before running TeX
 | 
						||
when needed.
 | 
						||
 | 
						||
Operation modes:
 | 
						||
  -b, --batch         no interaction
 | 
						||
  -c, --clean         remove all auxiliary files
 | 
						||
  -D, --debug         turn on shell debugging (set -x)
 | 
						||
  -h, --help          display this help and exit successfully
 | 
						||
  -o, --output=OFILE  leave output in OFILE (implies --clean);
 | 
						||
                      Only one input FILE may be specified in this case
 | 
						||
  -q, --quiet         no output unless errors (implies --batch)
 | 
						||
  -s, --silent        same as --quiet
 | 
						||
  -v, --version       display version information and exit successfully
 | 
						||
  -V, --verbose       report on what is done
 | 
						||
 | 
						||
TeX tuning:
 | 
						||
  -@                   use @input instead of \input; for preloaded Texinfo
 | 
						||
  -e, -E, --expand     force macro expansion using makeinfo
 | 
						||
  -I DIR               search DIR for Texinfo files
 | 
						||
  -l, --language=LANG  specify the LANG of FILE (LaTeX or Texinfo)
 | 
						||
  -p, --pdf            use pdftex or pdflatex for processing
 | 
						||
  -t, --texinfo=CMD    insert CMD after @setfilename in copy of input file
 | 
						||
                       multiple values accumulate
 | 
						||
 | 
						||
The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
 | 
						||
TEX (or PDFTEX), and TEXINDEX environment variables are used to run
 | 
						||
those commands, if they are set.
 | 
						||
 | 
						||
Email bug reports to <bug-texinfo@gnu.org>,
 | 
						||
general questions and discussion to <help-texinfo@gnu.org>.
 | 
						||
Texinfo home page: http://www.gnu.org/software/texinfo/"
 | 
						||
 | 
						||
# Initialize variables for option overriding and otherwise.
 | 
						||
# Don't use `unset' since old bourne shells don't have this command.
 | 
						||
# Instead, assign them an empty value.
 | 
						||
batch=false     # eval for batch mode
 | 
						||
clean=
 | 
						||
debug=
 | 
						||
escape='\'
 | 
						||
expand=         # t for expansion via makeinfo
 | 
						||
miincludes=     # makeinfo include path
 | 
						||
oformat=dvi
 | 
						||
oname=          # --output
 | 
						||
quiet=          # by default let the tools' message be displayed
 | 
						||
set_language=
 | 
						||
textra=
 | 
						||
tmpdir=${TMPDIR:-/tmp}/t2d$$  # avoid collisions on 8.3 filesystems.
 | 
						||
txincludes=     # TEXINPUTS extensions, with trailing colon
 | 
						||
txiprereq=19990129 # minimum texinfo.tex version to have macro expansion
 | 
						||
verbose=false   # echo for verbose mode
 | 
						||
 | 
						||
orig_pwd=`pwd`
 | 
						||
 | 
						||
# Systems which define $COMSPEC or $ComSpec use semicolons to separate
 | 
						||
# directories in TEXINPUTS.
 | 
						||
if test -n "$COMSPEC$ComSpec"; then
 | 
						||
  path_sep=";"
 | 
						||
else
 | 
						||
  path_sep=":"
 | 
						||
fi
 | 
						||
 | 
						||
# Pacify verbose cds.
 | 
						||
CDPATH=${ZSH_VERSION+.}$path_sep
 | 
						||
 | 
						||
# In case someone crazy insists on using grep -E.
 | 
						||
: ${EGREP=egrep}
 | 
						||
 | 
						||
# Save this so we can construct a new TEXINPUTS path for each file.
 | 
						||
TEXINPUTS_orig="$TEXINPUTS"
 | 
						||
# Unfortunately makeindex does not read TEXINPUTS.
 | 
						||
INDEXSTYLE_orig="$INDEXSTYLE"
 | 
						||
export TEXINPUTS INDEXSTYLE
 | 
						||
 | 
						||
# Push a token among the arguments that will be used to notice when we
 | 
						||
# ended options/arguments parsing.
 | 
						||
# Use "set dummy ...; shift" rather than 'set - ..." because on
 | 
						||
# Solaris set - turns off set -x (but keeps set -e).
 | 
						||
# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
 | 
						||
# still expand "$@" to a single argument (the empty string) rather
 | 
						||
# than nothing at all.
 | 
						||
arg_sep="$$--$$"
 | 
						||
set dummy ${1+"$@"} "$arg_sep"; shift
 | 
						||
 | 
						||
# 
 | 
						||
# Parse command line arguments.
 | 
						||
while test x"$1" != x"$arg_sep"; do
 | 
						||
 | 
						||
  # Handle --option=value by splitting apart and putting back on argv.
 | 
						||
  case "$1" in
 | 
						||
    --*=*)
 | 
						||
      opt=`echo "$1" | sed -e 's/=.*//'`
 | 
						||
      val=`echo "$1" | sed -e 's/[^=]*=//'`
 | 
						||
      shift
 | 
						||
      set dummy "$opt" "$val" ${1+"$@"}; shift
 | 
						||
      ;;
 | 
						||
  esac
 | 
						||
 | 
						||
  # This recognizes --quark as --quiet.  So what.
 | 
						||
  case "$1" in
 | 
						||
    -@ ) escape=@;;
 | 
						||
    # Silently and without documentation accept -b and --b[atch] as synonyms.
 | 
						||
    -b | --b*) batch=eval;;
 | 
						||
    -q | -s | --q* | --s*) quiet=t; batch=eval;;
 | 
						||
    -c | --c*) clean=t;;
 | 
						||
    -D | --d*) debug=t;;
 | 
						||
    -e | -E | --e*) expand=t;;
 | 
						||
    -h | --h*) echo "$usage"; exit 0;;
 | 
						||
    -I | --I*)
 | 
						||
      shift
 | 
						||
      miincludes="$miincludes -I $1"
 | 
						||
      txincludes="$txincludes$1$path_sep"
 | 
						||
      ;;
 | 
						||
    -l | --l*) shift; set_language=$1;;
 | 
						||
    -o | --o*)
 | 
						||
      shift
 | 
						||
      clean=t
 | 
						||
      case "$1" in
 | 
						||
        /* | ?:/*) oname=$1;;
 | 
						||
                *) oname="$orig_pwd/$1";;
 | 
						||
      esac;;
 | 
						||
    -p | --p*) oformat=pdf;;
 | 
						||
    -t | --t*) shift; textra="$textra\\
 | 
						||
$1";;
 | 
						||
    -v | --vers*) echo "$version"; exit 0;;
 | 
						||
    -V | --verb*) verbose=echo;;
 | 
						||
    --) # What remains are not options.
 | 
						||
      shift
 | 
						||
      while test x"$1" != x"$arg_sep"; do
 | 
						||
        set dummy ${1+"$@"} "$1"; shift
 | 
						||
        shift
 | 
						||
      done
 | 
						||
      break;;
 | 
						||
    -*)
 | 
						||
      echo "$0: Unknown or ambiguous option \`$1'." >&2
 | 
						||
      echo "$0: Try \`--help' for more information." >&2
 | 
						||
      exit 1;;
 | 
						||
    *) set dummy ${1+"$@"} "$1"; shift;;
 | 
						||
   esac
 | 
						||
   shift
 | 
						||
done
 | 
						||
# Pop the token
 | 
						||
shift
 | 
						||
 | 
						||
# Interpret remaining command line args as filenames.
 | 
						||
case $# in
 | 
						||
 0)
 | 
						||
  echo "$0: Missing file arguments." >&2
 | 
						||
  echo "$0: Try \`--help' for more information." >&2
 | 
						||
  exit 2
 | 
						||
  ;;
 | 
						||
 1) ;;
 | 
						||
 *)
 | 
						||
  if test -n "$oname"; then
 | 
						||
    echo "$0: Can't use option \`--output' with more than one argument." >&2
 | 
						||
    exit 2
 | 
						||
  fi
 | 
						||
  ;;
 | 
						||
esac
 | 
						||
 | 
						||
# Prepare the temporary directory.  Remove it at exit, unless debugging.
 | 
						||
if test -z "$debug"; then
 | 
						||
  trap "cd / && rm -rf $tmpdir" 0 1 2 15
 | 
						||
fi
 | 
						||
 | 
						||
# Create the temporary directory with strict rights
 | 
						||
(umask 077 && mkdir $tmpdir) || exit 1
 | 
						||
 | 
						||
# Prepare the tools we might need.  This may be extra work in some
 | 
						||
# cases, but improves the readibility of the script.
 | 
						||
utildir=$tmpdir/utils
 | 
						||
mkdir $utildir || exit 1
 | 
						||
 | 
						||
# A sed script that preprocesses Texinfo sources in order to keep the
 | 
						||
# iftex sections only.  We want to remove non TeX sections, and
 | 
						||
# comment (with `@c texi2dvi') TeX sections so that makeinfo does not
 | 
						||
# try to parse them.  Nevertheless, while commenting TeX sections,
 | 
						||
# don't comment @macro/@end macro so that makeinfo does propagate
 | 
						||
# them.  Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo
 | 
						||
# doesn't work well enough (yet) to use that, so work around with sed.
 | 
						||
comment_iftex_sed=$utildir/comment.sed
 | 
						||
cat <<EOF >$comment_iftex_sed
 | 
						||
/^@tex/,/^@end tex/{
 | 
						||
  s/^/@c texi2dvi/
 | 
						||
}
 | 
						||
/^@iftex/,/^@end iftex/{
 | 
						||
  s/^/@c texi2dvi/
 | 
						||
  /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
 | 
						||
    s/^@c texi2dvi//
 | 
						||
  }
 | 
						||
}
 | 
						||
/^@html/,/^@end html/{
 | 
						||
  s/^/@c (texi2dvi)/
 | 
						||
}
 | 
						||
/^@ifhtml/,/^@end ifhtml/{
 | 
						||
  s/^/@c (texi2dvi)/
 | 
						||
}
 | 
						||
/^@ifnottex/,/^@end ifnottex/{
 | 
						||
  s/^/@c (texi2dvi)/
 | 
						||
}
 | 
						||
/^@ifinfo/,/^@end ifinfo/{
 | 
						||
  /^@node/p
 | 
						||
  /^@menu/,/^@end menu/p
 | 
						||
  t
 | 
						||
  s/^/@c (texi2dvi)/
 | 
						||
}
 | 
						||
s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
 | 
						||
s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/
 | 
						||
EOF
 | 
						||
# Uncommenting is simple: Remove any leading `@c texi2dvi'.
 | 
						||
uncomment_iftex_sed=$utildir/uncomment.sed
 | 
						||
cat <<EOF >$uncomment_iftex_sed
 | 
						||
s/^@c texi2dvi//
 | 
						||
EOF
 | 
						||
 | 
						||
# A shell script that computes the list of xref files.
 | 
						||
# Takes the filename (without extension) of which we look for xref
 | 
						||
# files as argument.  The index files must be reported last.
 | 
						||
get_xref_files=$utildir/get_xref.sh
 | 
						||
cat <<\EOF >$get_xref_files
 | 
						||
#! /bin/sh
 | 
						||
 | 
						||
# Get list of xref files (indexes, tables and lists).
 | 
						||
# Find all files having root filename with a two-letter extension,
 | 
						||
# saves the ones that are really Texinfo-related files.  .?o? catches
 | 
						||
# many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more.
 | 
						||
for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
 | 
						||
  # If file is empty, skip it.
 | 
						||
  test -s "$this_file" || continue
 | 
						||
  # If the file is not suitable to be an index or xref file, don't
 | 
						||
  # process it.  The file can't be if its first character is not a
 | 
						||
  # backslash or single quote.
 | 
						||
  first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
 | 
						||
  if test "x$first_character" = "x\\" \
 | 
						||
     || test "x$first_character" = "x'"; then
 | 
						||
    xref_files="$xref_files ./$this_file"
 | 
						||
  fi
 | 
						||
done
 | 
						||
echo "$xref_files"
 | 
						||
EOF
 | 
						||
chmod 500 $get_xref_files
 | 
						||
 | 
						||
# File descriptor usage:
 | 
						||
# 0 standard input
 | 
						||
# 1 standard output (--verbose messages)
 | 
						||
# 2 standard error
 | 
						||
# 3 some systems may open it to /dev/tty
 | 
						||
# 4 used on the Kubota Titan
 | 
						||
# 5 tools output (turned off by --quiet)
 | 
						||
 | 
						||
# Tools' output.  If quiet, discard, else redirect to the message flow.
 | 
						||
if test "$quiet" = t; then
 | 
						||
  exec 5>/dev/null
 | 
						||
else
 | 
						||
  exec 5>&1
 | 
						||
fi
 | 
						||
 | 
						||
# Enable tracing
 | 
						||
test "$debug" = t && set -x
 | 
						||
 | 
						||
# 
 | 
						||
# TeXify files.
 | 
						||
 | 
						||
for command_line_filename in ${1+"$@"}; do
 | 
						||
  $verbose "Processing $command_line_filename ..."
 | 
						||
 | 
						||
  # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
 | 
						||
  # prepend `./' in order to avoid that the tools take it as an option.
 | 
						||
  echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \
 | 
						||
  || command_line_filename="./$command_line_filename"
 | 
						||
 | 
						||
  # See if the file exists.  If it doesn't we're in trouble since, even
 | 
						||
  # though the user may be able to reenter a valid filename at the tex
 | 
						||
  # prompt (assuming they're attending the terminal), this script won't
 | 
						||
  # be able to find the right xref files and so forth.
 | 
						||
  if test ! -r "$command_line_filename"; then
 | 
						||
    echo "$0: Could not read $command_line_filename, skipping." >&2
 | 
						||
    continue
 | 
						||
  fi
 | 
						||
 | 
						||
  # Get the name of the current directory.  We want the full path
 | 
						||
  # because in clean mode we are in tmp, in which case a relative
 | 
						||
  # path has no meaning.
 | 
						||
  filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
 | 
						||
  filename_dir=`cd "$filename_dir" >/dev/null && pwd`
 | 
						||
 | 
						||
  # Strip directory part but leave extension.
 | 
						||
  filename_ext=`basename "$command_line_filename"`
 | 
						||
  # Strip extension.
 | 
						||
  filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
 | 
						||
  ext=`echo "$filename_ext" | sed 's/^.*\.//'`
 | 
						||
 | 
						||
  # _src.  Use same basename since we want to generate aux files with
 | 
						||
  # the same basename as the manual.  If --expand, then output the
 | 
						||
  # macro-expanded file to here, else copy the original file.
 | 
						||
  tmpdir_src=$tmpdir/src
 | 
						||
  filename_src=$tmpdir_src/$filename_noext.$ext
 | 
						||
 | 
						||
  # _xtr.  The file with the user's extra commands.
 | 
						||
  tmpdir_xtr=$tmpdir/xtr
 | 
						||
  filename_xtr=$tmpdir_xtr/$filename_noext.$ext
 | 
						||
 | 
						||
  # _bak.  Copies of the previous xref files (another round is run if
 | 
						||
  # they differ from the new one).
 | 
						||
  tmpdir_bak=$tmpdir/bak
 | 
						||
 | 
						||
  # Make all those directories and give up if we can't succeed.
 | 
						||
  mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1
 | 
						||
 | 
						||
  # Source file might include additional sources.
 | 
						||
  # We want `.:$orig_pwd' before anything else.  (We'll add `.:' later
 | 
						||
  # after all other directories have been turned into absolute paths.)
 | 
						||
  # `.' goes first to ensure that any old .aux, .cps,
 | 
						||
  # etc. files in ${directory} don't get used in preference to fresher
 | 
						||
  # files in `.'.  Include orig_pwd in case we are in clean mode, where
 | 
						||
  # we've cd'd to a temp directory.
 | 
						||
  common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes"
 | 
						||
   TEXINPUTS="$common$TEXINPUTS_orig"
 | 
						||
  INDEXSTYLE="$common$INDEXSTYLE_orig"
 | 
						||
 | 
						||
  # Convert relative paths to absolute paths, so we can run in another
 | 
						||
  # directory (e.g., in --clean mode, or during the macro-support
 | 
						||
  # detection.)
 | 
						||
  #
 | 
						||
  # Empty path components are meaningful to tex.  We rewrite them
 | 
						||
  # as `EMPTY' so they don't get lost when we split on $path_sep.
 | 
						||
   TEXINPUTS=`echo $TEXINPUTS  |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
 | 
						||
  INDEXSTYLE=`echo $INDEXSTYLE |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
 | 
						||
  save_IFS=$IFS
 | 
						||
  IFS=$path_sep
 | 
						||
  set x $TEXINPUTS; shift
 | 
						||
  TEXINPUTS=.
 | 
						||
  for dir
 | 
						||
  do
 | 
						||
    case $dir in
 | 
						||
      EMPTY)
 | 
						||
        TEXINPUTS=$TEXINPUTS$path_sep
 | 
						||
        ;;
 | 
						||
      [\\/]* | ?:[\\/]*)        # Absolute paths don't need to be expansed.
 | 
						||
        TEXINPUTS=$TEXINPUTS$path_sep$dir
 | 
						||
        ;;
 | 
						||
      *)
 | 
						||
        abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs
 | 
						||
        ;;
 | 
						||
    esac
 | 
						||
  done
 | 
						||
  set x $INDEXSTYLE; shift
 | 
						||
  INDEXSTYLE=.
 | 
						||
  for dir
 | 
						||
  do
 | 
						||
    case $dir in
 | 
						||
      EMPTY)
 | 
						||
        INDEXSTYLE=$INDEXSTYLE$path_sep
 | 
						||
        ;;
 | 
						||
      [\\/]* | ?:[\\/]*)        # Absolute paths don't need to be expansed.
 | 
						||
        INDEXSTYLE=$INDEXSTYLE$path_sep$dir
 | 
						||
        ;;
 | 
						||
      *)
 | 
						||
        abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs
 | 
						||
        ;;
 | 
						||
    esac
 | 
						||
  done
 | 
						||
  IFS=$save_IFS
 | 
						||
 | 
						||
  # If the user explicitly specified the language, use that.
 | 
						||
  # Otherwise, if the first line is \input texinfo, assume it's texinfo.
 | 
						||
  # Otherwise, guess from the file extension.
 | 
						||
  if test -n "$set_language"; then
 | 
						||
    language=$set_language
 | 
						||
  elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then
 | 
						||
    language=texinfo
 | 
						||
  else
 | 
						||
    language=
 | 
						||
  fi
 | 
						||
 | 
						||
  # Get the type of the file (latex or texinfo) from the given language
 | 
						||
  # we just guessed, or from the file extension if not set yet.
 | 
						||
  case ${language:-$filename_ext} in
 | 
						||
    [lL]a[tT]e[xX] | *.ltx | *.tex)
 | 
						||
      # Assume a LaTeX file.  LaTeX needs bibtex and uses latex for
 | 
						||
      # compilation.  No makeinfo.
 | 
						||
      bibtex=${BIBTEX:-bibtex}
 | 
						||
      makeinfo= # no point in running makeinfo on latex source.
 | 
						||
      texindex=${MAKEINDEX:-makeindex}
 | 
						||
      if test $oformat = dvi; then
 | 
						||
        tex=${LATEX:-latex}
 | 
						||
      else
 | 
						||
        tex=${PDFLATEX:-pdflatex}
 | 
						||
      fi
 | 
						||
      ;;
 | 
						||
 | 
						||
    *)
 | 
						||
      # Assume a Texinfo file.  Texinfo files need makeinfo, texindex and tex.
 | 
						||
      bibtex=
 | 
						||
      texindex=${TEXINDEX:-texindex}
 | 
						||
      if test $oformat = dvi; then
 | 
						||
        tex=${TEX:-tex}
 | 
						||
      else
 | 
						||
        tex=${PDFTEX:-pdftex}
 | 
						||
      fi
 | 
						||
      # Unless required by the user, makeinfo expansion is wanted only
 | 
						||
      # if texinfo.tex is too old.
 | 
						||
      if test "$expand" = t; then
 | 
						||
        makeinfo=${MAKEINFO:-makeinfo}
 | 
						||
      else
 | 
						||
        # Check if texinfo.tex performs macro expansion by looking for
 | 
						||
        # its version.  The version is a date of the form YEAR-MO-DA.
 | 
						||
        # We don't need to use [0-9] to match the digits since anyway
 | 
						||
        # the comparison with $txiprereq, a number, will fail with non
 | 
						||
        # digits.
 | 
						||
        txiversion_tex=txiversion.tex
 | 
						||
        echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex
 | 
						||
        # Run in the tmpdir to avoid leaving files.
 | 
						||
        eval `cd $tmpdir >/dev/null &&
 | 
						||
              $tex $txiversion_tex 2>/dev/null |
 | 
						||
              sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'`
 | 
						||
        $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
 | 
						||
        if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
 | 
						||
          makeinfo=
 | 
						||
        else
 | 
						||
          makeinfo=${MAKEINFO:-makeinfo}
 | 
						||
        fi
 | 
						||
        # As long as we had to run TeX, offer the user this convenience
 | 
						||
        if test "$txiformat" = Texinfo; then
 | 
						||
          escape=@
 | 
						||
        fi
 | 
						||
      fi
 | 
						||
      ;;
 | 
						||
  esac
 | 
						||
 | 
						||
  # Expand macro commands in the original source file using Makeinfo.
 | 
						||
  # Always use `end' footnote style, since the `separate' style
 | 
						||
  #   generates different output (arguably this is a bug in -E).
 | 
						||
  # Discard main info output, the user asked to run TeX, not makeinfo.
 | 
						||
  if test -n "$makeinfo"; then
 | 
						||
    $verbose "Macro-expanding $command_line_filename to $filename_src ..."
 | 
						||
    sed -f $comment_iftex_sed "$command_line_filename" \
 | 
						||
      | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
 | 
						||
        -o /dev/null --macro-expand=- \
 | 
						||
      | sed -f $uncomment_iftex_sed >"$filename_src"
 | 
						||
    filename_input=$filename_src
 | 
						||
  fi
 | 
						||
 | 
						||
  # If makeinfo failed (or was not even run), use the original file as input.
 | 
						||
  if test $? -ne 0 \
 | 
						||
     || test ! -r "$filename_src"; then
 | 
						||
    $verbose "Reverting to $command_line_filename ..."
 | 
						||
    filename_input=$filename_dir/$filename_ext
 | 
						||
  fi
 | 
						||
 | 
						||
  # Used most commonly for @finalout, @smallbook, etc.
 | 
						||
  if test -n "$textra"; then
 | 
						||
    $verbose "Inserting extra commands: $textra"
 | 
						||
    sed '/^@setfilename/a\
 | 
						||
'"$textra" "$filename_input" >$filename_xtr
 | 
						||
    filename_input=$filename_xtr
 | 
						||
  fi
 | 
						||
 | 
						||
  # If clean mode was specified, then move to the temporary directory.
 | 
						||
  if test "$clean" = t; then
 | 
						||
    $verbose "cd $tmpdir_src"
 | 
						||
    cd "$tmpdir_src" || exit 1
 | 
						||
  fi
 | 
						||
 | 
						||
  while :; do # will break out of loop below
 | 
						||
    orig_xref_files=`$get_xref_files "$filename_noext"`
 | 
						||
 | 
						||
    # Save copies of originals for later comparison.
 | 
						||
    if test -n "$orig_xref_files"; then
 | 
						||
      $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
 | 
						||
      cp $orig_xref_files $tmpdir_bak
 | 
						||
    fi
 | 
						||
 | 
						||
    # Run bibtex on current file.
 | 
						||
    # - If its input (AUX) exists.
 | 
						||
    # - If AUX contains both `\bibdata' and `\bibstyle'.
 | 
						||
    # - If some citations are missing (LOG contains `Citation').
 | 
						||
    #   or the LOG complains of a missing .bbl
 | 
						||
    #
 | 
						||
    # We run bibtex first, because I can see reasons for the indexes
 | 
						||
    # to change after bibtex is run, but I see no reason for the
 | 
						||
    # converse.
 | 
						||
    #
 | 
						||
    # Don't try to be too smart.  Running bibtex only if the bbl file
 | 
						||
    # exists and is older than the LaTeX file is wrong, since the
 | 
						||
    # document might include files that have changed.  Because there
 | 
						||
    # can be several AUX (if there are \include's), but a single LOG,
 | 
						||
    # looking for missing citations in LOG is easier, though we take
 | 
						||
    # the risk to match false messages.
 | 
						||
    if test -n "$bibtex" \
 | 
						||
       && test -r "$filename_noext.aux" \
 | 
						||
       && test -r "$filename_noext.log" \
 | 
						||
       && (grep '^\\bibdata[{]'  "$filename_noext.aux" \
 | 
						||
           && grep '^\\bibstyle[{]' "$filename_noext.aux" \
 | 
						||
           && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
 | 
						||
               || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
 | 
						||
          >/dev/null 2>&1; \
 | 
						||
    then
 | 
						||
      $verbose "Running $bibtex $filename_noext ..."
 | 
						||
      if $bibtex "$filename_noext" >&5; then :; else
 | 
						||
        echo "$0: $bibtex exited with bad status, quitting." >&2
 | 
						||
        exit 1
 | 
						||
      fi
 | 
						||
    fi
 | 
						||
 | 
						||
    # What we'll run texindex on -- exclude non-index files.
 | 
						||
    # Since we know index files are last, it is correct to remove everything
 | 
						||
    # before .aux and .?o?.  But don't really do <anything>o<anything>
 | 
						||
    # -- don't match whitespace as <anything>.
 | 
						||
    # Otherwise, if orig_xref_files contains something like
 | 
						||
    #   foo.xo foo.whatever
 | 
						||
    # the space after the o will get matched.
 | 
						||
    index_files=`echo "$orig_xref_files" \
 | 
						||
                 | sed "s!.*\.aux!!g;
 | 
						||
                        s!./$filename_noext\.[^ ]o[^ ]!!g;
 | 
						||
                        s/^[ ]*//;s/[ ]*$//"`
 | 
						||
    # Run texindex (or makeindex) on current index files.  If they
 | 
						||
    # already exist, and after running TeX a first time the index
 | 
						||
    # files don't change, then there's no reason to run TeX again.
 | 
						||
    # But we won't know that if the index files are out of date or
 | 
						||
    # nonexistent.
 | 
						||
    if test -n "$texindex" && test -n "$index_files"; then
 | 
						||
      $verbose "Running $texindex $index_files ..."
 | 
						||
      if $texindex $index_files 2>&5 1>&2; then :; else
 | 
						||
         echo "$0: $texindex exited with bad status, quitting." >&2
 | 
						||
         exit 1
 | 
						||
      fi
 | 
						||
    fi
 | 
						||
 | 
						||
    # Finally, run TeX.
 | 
						||
    # Prevent $ESCAPE from being interpreted by the shell if it happens
 | 
						||
    # to be `/'.
 | 
						||
    $batch tex_args="\\${escape}nonstopmode\ \\${escape}input"
 | 
						||
    cmd="$tex $tex_args $filename_input"
 | 
						||
    $verbose "Running $cmd ..."
 | 
						||
    if $cmd >&5; then :; else
 | 
						||
      echo "$0: $tex exited with bad status, quitting." >&2
 | 
						||
      echo "$0: see $filename_noext.log for errors." >&2
 | 
						||
      test "$clean" = t \
 | 
						||
        && cp "$filename_noext.log" "$orig_pwd"
 | 
						||
      exit 1
 | 
						||
    fi
 | 
						||
 | 
						||
 | 
						||
    # Decide if looping again is needed.
 | 
						||
    finished=t
 | 
						||
 | 
						||
    # LaTeX (and the package changebar) report in the LOG file if it
 | 
						||
    # should be rerun.  This is needed for files included from
 | 
						||
    # subdirs, since texi2dvi does not try to compare xref files in
 | 
						||
    # subdirs.  Performing xref files test is still good since LaTeX
 | 
						||
    # does not report changes in xref files.
 | 
						||
    if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then
 | 
						||
      finished=
 | 
						||
    fi
 | 
						||
 | 
						||
    # Check if xref files changed.
 | 
						||
    new_xref_files=`$get_xref_files "$filename_noext"`
 | 
						||
    $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
 | 
						||
    $verbose "New xref files      = `echo $new_xref_files | sed 's|\./||g'`"
 | 
						||
 | 
						||
    # If old and new lists don't at least have the same file list,
 | 
						||
    # then one file or another has definitely changed.
 | 
						||
    test "x$orig_xref_files" != "x$new_xref_files" && finished=
 | 
						||
 | 
						||
    # File list is the same.  We must compare each file until we find
 | 
						||
    # a difference.
 | 
						||
    if test -n "$finished"; then
 | 
						||
      for this_file in $new_xref_files; do
 | 
						||
        $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
 | 
						||
        # cmp -s returns nonzero exit status if files differ.
 | 
						||
        if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
 | 
						||
          # We only need to keep comparing until we find one that
 | 
						||
          # differs, because we'll have to run texindex & tex again no
 | 
						||
          # matter how many more there might be.
 | 
						||
          finished=
 | 
						||
          $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
 | 
						||
          test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
 | 
						||
          break
 | 
						||
        fi
 | 
						||
      done
 | 
						||
    fi
 | 
						||
 | 
						||
    # If finished, exit the loop, else rerun the loop.
 | 
						||
    test -n "$finished" && break
 | 
						||
  done
 | 
						||
 | 
						||
  # If we were in clean mode, compilation was in a tmp directory.
 | 
						||
  # Copy the DVI (or PDF) file into the directory where the compilation
 | 
						||
  # has been done.  (The temp dir is about to get removed anyway.)
 | 
						||
  # We also return to the original directory so that
 | 
						||
  # - the next file is processed in correct conditions
 | 
						||
  # - the temporary file can be removed
 | 
						||
  if test -n "$clean"; then
 | 
						||
    if test -n "$oname"; then
 | 
						||
       dest=$oname
 | 
						||
    else
 | 
						||
       dest=$orig_pwd
 | 
						||
    fi
 | 
						||
    $verbose "Copying $oformat file from `pwd` to $dest"
 | 
						||
    cp -p "./$filename_noext.$oformat" "$dest"
 | 
						||
    cd / # in case $orig_pwd is on a different drive (for DOS)
 | 
						||
    cd $orig_pwd || exit 1
 | 
						||
  fi
 | 
						||
 | 
						||
  # Remove temporary files.
 | 
						||
  if test "x$debug" = "x"; then
 | 
						||
    $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
 | 
						||
    cd /
 | 
						||
    rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
 | 
						||
  fi
 | 
						||
done
 | 
						||
 | 
						||
$verbose "$0 done."
 | 
						||
exit 0 # exit successfully, not however we ended the loop.
 |