# makefile for fpc version 2.0

# fpc version 1 command
F = fpc -n

# 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

# lexer and parser respectively
L = fplex
P = school

# C compiler, rm
C = gcc -pg
R = /bin/rm

# object files used by fpc
OBJ = fpc.o ffpgen.o fpl.o fpg.o parse.o fplstd.o

.SUFFIXES:

.SUFFIXES: .lex .grm .fp .o

.PRECIOUS: fpl.fp fpg.fp

.lex.fp:
	fplex $*.lex | sed "s/Def $*/Def $* fplerrcheck o/" > $*.fp

.grm.fp:
	$P $*.grm > $*.fp

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

fpc2: ${OBJ} ${FPLIBS}
	$C -o fpc2 ${OBJ} ${FPLIBS} ${FPRTS}

fpc.o: fpc.fp
	$F -m -i -p -s fpc.fp
	$C -c fpc.c
	$R -f fpc.c

clean:
	$R -f ${OBJ} ${FPLIBS} fpc2 core log log.mk mkffp


fp.o: fp.c
	$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
	cp ../../src/fp.c ../../src/fp.h ../../src/stdfp.h .

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

mkffp: mkffp.fp ffpgen.o fpl.o fpg.o parse.o fplstd.o ${FPLIBS}
	$F -m -i -p mkffp.fp
	$C -c mkffp.c
	$R mkffp.c
	$C -o mkffp mkffp.o ffpgen.o fpl.o fpg.o parse.o fplstd.o ${FPLIBS} ${FPRTS}
	$R mkffp.o
