~ubuntu-branches/ubuntu/trusty/bash/trusty-security

« back to all changes in this revision

Viewing changes to support/texi2dvi

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-03-03 22:52:05 UTC
  • mfrom: (1.3.5) (2.2.6 experimental)
  • Revision ID: package-import@ubuntu.com-20140303225205-87ltrt5kspeq0g1b
Tags: 4.3-1ubuntu1
* Merge with Debian; remaining changes:
  - skel.bashrc:
    - Run lesspipe.
    - Enable ls aliases.
    - Set options in ll alias to -alF.
    - Define an alert alias.
    - Enabled colored grep aliases.
  - etc.bash.bashrc:
    - Add sudo hint.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh
 
2
# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
 
3
# $Id: texi2dvi,v 1.14 2003/02/05 00:42:33 karl Exp $
 
4
#
 
5
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
 
6
# 2002, 2003 Free Software Foundation, Inc.
 
7
#
 
8
#   This program is free software: you can redistribute it and/or modify
 
9
#   it under the terms of the GNU General Public License as published by
 
10
#   the Free Software Foundation, either version 3 of the License, or
 
11
#   (at your option) any later version.
 
12
#
 
13
#   This program is distributed in the hope that it will be useful,
 
14
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
#   GNU General Public License for more details.
 
17
#
 
18
#   You should have received a copy of the GNU General Public License
 
19
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
20
#
 
21
# Original author: Noah Friedman <friedman@gnu.org>.
 
22
#
 
23
# Please send bug reports, etc. to bug-texinfo@gnu.org.
 
24
# If possible, please send a copy of the output of the script called with
 
25
# the `--debug' option when making a bug report.
 
26
 
 
27
# This string is expanded by rcs automatically when this file is checked out.
 
28
rcs_revision='$Revision: 1.14 $'
 
29
rcs_version=`set - $rcs_revision; echo $2`
 
30
program=`echo $0 | sed -e 's!.*/!!'`
 
31
version="texi2dvi (GNU Texinfo 4.5) $rcs_version
 
32
 
 
33
Copyright (C) 2003 Free Software Foundation, Inc.
 
34
There is NO warranty.  You may redistribute this software
 
35
under the terms of the GNU General Public License.
 
36
For more information about these matters, see the files named COPYING."
 
37
 
 
38
usage="Usage: $program [OPTION]... FILE...
 
39
 
 
40
Run each Texinfo or LaTeX FILE through TeX in turn until all
 
41
cross-references are resolved, building all indices.  The directory
 
42
containing each FILE is searched for included files.  The suffix of FILE
 
43
is used to determine its language (LaTeX or Texinfo).
 
44
 
 
45
Makeinfo is used to perform Texinfo macro expansion before running TeX
 
46
when needed.
 
47
 
 
48
Operation modes:
 
49
  -b, --batch         no interaction
 
50
  -c, --clean         remove all auxiliary files
 
51
  -D, --debug         turn on shell debugging (set -x)
 
52
  -h, --help          display this help and exit successfully
 
53
  -o, --output=OFILE  leave output in OFILE (implies --clean);
 
54
                      Only one input FILE may be specified in this case
 
55
  -q, --quiet         no output unless errors (implies --batch)
 
56
  -s, --silent        same as --quiet
 
57
  -v, --version       display version information and exit successfully
 
58
  -V, --verbose       report on what is done
 
59
 
 
60
TeX tuning:
 
61
  -@                   use @input instead of \input; for preloaded Texinfo
 
62
  -e, -E, --expand     force macro expansion using makeinfo
 
63
  -I DIR               search DIR for Texinfo files
 
64
  -l, --language=LANG  specify the LANG of FILE (LaTeX or Texinfo)
 
65
  -p, --pdf            use pdftex or pdflatex for processing
 
66
  -t, --texinfo=CMD    insert CMD after @setfilename in copy of input file
 
67
                       multiple values accumulate
 
68
 
 
69
The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
 
70
TEX (or PDFTEX), and TEXINDEX environment variables are used to run
 
71
those commands, if they are set.
 
72
 
 
73
Email bug reports to <bug-texinfo@gnu.org>,
 
74
general questions and discussion to <help-texinfo@gnu.org>.
 
75
Texinfo home page: http://www.gnu.org/software/texinfo/"
 
