#!/bin/sh # '$Id: makempx.in,v 1.7 1997/12/01 19:21:12 olaf Exp $' # Make an MPX file from the labels in a MetaPost source file, # using mpto and either dvitomp (TeX) or dmp (troff). # From John Hobby's original (though there's not much of it left by now). # Public domain. rcs_revision='$Revision: 1.7 $' version=`set - $rcs_revision; echo $2` : ${DMP=dmp} : ${DVITOMP=dvitomp} : ${MAKEMPX_BINDIR=@BINDIR@} : ${MPTEXPRE=mptexpre.tex} : ${MPTOTEX="mpto -tex"} : ${MPTOTR="mpto -troff"} : ${NEWER=newer} : ${TEX=tex} : ${TROFF='eqn -d\$\$ | troff -Tpost'} PATH=$MAKEMPX_BINDIR:/bin:/usr/bin:$PATH # These names are documented in the MetaPost manual, so it's # unwise to change them. ERRLOG=mpxerr.log # file for an error log if necessary TEXERR=mpxerr.tex # file for erroneous TeX if any DVIERR=mpxerr.dvi # troublesome dvi file if any TROFF_INERR=mpxerr # file for erroneous troff input, if any TROFF_OUTERR=mpxerr.t # file for troublesome troff output, if any usage="Usage: $0 [-tex|-troff] MPFILE MPXFILE. If MPXFILE is older than MPFILE, translate the labels from the MetaPost input file MPFIle to low-level commands in MPXFILE, by running $MPTOTEX, $TEX, and $DVITOMP by default; or, if -troff is specified, $MPTOTR, $TROFF, and $DMP. The current directory is used for writing temporary files. Errors are left in mpxerr.{tex,log,dvi}. If the file named in \$MPTEXPRE (mptexpre.tex by default) exists, it is prepended to the output in tex mode. Email bug reports to tex-k@mail.tug.org." mode=tex while test $# -gt 0; do case "$1" in -help|--help) echo "$usage"; exit 0;; -version|--version) echo "`basename $0` (Web2c @web2cver@) $version" echo "There is NO warranty. This script is public domain. Primary author: John Hobby." exit 0;; -troff|--troff) mode=troff;; -tex|--tex) mode=tex;; -*) echo "$0: Invalid option: $1." >&2 echo "Try \``basename $0` --help' for more information." >&2 exit 1;; *) if test -z "$MPFILE"; then MPFILE=$1 # input file elif test -z "$MPXFILE"; then MPXFILE=$1 # output file else echo "$0: Extra argument $1." >&2 echo "Try \``basename $0` --help' for more information." >&2 exit 1 fi;; esac shift done if test -z "$MPFILE" || test -z "$MPXFILE"; then echo "$0: Need exactly two file arguments." >&2 echo "Try \``basename $0` --help' for more information." >&2 exit 1 fi trap "rm -f mpx$$.* $ERRLOG; exit 4" 1 2 3 15 # If MPX file is up-to-date, do nothing. if $NEWER $MPFILE $MPXFILE; then # Have to remake. # Step 0: Check typesetter mode for consistency. case "$mode" in tex) MPTO="$MPTOTEX";; troff) MPTO="$MPTOTR";; *) echo "$0: Unknown typesetter mode: $mode" >&2 exit 1;; esac # Step 1: Extract typesetter source from MetaPost source. if $MPTO $MPFILE >mpx$$.tex 2>$ERRLOG; then :; # success else # failure echo "$0: Command failed: $MPTO $MPFILE" >&2 cat $ERRLOG >&2 rm -f mpx$$.tex exit 1 fi if test "$mode" = troff; then mv -f mpx$$.tex mpx$$.i fi # Step 2: Run typesetter. if test "$mode" = tex; then if test -r $MPTEXPRE; then # Prepend user file. cat $MPTEXPRE mpx$$.tex >mpx$$.tmp mv mpx$$.tmp mpx$$.tex fi if $TEX --interaction=batchmode mpx$$.tex /dev/null; then WHATEVER_TO_MPX="$DVITOMP" INFILE=mpx$$.dvi INERROR=$DVIERR else # failure mv -f mpx$$.tex $TEXERR mv -f mpx$$.log $ERRLOG echo "$0: Command failed: $TEX $TEXERR; see $ERRLOG" >&2 exit 2 fi elif test "$mode" = troff; then if cat mpx$$.i | eval $TROFF >mpx$$.t; then # success, prepare for step 3. WHATEVER_TO_MPX="$DMP" INFILE=mpx$$.t INERROR=$TROFF_OUTERR else # failure mv -f mpx$$.i $TROFF_INERR echo "$0: Command failed: cat $TROFF_INERR | $TROFF" >&2 rm -f mpx$$.t exit 2 fi else echo "$0: Unknown typesetter mode: $mode; how did this happen?" >&2 exit 2 fi # Step 3: Translate typesetter output to a MetaPost MPX. if $WHATEVER_TO_MPX $INFILE $MPXFILE >$ERRLOG; then : # success else # failure mv -f $INFILE $INERROR test $mode = troff && mv -f mpx$$.i $TROFF_INERR echo "$0: Command failed: $WHATEVER_TO_MPX $INERROR $MPXFILE" >&2 # Better to remove $MPXFILE if something went wrong rather than # leaving behind an unfinished or unusable version since $NEWER # might think that all is fine if $MPXFILE exists. rm -f $MPXFILE cat $ERRLOG >&2 exit 3 fi rm -f $ERRLOG mpx$$.* fi exit 0