diff options
Diffstat (limited to 'Master/bin/i386-darwin/makempx')
-rwxr-xr-x | Master/bin/i386-darwin/makempx | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/Master/bin/i386-darwin/makempx b/Master/bin/i386-darwin/makempx new file mode 100755 index 00000000000..8aaa9bac1dc --- /dev/null +++ b/Master/bin/i386-darwin/makempx @@ -0,0 +1,181 @@ +#!/bin/sh +# $Id: makempx.in,v 1.18 2005/06/22 17:33:26 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. +# +# +version=0.9 + +: ${DMP=dmp} +: ${DVITOMP=dvitomp} +: ${MAKEMPX_BINDIR=`echo $0 | sed 's%/[^/]*$%%'`} +: ${MPTEXPRE=mptexpre.tex} +: ${MPTOTEX='mpto -tex'} +: ${MPTOTR='mpto -troff'} +: ${NEWER=newer} +# This is oriented towards GNU roff: old value was +# 'eqn -Tpost -d\$\$ | troff -Tpost' +: ${TROFF='eqn -Tps -d\$\$ | troff -Tps'} + +# convert relative path to absolute in $MAKEMPX_BINDIR: +case "$MAKEMPX_BINDIR" in + /*) ;; + *) MAKEMPX_BINDIR=`pwd`/$MAKEMPX_BINDIR;; +esac + +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|-tex=<program>|-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 metapost@tug.org." + + +mode=tex + +while test $# -gt 0; do + case "$1" in + -help|--help) + echo "$usage"; exit 0;; + -version|--version) + echo "`basename $0` $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;; + -tex=*|--tex=*) mode=tex; TEX=`echo "$1" | sed 's/^-*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 + + test -z "$TEX" && \ + TEX=`sed -n '1s/%\&[ ]*\([^
]*\).*$/\1 --parse-first-line/p;q' mpx$$.tex` + test -z "$TEX" && TEX='tex --parse-first-line' + + if $TEX --interaction=batchmode mpx$$.tex </dev/null >/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 |