76
 
 
77
# Initialize variables for option overriding and otherwise.
 
78
# Don't use `unset' since old bourne shells don't have this command.
 
79
# Instead, assign them an empty value.
 
80
batch=false     # eval for batch mode
 
81
clean=
 
82
debug=
 
83
escape='\'
 
84
expand=         # t for expansion via makeinfo
 
85
miincludes=     # makeinfo include path
 
86
oformat=dvi
 
87
oname=          # --output
 
88
quiet=          # by default let the tools' message be displayed
 
89
set_language=
 
90
textra=
 
91
tmpdir=${TMPDIR:-/tmp}/t2d$$  # avoid collisions on 8.3 filesystems.
 
92
txincludes=     # TEXINPUTS extensions, with trailing colon
 
93
txiprereq=19990129 # minimum texinfo.tex version to have macro expansion
 
94
verbose=false   # echo for verbose mode
 
95
 
 
96
orig_pwd=`pwd`
 
97
 
 
98
# Systems which define $COMSPEC or $ComSpec use semicolons to separate
 
99
# directories in TEXINPUTS.
 
100
if test -n "$COMSPEC$ComSpec"; then
 
101
  path_sep=";"
 
102
else
 
103
  path_sep=":"
 
104
fi
 
105
 
 
106
# Pacify verbose cds.
 
107
CDPATH=${ZSH_VERSION+.}$path_sep
 
108
 
 
109
# In case someone crazy insists on using grep -E.
 
110
: ${EGREP=egrep}
 
111
 
 
112
# Save this so we can construct a new TEXINPUTS path for each file.
 
113
TEXINPUTS_orig="$TEXINPUTS"
 
114
# Unfortunately makeindex does not read TEXINPUTS.
 
115
INDEXSTYLE_orig="$INDEXSTYLE"
 
116
export TEXINPUTS INDEXSTYLE
 
117
 
 
118
# Push a token among the arguments that will be used to notice when we
 
119
# ended options/arguments parsing.
 
120
# Use "set dummy ...; shift" rather than 'set - ..." because on
 
121
# Solaris set - turns off set -x (but keeps set -e).
 
122
# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
 
123
# still expand "$@" to a single argument (the empty string) rather
 
124
# than nothing at all.
 
125
arg_sep="$$--$$"
 
126
set dummy ${1+"$@"} "$arg_sep"; shift
 
127
 
 
128
 
129
# Parse command line arguments.
 
130
while test x"$1" != x"$arg_sep"; do
 
131
 
 
132
  # Handle --option=value by splitting apart and putting back on argv.
 
133
  case "$1" in
 
134
    --*=*)
 
135
      opt=`echo "$1" | sed -e 's/=.*//'`
 
136
      val=`echo "$1" | sed -e 's/[^=]*=//'`
 
137
      shift
 
138
      set dummy "$opt" "$val" ${1+"$@"}; shift
 
139
      ;;
 
140
  esac
 
141
 
 
142
  # This recognizes --quark as --quiet.  So what.
 
143
  case "$1" in
 
144
    -@ ) escape=@;;
 
145
    # Silently and without documentation accept -b and --b[atch] as synonyms.
 
146
    -b | --b*) batch=eval;;
 
147
    -q | -s | --q* | --s*) quiet=t; batch=eval;;
 
148
    -c | --c*) clean=t;;
 
149
    -D | --d*) debug=t;;
 
150
    -e | -E | --e*) expand=t;;
 
151
    -h | --h*) echo "$usage"; exit 0;;
 
152
    -I | --I*)
 
153
      shift
 
154
      miincludes="$miincludes -I $1"
 
155
      txincludes="$txincludes$1$path_sep"
 
156
      ;;
 
157
    -l | --l*) shift; set_language=$1;;
 
158
    -o | --o*)
 
159
      shift
 
160
      clean=t
 
161
      case "$1" in
 
