# This file makes Metafont in its various incarnations.
#

APE=/sys/src/ape
< $APE/config
CFLAGS=-B -D_POSIX_SOURCE -I../lib -c
LDFLAGS=
SHELL=/bin/rc

COMMONDEFINES=../lib/common.defines ../lib/texmf.defines

# Routines used in both TeX and Metafont.
EXTRAC=../lib/texmf.c
EXTRAH=../lib/texmf.h
EXTRAO=texmf.$O

# Routines used in TeX, Metafont, and BibTeX.
FILEIOC=../lib/openinout.c
FILEIOO=openinout.$O

OFILES=mf0.$O\
	mf1.$O\
	mf2.$O\
	mf3.$O\
	mf4.$O\
	mf5.$O\
	mf6.$O\
	mf7.$O\
	mf8.$O\
	mf9.$O

CFILES=${OFILES:%.$O=%.c}

LIB=../lib/lib.a$O

OBJS=$FILEIOO\
	$OFILES

IOBJS=iextra.$O\
	inimf.$O\
	$OBJS

VOBJS=mf-extra.$O\
	imf.$O\
	$OBJS

cpuobjtype=`{sed -n 's/^O=//p' /$cputype/mkfile}

all:V:		$O.inimf $O.virmf

triptrap:V:	$O.trapmf

$O.inimf:	$IOBJS $LIB
		$LD $LDFLAGS -o $target $prereq

$O.virmf:	$VOBJS $LIB
		$LD $LDFLAGS -o $target $prereq

run-trap:VE:
		rm -f trap.mf
		cp MFtrap/trap.mf .
		. ./trapenv
		$cpuobjtype.trapmf < MFtrap/trap1.in > /dev/null
		diff MFtrap/trapin.log trap.log
		$cpuobjtype.trapmf < MFtrap/trap2.in > trap.fot
		diff MFtrap/trap.log trap.log
		diff MFtrap/trap.fot trap.fot
		../texware/$cpuobjtype.tftopl trap.tfm trap.pl
		diff MFtrap/trap.pl trap.pl
		../mfware/$cpuobjtype.gftype -m -i trap.72270gf > trap.typ
		diff MFtrap/trap.typ trap.typ

# The `ini_to_trap' script changes mfd.h, instead of the change file, so
# retangling is not necessary.  After changing constants, making a
# trapmf means making an inimf.
# 
$O.trapmf:	stamp-trap
		mk $O.inimf
		mv $O.inimf $target

stamp-trap:	stamp-convert
		rm -f *.$O
		$SHELL ./ini_to_trap mfd.h
		touch stamp-trap

# tangle produces mf.p and mf.pool.
# 
mf.p:		mf.web cmf.ch ../stamp-tangle.$cputype
		# redirected to stop chatter - remove redirection for debugging
		../web/$cpuobjtype.tangle mf.web cmf.ch > /dev/null

$CFILES imf.c coerce.h mfd.h:	stamp-convert
		touch stamp-convert

stamp-convert:	mf.p fixcoerce.h $COMMONDEFINES
		$SHELL ./convert

# The (hand-coded) file $EXTRAC and the (generated) file imf.c have
# #ifdefs for INIMF, so we have to compile them differently.
# 
iextra.$O:	$EXTRAC mfd.h $EXTRAH
		$CC $CFLAGS -I. -DINIMF -DINI $EXTRAC
		mv $EXTRAO $target

inimf.$O:	imf.c mfd.h $EXTRAH
		cp imf.c inimf.c
		$CC $CFLAGS -DINIMF inimf.c

mf-extra.$O:	$EXTRAC mfd.h
		cp $EXTRAC mf-extra.c
		$CC $CFLAGS -I. mf-extra.c

$FILEIOO: $FILEIOC mfd.h
		$CC $CFLAGS -I. $FILEIOC

%.$O:		%.c mfd.h
		$CC $CFLAGS $stem.c

../stamp-tangle.$cputype:
		cd ..; objtype=$cputype mk stamp-tangle.$cputype

install:VQ:
		echo do mk install in ..

installall:VQ:
		echo do mk installall in ..

clean:V:
		rm -f stamp-* *.[$OS] [$OS].virmf [$OS].inimf [$OS].trapmf
		rm -f mfd.h coerce.h *.log *.base
		rm -f trap.* mf-extra.c

nuke:V:
		mk clean
		rm -f mf?.c imf.c mf.p mf.pool *gf *.tfm mfput.*
		rm -f '#'*'#' *~ *.bak

