1#!/bin/sh 2# original mktextfm -- make a new TFM file, because one wasn't found. 3# 4# (If you change or delete the word `original' on the previous line, 5# installation won't write this script over yours.) 6# 7# Primarily written by Thomas Esser, Karl Berry, and Olaf Weber. 8# Public domain. 9 10version='$Id: mktextfm,v 1.11 2013/03/13 20:24:27 vojta Exp $' 11progname=`echo $0 | sed 's%.*/%%'` 12usage="Usage: $progname [--destdir DESTDIR] FONT. 13 14Makes a TFM file for FONT, if possible. Use DESTDIR for the root of where 15to install into, either the absolute directory name to use (if it starts 16with a /) or relative to the default DESTDIR (if not)." 17 18# Handle non-positional options, except for --version/--help 19while test $# -gt 0; do 20 case "$1" in 21 --destdir) shift; DEST="$1"; shift ;; 22 --destdir=*) DEST=`echo "$1" | sed 's/--destdir=//'`; shift ;; 23 --version|-version) break ;; 24 --help|-help) break ;; 25 *) break ;; 26 esac 27done 28 29# Common code for all scripts. 30: ${MT_TEXMFMAIN=`kpsewhich --expand-path='$TEXMFMAIN'`} 31: ${MT_MKTEX_OPT=`kpsewhich --format='web2c files' mktex.opt`} 32test -n "$MT_MKTEX_OPT" || MT_MKTEX_OPT="$MT_TEXMFMAIN/web2c/mktex.opt" 33if test ! -f "$MT_MKTEX_OPT"; then 34 echo "$progname: Cannot find mktex.opt; check your installation." >&2 35 exit 1 36fi 37 38. "$MT_MKTEX_OPT" 39 40# Where do potential mf driver files go? 41case "$MT_FEATURES" in 42 *nomfdrivers*) 43 : ${MT_MFDESTDIR=`pwd`} 44 export MT_MFDESTDIR;; 45esac 46 47# start of redirection stdout -> stderr, stdin <- /dev/null 48( 49 50NAME=`basename "$1" .tfm` 51MAG=1 # mag=0 fails with larm1000.mf 52#DEST="$2" 53DPI=$BDPI 54 55OIFS=$IFS; IFS=$SEP 56set x `"$MT_MKTEXNAM" $NAME $DPI $MODE $DEST`; shift 57IFS=$OIFS 58 59PKDEST="$1" 60TFMDEST="$2" 61PKDESTDIR=`echo "$PKDEST" | sed 's%/[^/][^/]*$%%'` # can't rely on dirname 62TFMDESTDIR=`echo "$TFMDEST" | sed 's%/[^/][^/]*$%%'` 63PKNAME=`basename "$PKDEST"` 64TFMNAME=$NAME.tfm 65GFNAME=$NAME.$DPI'gf' 66 67if test -r "$TFMDESTDIR/$TFMNAME"; then 68 echo "$progname: $TFMDESTDIR/$TFMNAME already exists." >&2 69 echo "$TFMDESTDIR/$TFMNAME" >$STDOUT 70 "$MT_MKTEXUPD" "$TFMDESTDIR" $TFMNAME 71 exit 72fi 73 74# Try to create the destdir first. Do not create fonts, if this fails. 75"$MT_MKTEXDIR" "$TFMDESTDIR" 76if test ! -d "$TFMDESTDIR"; then 77 echo "$progname: mktexdir $TFMDESTDIR failed." 78 exit 1 79fi 80 81# Check if this font is supported by hbf2gf else use metafont. 82if (hbf2gf -q -t $NAME) >/dev/null 2>&1; then 83 cmd="hbf2gf -g $NAME $DPI" 84else 85 # determine the progname of metafont to use; prefer mf-nowin. 86 if (mf-nowin --version) >/dev/null 2>&1; then 87 MF="mf-nowin -progname=mf" 88 else 89 MF=mf 90 fi 91 92 cmd="$MF \mode:=$MODE; mag:=$MAG; nonstopmode; input $NAME" 93fi 94 95echo "$progname: Running $cmd" 96$cmd </dev/null || { 97 # Don't abort if only "Strange path", "bad pos" or "angle(0,0)" 98 # errors occurr. 99 grep '^!' $NAME.log | sort >$$.errs 2>/dev/null 100 grep '^! Strange path' $$.errs >$$.strange 2>/dev/null 101 grep '^! bad pos.' $$.errs >$$.badpos 2>/dev/null 102 grep '^! angle(0,0) is taken as zero.' $$.errs >$$.angle 2>/dev/null 103 cat $$.badpos $$.strange $$.angle | sort > $$.errs_accept 104 if cmp $$.errs $$.errs_accept >/dev/null 2>&1; then 105 test -s $$.strange >/dev/null 2>&1 \ 106 && echo "$progname: warning: \`$cmd' caused strange path errors." >&2 107 test -s $$.badpos >/dev/null 2>&1 \ 108 && echo "$progname: warning: \`$cmd' caused bad pos errors." >&2 109 test -s $$.angle >/dev/null 2>&1 \ 110 && echo "$progname: warning: \`$cmd' caused angle(0,0) errors." >&2 111 else 112 echo "$progname: \`$cmd' failed." >&2 113 test -s $NAME.log && mv -f $NAME.log "$KPSE_DOT" 114 exit 1; 115 fi 116} 117 118# hbf2gf just produces a .pl file: 119test -r ./$NAME.pl && pltotf ./$NAME.pl $TFMNAME 120test -r $TFMNAME || { echo "$progname: \`$cmd' failed to make $TFMNAME."; exit 1; } 121 122# Install the TFM file carefully, since others may be working simultaneously. 123# Use cp when mv fails, since DOS will fail mv for deeply-nested directories. 124mv $TFMNAME "$TFMDESTDIR/tfm$$.tmp" 2>/dev/null \ 125 || cp $TFMNAME "$TFMDESTDIR/tfm$$.tmp" || exit 1 126cd "$TFMDESTDIR" || exit 1 127chmod `kpsestat -xst,go-w .` tfm$$.tmp 128test -r $TFMNAME || mv tfm$$.tmp $TFMNAME || exit 1 129 130# OK, success with the TFM. 131"$MT_MKTEXUPD" "$TFMDESTDIR" $TFMNAME 132echo "$TFMDESTDIR/$TFMNAME" >$STDOUT 133echo "$progname: $TFMDESTDIR/$TFMNAME: successfully generated." >&2 134 135# Since we probably made a GF(->PK) file, too, may as well install it if 136# it's needed. 137cd $TEMPDIR 138if test -r $GFNAME && test ! -f "$PKDESTDIR/$PKNAME"; then 139 gftopk ./$GFNAME $PKNAME || exit 1 140 "$MT_MKTEXDIR" "$PKDESTDIR" 141 mv $PKNAME "$PKDESTDIR/pk$$.tmp" 2>/dev/null \ 142 || cp $PKNAME "$PKDESTDIR/pk$$.tmp" || exit 1 143 cd "$PKDESTDIR" || exit 1 144 if test -f $PKNAME; then 145 rm -f pk$$.tmp 146 else 147 chmod `kpsestat -xst,go-w .` pk$$.tmp 148 mv pk$$.tmp $PKNAME 149 "$MT_MKTEXUPD" "$PKDESTDIR" $PKNAME 150 fi 151fi 152) 1>&2 </dev/null 153