162
        /* | ?:/*) oname=$1;;
 
163
                *) oname="$orig_pwd/$1";;
 
164
      esac;;
 
165
    -p | --p*) oformat=pdf;;
 
166
    -t | --t*) shift; textra="$textra\\
 
167
$1";;
 
168
    -v | --vers*) echo "$version"; exit 0;;
 
169
    -V | --verb*) verbose=echo;;
 
170
    --) # What remains are not options.
 
171
      shift
 
172
      while test x"$1" != x"$arg_sep"; do
 
173
        set dummy ${1+"$@"} "$1"; shift
 
174
        shift
 
175
      done
 
176
      break;;
 
177
    -*)
 
178
      echo "$0: Unknown or ambiguous option \`$1'." >&2
 
179
      echo "$0: Try \`--help' for more information." >&2
 
180
      exit 1;;
 
181
    *) set dummy ${1+"$@"} "$1"; shift;;
 
182
   esac
 
183
   shift
 
184
done
 
185
# Pop the token
 
186
shift
 
187
 
 
188
# Interpret remaining command line args as filenames.
 
189
case $# in
 
190
 0)
 
191
  echo "$0: Missing file arguments." >&2
 
192
  echo "$0: Try \`--help' for more information." >&2
 
193
  exit 2
 
194
  ;;
 
195
 1) ;;
 
196
 *)
 
197
  if test -n "$oname"; then
 
198
    echo "$0: Can't use option \`--output' with more than one argument." >&2
 
199
    exit 2
 
200
  fi
 
201
  ;;
 
202
esac
 
203
 
 
204
# Prepare the temporary directory.  Remove it at exit, unless debugging.
 
205
if test -z "$debug"; then
 
206
  trap "cd / && rm -rf $tmpdir" 0 1 2 15
 
207
fi
 
208
 
 
209
# Create the temporary directory with strict rights
 
210
(umask 077 && mkdir $tmpdir) || exit 1
 
211
 
 
212
# Prepare the tools we might need.  This may be extra work in some
 
213
# cases, but improves the readibility of the script.
 
214
utildir=$tmpdir/utils
 
215
mkdir $utildir || exit 1
 
216
 
 
217
# A sed script that preprocesses Texinfo sources in order to keep the
 
218
# iftex sections only.  We want to remove non TeX sections, and
 
219
# comment (with `@c texi2dvi') TeX sections so that makeinfo does not
 
220
# try to parse them.  Nevertheless, while commenting TeX sections,
 
221
# don't comment @macro/@end macro so that makeinfo does propagate
 
222
# them.  Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo
 
223
# doesn't work well enough (yet) to use that, so work around with sed.
 
224
comment_iftex_sed=$utildir/comment.sed
 
225
cat <<EOF >$comment_iftex_sed
 
226
/^@tex/,/^@end tex/{
 
227
  s/^/@c texi2dvi/
 
228
}
 
229
/^@iftex/,/^@end iftex/{
 
230
  s/^/@c texi2dvi/
 
231
  /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
 
232
    s/^@c texi2dvi//
 
233
  }
 
234
}
 
235
/^@html/,/^@end html/{
 
236
  s/^/@c (texi2dvi)/
 
237
}
 
238
/^@ifhtml/,/^@end ifhtml/{
 
239
  s/^/@c (texi2dvi)/
 
240
}
 
241
/^@ifnottex/,/^@end ifnottex/{
 
242
  s/^/@c (texi2dvi)/
 
243
}
 
244
/^@ifinfo/,/^@end ifinfo/{
 
245
  /^@node/p
 
246
  /^@menu/,/^@end menu/p
 
247
  t
 
248
  s/^/@c (texi2dvi)/
 
249
}
 
250
s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
 
251
s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/
 
252
EOF
 
253
# Uncommenting is simple: Remove any leading `@c texi2dvi'.
 
254
uncomment_iftex_sed=$utildir/uncomment.sed
 
255
cat <<EOF >$uncomment_iftex_sed
 
256
s/^@c texi2dvi//
 
257
EOF
 
258
 
 
259
# A shell script that computes the list of xref files.
 
260
# Takes the filename (without extension) of which we look for xref
 
261
# files as argument.  The index files must be reported last.
 
262
get_xref_files=$utildir/get_xref.sh
 
263
cat <<\EOF >$get_xref_files
 
264
#! /bin/sh
 
265
 
 
266
# Get list of xref files (indexes, tables and lists).
 
267
# Find all files having root filename with a two-letter extension,
 
268
# saves the ones that are really Texinfo-related files.  .?o? catches
 
269
# many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more.
 
270
for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
 
271
  # If file is empty, skip it.
 
272
  test -s "$this_file" || continue
 
273
  # If the file is not suitable to be an index or xref file, don't
 
274
  # process it.  The file can't be if its first character is not a
 
275
  # backslash or single quote.
 
276
  first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
 
277
  if test "x$first_character" = "x\\" \
 
278
     || test "x$first_character" = "x'"; then
 
279
    xref_files="$xref_files ./$this_file"
 
280
  fi
 
281
done
 
282
echo "$xref_files"
 
283
EOF
 
284
chmod 500 $get_xref_files
 
285
 
 
286
# File descriptor usage:
 
287
# 0 standard input
 
288
# 1 standard output (--verbose messages)
 
289
# 2 standard error
 
290
# 3 some systems may open it to /dev/tty
 
291
# 4 used on the Kubota Titan
 
292
# 5 tools output (turned off by --quiet)
 
293
 
 
294
# Tools' output.  If quiet, discard, else redirect to the message flow.
 
295
if test "$quiet" = t; then
 
296
  exec 5>/dev/null
 
297
else
 
298
  exec 5>&1
 
299
fi
 
300
 
 
301
# Enable tracing
 
302
test "$debug" = t && set -x
 
303
 
 
304
 
305
# TeXify files.
 
306
 
 
307
for command_line_filename in ${1+"$@"}; do
 
308
  $verbose "Processing $command_line_filename ..."
 
309
 
 
310
  # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
 
311
  # prepend `./' in order to avoid that the tools take it as an option.
 
312
  echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \
 
313
  || command_line_filename="./$command_line_filename"
 
314
 
 
315
  # See if the file exists.  If it doesn't we're in trouble since, even
 
316
  # though the user may be able to reenter a valid filename at the tex
 
317
  # prompt (assuming they're attending the terminal), this script won't
 
318
  # be able to find the right xref files and so forth.
 
319
  if test ! -r "$command_line_filename"; then
 
320
    echo "$0: Could not read $command_line_filename, skipping." >&2
 
321
    continue
 
322
  fi
 
323
 
 
324
  # Get the name of the current directory.  We want the full path
 
325
  # because in clean mode we are in tmp, in which case a relative
 
326
  # path has no meaning.
 
327
  filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
 
328
  filename_dir=`cd "$filename_dir" >/dev/null && pwd`
 
329
 
 
330
  # Strip directory part but leave extension.
 
331
  filename_ext=`basename "$command_line_filename"`
 
332
  # Strip extension.
 
333
  filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
 
334
  ext=`echo "$filename_ext" | sed 's/^.*\.//'`
 
335
 
 
336
  # _src.  Use same basename since we want to generate aux files with
 
337
  # the same basename as the manual.  If --expand, then output the
 
338
  # macro-expanded file to here, else copy the original file.
 
339
  tmpdir_src=$tmpdir/src
 
340
  filename_src=$tmpdir_src/$filename_noext.$ext
 
341
 
 
342
  # _xtr.  The file with the user's extra commands.
 
343
  tmpdir_xtr=$tmpdir/xtr
 
344
  filename_xtr=$tmpdir_xtr/$filename_noext.$ext
 
345
 
 
346
  # _bak.  Copies of the previous xref files (another round is run if
 
347
  # they differ from the new one).
 
348
  tmpdir_bak=$tmpdir/bak
 
349
 
 
350
  # Make all those directories and give up if we can't succeed.
 
351
  mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1
 
352
 
 
353
  # Source file might include additional sources.
 
354
  # We want `.:$orig_pwd' before anything else.  (We'll add `.:' later
 
355
  # after all other directories have been turned into absolute paths.)
 
356
  # `.' goes first to ensure that any old .aux, .cps,
 
357
  # etc. files in ${directory} don't get used in preference to fresher
 
358
  # files in `.'.  Include orig_pwd in case we are in clean mode, where
 
359
  # we've cd'd to a temp directory.
 
360
  common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes"
 
361
   TEXINPUTS="$common$TEXINPUTS_orig"
 
362
  INDEXSTYLE="$common$INDEXSTYLE_orig"
 
363
 
 
364
  # Convert relative paths to absolute paths, so we can run in another
 
365
  # directory (e.g., in --clean mode, or during the macro-support
 
366
  # detection.)
 
367
  #
 
368
  # Empty path components are meaningful to tex.  We rewrite them
 
369
  # as `EMPTY' so they don't get lost when we split on $path_sep.
 
370
   TEXINPUTS=`echo $TEXINPUTS  |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
 
371
  INDEXSTYLE=`echo $INDEXSTYLE |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'`
 
372
  save_IFS=$IFS
 
373
  IFS=$path_sep
 
374
  set x $TEXINPUTS; shift
 
375
  TEXINPUTS=.
 
376
  for dir
 
377
  do
 
378
    case $dir in
 
379
      EMPTY)
 
380
        TEXINPUTS=$TEXINPUTS$path_sep
 
381
        ;;
 
382
      [\\/]* | ?:[\\/]*)        # Absolute paths don't need to be expansed.
 
383
        TEXINPUTS=$TEXINPUTS$path_sep$dir
 
384
        ;;
 
385
      *)
 
386
        abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs
 
387
        ;;
 
388
    esac
 
389
  done
 
390
  set x $INDEXSTYLE; shift
 
391
  INDEXSTYLE=.
 
392
  for dir
 
393
  do
 
394
    case $dir in
 
395
      EMPTY)
 
396
        INDEXSTYLE=$INDEXSTYLE$path_sep
 
397
        ;;
 
398
      [\\/]* | ?:[\\/]*)        # Absolute paths don't need to be expansed.
 
399
        INDEXSTYLE=$INDEXSTYLE$path_sep$dir
 
400
        ;;
 
401
      *)
 
402
        abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs
 
403
        ;;
 
404
    esac
 
405
  done
 
406
  IFS=$save_IFS
 
407
 
 
408
  # If the user explicitly specified the language, use that.
 
409
  # Otherwise, if the first line is \input texinfo, assume it's texinfo.
 
410
  # Otherwise, guess from the file extension.
 
411
  if test -n "$set_language"; then
 
412
    language=$set_language
 
413
  elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then
 
414
    language=texinfo
 
415
  else
 
416
    language=
 
417
  fi
 
418
 
 
419
  # Get the type of the file (latex or texinfo) from the given language
 
420
  # we just guessed, or from the file extension if not set yet.
 
421
  case ${language:-$filename_ext} in
 
422
    [lL]a[tT]e[xX] | *.ltx | *.tex)
 
423
      # Assume a LaTeX file.  LaTeX needs bibtex and uses latex for
 
424
      # compilation.  No makeinfo.
 
425
      bibtex=${BIBTEX:-bibtex}
 
426
      makeinfo= # no point in running makeinfo on latex source.
 
427
      texindex=${MAKEINDEX:-makeindex}
 
428
      if test $oformat = dvi; then
 
429
        tex=${LATEX:-latex}
 
430
      else
 
431
        tex=${PDFLATEX:-pdflatex}
 
432
      fi
 
433
      ;;
 
434
 
 
435
    *)
 
436
      # Assume a Texinfo file.  Texinfo files need makeinfo, texindex and tex.
 
437
      bibtex=
 
438
      texindex=${TEXINDEX:-texindex}
 
439
      if test $oformat = dvi; then
 
440
        tex=${TEX:-tex}
 
441
      else
 
442
        tex=${PDFTEX:-pdftex}
 
443
      fi
 
444
      # Unless required by the user, makeinfo expansion is wanted only
 
445
      # if texinfo.tex is too old.
 
446
      if test "$expand" = t; then
 
447
        makeinfo=${MAKEINFO:-makeinfo}
 
448
      else
 
449
        # Check if texinfo.tex performs macro expansion by looking for
 
450
        # its version.  The version is a date of the form YEAR-MO-DA.
 
451
        # We don't need to use [0-9] to match the digits since anyway
 
452
        # the comparison with $txiprereq, a number, will fail with non
 
453
        # digits.
 
454
        txiversion_tex=txiversion.tex
 
455
        echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex
 
456
        # Run in the tmpdir to avoid leaving files.
 
457
        eval `cd $tmpdir >/dev/null &&
 
458
              $tex $txiversion_tex 2>/dev/null |
 
459
              sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'`
 
460
        $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
 
461
        if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
 
462
          makeinfo=
 
463
        else
 
464
          makeinfo=${MAKEINFO:-makeinfo}
 
465
        fi
 
466
        # As long as we had to run TeX, offer the user this convenience
 
467
        if test "$txiformat" = Texinfo; then
 
468
          escape=@
 
469
        fi
 
470
      fi
 
471
      ;;
 
472
  esac
 
473
 
 
474
  # Expand macro commands in the original source file using Makeinfo.
 
475
  # Always use `end' footnote style, since the `separate' style
 
476
  #   generates different output (arguably this is a bug in -E).
 
477
  # Discard main info output, the user asked to run TeX, not makeinfo.
 
478
  if test -n "$makeinfo"; then
 
479
    $verbose "Macro-expanding $command_line_filename to $filename_src ..."
 
480
    sed -f $comment_iftex_sed "$command_line_filename" \
 
481
      | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
 
482
        -o /dev/null --macro-expand=- \
 
483
      | sed -f $uncomment_iftex_sed >"$filename_src"
 
484
    filename_input=$filename_src
 
485
  fi
 
486
 
 
487
  # If makeinfo failed (or was not even run), use the original file as input.
 
488
  if test $? -ne 0 \
 
489
     || test ! -r "$filename_src"; then
 
490
    $verbose "Reverting to $command_line_filename ..."
 
491
    filename_input=$filename_dir/$filename_ext
 
492
  fi
 
493
 
 
494
  # Used most commonly for @finalout, @smallbook, etc.
 
495
  if test -n "$textra"; then
 
496
    $verbose "Inserting extra commands: $textra"
 
497
    sed '/^@setfilename/a\
 
498
'"$textra" "$filename_input" >$filename_xtr
 
499
    filename_input=$filename_xtr
 
500
  fi
 
501
 
 
502
  # If clean mode was specified, then move to the temporary directory.
 
503
  if test "$clean" = t; then
 
504
    $verbose "cd $tmpdir_src"
 
505
    cd "$tmpdir_src" || exit 1
 
506
  fi
 
507
 
 
508
  while :; do # will break out of loop below
 
509
    orig_xref_files=`$get_xref_files "$filename_noext"`
 
510
 
 
511
    # Save copies of originals for later comparison.
 
512
    if test -n "$orig_xref_files"; then
 
513
      $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
 
514
      cp $orig_xref_files $tmpdir_bak
 
515
    fi
 
516
 
 
517
    # Run bibtex on current file.
 
518
    # - If its input (AUX) exists.
 
519
    # - If AUX contains both `\bibdata' and `\bibstyle'.
 
520
    # - If some citations are missing (LOG contains `Citation').
 
521
    #   or the LOG complains of a missing .bbl
 
522
    #
 
523
    # We run bibtex first, because I can see reasons for the indexes
 
524
    # to change after bibtex is run, but I see no reason for the
 
525
    # converse.
 
526
    #
 
527
    # Don't try to be too smart.  Running bibtex only if the bbl file
 
528
    # exists and is older than the LaTeX file is wrong, since the
 
529
    # document might include files that have changed.  Because there
 
530
    # can be several AUX (if there are \include's), but a single LOG,
 
531
    # looking for missing citations in LOG is easier, though we take
 
532
    # the risk to match false messages.
 
533
    if test -n "$bibtex" \
 
534
       && test -r "$filename_noext.aux" \
 
535
       && test -r "$filename_noext.log" \
 
536
       && (grep '^\\bibdata[{]'  "$filename_noext.aux" \
 
537
           && grep '^\\bibstyle[{]' "$filename_noext.aux" \
 
538
           && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
 
539
               || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
 
540
          >/dev/null 2>&1; \
 
541
    then
 
542
      $verbose "Running $bibtex $filename_noext ..."
 
543
      if $bibtex "$filename_noext" >&5; then :; else
 
544
        echo "$0: $bibtex exited with bad status, quitting." >&2
 
545
        exit 1
 
546
      fi
 
547
    fi
 
548
 
 
549
    # What we'll run texindex on -- exclude non-index files.
 
550
    # Since we know index files are last, it is correct to remove everything
 
551
    # before .aux and .?o?.  But don't really do <anything>o<anything>
 
552
    # -- don't match whitespace as <anything>.
 
553
    # Otherwise, if orig_xref_files contains something like
 
554
    #   foo.xo foo.whatever
 
555
    # the space after the o will get matched.
 
556
    index_files=`echo "$orig_xref_files" \
 
557
                 | sed "s!.*\.aux!!g;
 
558
                        s!./$filename_noext\.[^ ]o[^ ]!!g;
 
559
                        s/^[ ]*//;s/[ ]*$//"`
 
