| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | #! /bin/sh | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | # $Id: texi2dvi,v 1.14 2003/02/05 00:42:33 karl Exp $ | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | # | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, | 
					
						
							|  |  |  |  | # 2002, 2003 Free Software Foundation, Inc. | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | # | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | # 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 2, 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, you can either send email to this | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | # program's maintainer or write to: The Free Software Foundation, | 
					
						
							|  |  |  |  | # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | # | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # Original author: Noah Friedman <friedman@gnu.org>. | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | # | 
					
						
							|  |  |  |  | # Please send bug reports, etc. to bug-texinfo@gnu.org. | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | # If possible, please send a copy of the output of the script called with | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | # the `--debug' option when making a bug report. | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | # This string is expanded by rcs automatically when this file is checked out. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | rcs_revision='$Revision: 1.14 $' | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | rcs_version=`set - $rcs_revision; echo $2` | 
					
						
							|  |  |  |  | program=`echo $0 | sed -e 's!.*/!!'` | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | version="texi2dvi (GNU Texinfo 4.5) $rcs_version | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | Copyright (C) 2003 Free Software Foundation, Inc. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 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." | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | usage="Usage: $program [OPTION]... FILE... | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 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). | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | Makeinfo is used to perform Texinfo macro expansion before running TeX | 
					
						
							|  |  |  |  | when needed. | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 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>, | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | general questions and discussion to <help-texinfo@gnu.org>. | 
					
						
							|  |  |  |  | Texinfo home page: http://www.gnu.org/software/texinfo/" | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # Initialize variables for option overriding and otherwise. | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | # Don't use `unset' since old bourne shells don't have this command. | 
					
						
							|  |  |  |  | # Instead, assign them an empty value. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | batch=false     # eval for batch mode | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | clean= | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | debug= | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | escape='\' | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | expand=         # t for expansion via makeinfo | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | miincludes=     # makeinfo include path | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | oformat=dvi | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | oname=          # --output | 
					
						
							|  |  |  |  | quiet=          # by default let the tools' message be displayed | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | set_language= | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | textra= | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | tmpdir=${TMPDIR:-/tmp}/t2d$$  # avoid collisions on 8.3 filesystems. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | txincludes=     # TEXINPUTS extensions, with trailing colon | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 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 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | # Pacify verbose cds. | 
					
						
							|  |  |  |  | CDPATH=${ZSH_VERSION+.}$path_sep | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # In case someone crazy insists on using grep -E. | 
					
						
							|  |  |  |  | : ${EGREP=egrep} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | # Save this so we can construct a new TEXINPUTS path for each file. | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | TEXINPUTS_orig="$TEXINPUTS" | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # 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 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #  | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  | # Parse command line arguments. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | while test x"$1" != x"$arg_sep"; do | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   # Handle --option=value by splitting apart and putting back on argv. | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  |   case "$1" in | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     --*=*) | 
					
						
							|  |  |  |  |       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;; | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     -e | -E | --e*) expand=t;; | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     -h | --h*) echo "$usage"; exit 0;; | 
					
						
							|  |  |  |  |     -I | --I*) | 
					
						
							|  |  |  |  |       shift | 
					
						
							|  |  |  |  |       miincludes="$miincludes -I $1" | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |       txincludes="$txincludes$1$path_sep" | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |       ;; | 
					
						
							|  |  |  |  |     -l | --l*) shift; set_language=$1;; | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     -o | --o*) | 
					
						
							|  |  |  |  |       shift | 
					
						
							|  |  |  |  |       clean=t | 
					
						
							|  |  |  |  |       case "$1" in | 
					
						
							|  |  |  |  |         /* | ?:/*) oname=$1;; | 
					
						
							|  |  |  |  |                 *) oname="$orig_pwd/$1";; | 
					
						
							|  |  |  |  |       esac;; | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     -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. | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  |  |       shift | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |       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;; | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  |    esac | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |    shift | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | done | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # Pop the token | 
					
						
							|  |  |  |  | shift | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # Interpret remaining command line args as filenames. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | case $# in | 
					
						
							|  |  |  |  |  0) | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   echo "$0: Missing file arguments." >&2 | 
					
						
							|  |  |  |  |   echo "$0: Try \`--help' for more information." >&2 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   exit 2 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   ;; | 
					
						
							|  |  |  |  |  1) ;; | 
					
						
							|  |  |  |  |  *) | 
					
						
							|  |  |  |  |   if test -n "$oname"; then | 
					
						
							|  |  |  |  |     echo "$0: Can't use option \`--output' with more than one argument." >&2 | 
					
						
							|  |  |  |  |     exit 2 | 
					
						
							|  |  |  |  |   fi | 
					
						
							|  |  |  |  |   ;; | 
					
						
							|  |  |  |  | esac | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | # 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// | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | /^@html/,/^@end html/{ | 
					
						
							|  |  |  |  |   s/^/@c (texi2dvi)/ | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /^@ifhtml/,/^@end ifhtml/{ | 
					
						
							|  |  |  |  |   s/^/@c (texi2dvi)/ | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /^@ifnottex/,/^@end ifnottex/{ | 
					
						
							|  |  |  |  |   s/^/@c (texi2dvi)/ | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | /^@ifinfo/,/^@end ifinfo/{ | 
					
						
							|  |  |  |  |   /^@node/p | 
					
						
							|  |  |  |  |   /^@menu/,/^@end menu/p | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   t | 
					
						
							|  |  |  |  |   s/^/@c (texi2dvi)/ | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | s/^@ifnotinfo/@c texi2dvi@ifnotinfo/ | 
					
						
							|  |  |  |  | s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/ | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  | # many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | test "$debug" = t && set -x | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | #  | 
					
						
							|  |  |  |  | # TeXify files. | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | for command_line_filename in ${1+"$@"}; do | 
					
						
							|  |  |  |  |   $verbose "Processing $command_line_filename ..." | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \ | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   || command_line_filename="./$command_line_filename" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   # See if the file exists.  If it doesn't we're in trouble since, even | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     continue | 
					
						
							|  |  |  |  |   fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   # 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, | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes" | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |    TEXINPUTS="$common$TEXINPUTS_orig" | 
					
						
							|  |  |  |  |   INDEXSTYLE="$common$INDEXSTYLE_orig" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   # 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 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |   elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     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. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |         eval `cd $tmpdir >/dev/null && | 
					
						
							|  |  |  |  |               $tex $txiversion_tex 2>/dev/null | | 
					
						
							|  |  |  |  |               sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'` | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |         $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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # Expand macro commands in the original source file using Makeinfo. | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   # 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. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     $verbose "Reverting to $command_line_filename ..." | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     filename_input=$filename_dir/$filename_ext | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   # Used most commonly for @finalout, @smallbook, etc. | 
					
						
							|  |  |  |  |   if test -n "$textra"; then | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     $verbose "Inserting extra commands: $textra" | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     sed '/^@setfilename/a\ | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | '"$textra" "$filename_input" >$filename_xtr | 
					
						
							|  |  |  |  |     filename_input=$filename_xtr | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   # If clean mode was specified, then move to the temporary directory. | 
					
						
							|  |  |  |  |   if test "$clean" = t; then | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     $verbose "cd $tmpdir_src" | 
					
						
							|  |  |  |  |     cd "$tmpdir_src" || exit 1 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   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 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     # 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. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     index_files=`echo "$orig_xref_files" \ | 
					
						
							|  |  |  |  |                  | sed "s!.*\.aux!!g; | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |                         s!./$filename_noext\.[^ ]o[^ ]!!g; | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |                         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 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  |       fi | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Finally, run TeX. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     # 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" | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     $verbose "Running $cmd ..." | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # 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. | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |       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" | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |           break | 
					
						
							|  |  |  |  |         fi | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  |       done | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     # If finished, exit the loop, else rerun the loop. | 
					
						
							|  |  |  |  |     test -n "$finished" && break | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   done | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   # If we were in clean mode, compilation was in a tmp directory. | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # Copy the DVI (or PDF) file into the directory where the compilation | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  |  |     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" | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |     cd / # in case $orig_pwd is on a different drive (for DOS) | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |     cd $orig_pwd || exit 1 | 
					
						
							|  |  |  |  |   fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  |   fi | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  |  | done | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  |  | $verbose "$0 done." | 
					
						
							| 
									
										
										
										
											2001-11-13 17:56:06 +00:00
										 |  |  |  | exit 0 # exit successfully, not however we ended the loop. |