# FPRTS is used for objects (commands) that are assumed to be there
# and don't need to be made. FPLIBS is used for objects that need
# making. The two have the same purpose, namely to provide linking
# search commands or files to ld
FPLIBS = # sort.o lib.o set.o fpformat.o store.o fp.o
FPRTS = `ldpath` -lnfp
C = gcc -O
F = fpc -n
M = gmake
R = /bin/rm
PARSOBJS = school.o lritems.o lalrgen.o parseg.o mkfp.o gscan.o fplstd.o

# installation information: bin directory, lib directory
BIN = /unc/biagioni/bin/${ARCH}
LIB = /usr/softlab/contrib/lib/${ARCH}

.SUFFIXES:

.SUFFIXES: .fp .o .grm .gen .run .res

.fp.o:
	$F $*.fp
	$C -c $*.c
	$R $*.c

.grm.gen:
#	$M school
	school $*.grm > $*.gen

.gen.run:
	cp $*.gen $*.fp
	$F -m $*.fp
	$R $*.fp
	$C -c $*.c
	$M parse.o ${FPLIBS}
	$C -o $*.run $*.o parse.o ${FPLIBS} ${FPRTS}
	$R $*.c $*.o

.run.res:
	$*.run < $*.tst > $*.res

current: school

fp.o:
	cp ../../src/fp.c ../../src/fp.h ../../src/stdfp.h .
#	$C -c -DNOCHECK fp.c
	$C -c fp.c

libs:
	sed '/^Def tstlib/,$$d' < ../../lib/lib.fp > lib.fp
	sed '/^Def tstsort/,$$d' < ../../lib/sort.fp > sort.fp
	sed '/^Def tststore/,$$d' < ../../lib/store.fp > store.fp
	sed '/^Def tstset/,$$d' < ../../lib/set.fp > set.fp
	sed '/^Def tstformat/,$$d' < ../../lib/fpformat.fp > fpformat.fp

nolibs:
	$R -f lib.fp sort.fp set.fp fpformat.fp store.fp fp.c stdfp.h fp.h

memo.o: memo.sv
	cp memo.sv memo.c
	$C -c memo.c

school.o: school.fp
	$F -m -i -o -p school.fp
	$C -c school.c
	$R school.c

school: ${PARSOBJS} ${FPLIBS}
	$C -o school ${PARSOBJS} ${FPLIBS} ${FPRTS}

gscan.fp: gscan.lex
	fplex gscan.lex | sed 's/^Def gscan/Def gscan fplerrcheck o/' > gscan.fp

simpleparser: simpleparser.fp
	$F -m simpleparser.fp
	$C -o simpleparser simpleparser.c ${FPLIBS} ${FPRTS}

prectab: prectab.fp parseg.c parseg.o
	$F -m -i prectab.fp
	$C -o prectab prectab.c parseg.o ${FPLIBS} ${FPRTS}

mkfp: mkfp.fp
	$F -m -o mkfp.fp
	$C -o mkfp mkfp.c ${FPLIBS} ${FPRTS}

parseg: parseg.fp
	$F -m -i parseg.fp
	$C -o parseg parseg.c ${FPLIBS} ${FPRTS}

clean:
	echo removing *.c *.o *.run *.res gscan school core
	touch tmp.c tmp.o tmp.run tmp.res gscan school core
	$R *.c *.o *.run *.res gscan school core

${BIN}/school: school
	install -s school ${BIN}/school

${LIB}/libfp.a: parse.fp
	$F parse.fp
	$C -c parse.c
	ar r ${LIB}/libfp.a parse.o
	ranlib ${LIB}/libfp.a
	$R parse.o parse.c

${LIB}/libnfp.a: parse.fp
	$F -n parse.fp
	$C -O -c parse.c
	ar r ${LIB}/libnfp.a parse.o
	ranlib ${LIB}/libnfp.a
	$R parse.o parse.c

install: ${LIB}/libnfp.a ${LIB}/libfp.a ${BIN}/school

gscan: gscan.fp fplstd.o ${FPLIBS}
	$F -m -i gscan.fp
	$C -o gscan gscan.c fplstd.o ${FPLIBS} ${FPRTS}
	$R gscan.c