560
    # Run texindex (or makeindex) on current index files.  If they
 
561
    # already exist, and after running TeX a first time the index
 
562
    # files don't change, then there's no reason to run TeX again.
 
563
    # But we won't know that if the index files are out of date or
 
564
    # nonexistent.
 
565
    if test -n "$texindex" && test -n "$index_files"; then
 
566
      $verbose "Running $texindex $index_files ..."
 
567
      if $texindex $index_files 2>&5 1>&2; then :; else
 
568
         echo "$0: $texindex exited with bad status, quitting." >&2
 
569
         exit 1
 
570
      fi
 
571
    fi
 
572
 
 
573
    # Finally, run TeX.
 
574
    # Prevent $ESCAPE from being interpreted by the shell if it happens
 
575
    # to be `/'.
 
576
    $batch tex_args="\\${escape}nonstopmode\ \\${escape}input"
 
577
    cmd="$tex $tex_args $filename_input"
 
578
    $verbose "Running $cmd ..."
 
579
    if $cmd >&5; then :; else
 
580
      echo "$0: $tex exited with bad status, quitting." >&2
 
581
      echo "$0: see $filename_noext.log for errors." >&2
 
582
      test "$clean" = t \
 
583
        && cp "$filename_noext.log" "$orig_pwd"
 
584
      exit 1
 
585
    fi
 
586
 
 
587
 
 
588
    # Decide if looping again is needed.
 
589
    finished=t
 
590
 
 
591
    # LaTeX (and the package changebar) report in the LOG file if it
 
592
    # should be rerun.  This is needed for files included from
 
593
    # subdirs, since texi2dvi does not try to compare xref files in
 
594
    # subdirs.  Performing xref files test is still good since LaTeX
 
595
    # does not report changes in xref files.
 
596
    if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then
 
597
      finished=
 
598
    fi
 
599
 
 
600
    # Check if xref files changed.
 
601
    new_xref_files=`$get_xref_files "$filename_noext"`
 
602
    $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
 
603
    $verbose "New xref files      = `echo $new_xref_files | sed 's|\./||g'`"
 
604
 
 
605
    # If old and new lists don't at least have the same file list,
 
606
    # then one file or another has definitely changed.
 
607
    test "x$orig_xref_files" != "x$new_xref_files" && finished=
 
608
 
 
609
    # File list is the same.  We must compare each file until we find
 
610
    # a difference.
 
611
    if test -n "$finished"; then
 
612
      for this_file in $new_xref_files; do
 
613
        $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
 
614
        # cmp -s returns nonzero exit status if files differ.
 
615
        if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
 
616
          # We only need to keep comparing until we find one that
 
617
          # differs, because we'll have to run texindex & tex again no
 
618
          # matter how many more there might be.
 
619
          finished=
 
620
          $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
 
621
          test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
 
622
          break
 
623
        fi
 
624
      done
 
625
    fi
 
626
 
 
627
    # If finished, exit the loop, else rerun the loop.
 
628
    test -n "$finished" && break
 
629
  done
 
630
 
 
631
  # If we were in clean mode, compilation was in a tmp directory.
 
632
  # Copy the DVI (or PDF) file into the directory where the compilation
 
633
  # has been done.  (The temp dir is about to get removed anyway.)
 
634
  # We also return to the original directory so that
 
635
  # - the next file is processed in correct conditions
 
636
  # - the temporary file can be removed
 
637
  if test -n "$clean"; then
 
638
    if test -n "$oname"; then
 
639
       dest=$oname
 
640
    else
 
641
       dest=$orig_pwd
 
642
    fi
 
643
    $verbose "Copying $oformat file from `pwd` to $dest"
 
644
    cp -p "./$filename_noext.$oformat" "$dest"
 
645
    cd / # in case $orig_pwd is on a different drive (for DOS)
 
646
    cd $orig_pwd || exit 1
 
647
  fi
 
648
 
 
649
  # Remove temporary files.
 
650
  if test "x$debug" = "x"; then
 
651
    $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
 
652
    cd /
 
653
    rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
 
654
  fi
 
655
done
 
656
 
 
657
$verbose "$0 done."
 
658
exit 0 # exit successfully, not however we ended the loop.