# standard defs
#MAIN = /usr
#LIBD = ${MAIN}/lib
#BIND = ${MAIN}/bin
# VERD: directory to which we copy source of installed code. Should NOT
# be the same as the actual source directory for fpc
# if no need to copy the source, set VERD=/tmp
#VERD = ${MAIN}/doc
#BAKD = /tmp		# directory for back ups
# actual defs
# if mk is aliased to make ARCH=xxxxx (or gmake ARCH=xxxx) so that the
# value of HW_OS is set automatically when using mk
MAIN = /afs/cs/user/biagioni/common/${ARCH}
LIBD = ${MAIN}/lib
BIND = ${MAIN}/bin
F = ${BIND}/fpc
VERD = /tmp
BAKD = /unc/biagioni/link/back
SRC = lib.fp set.fp store.fp sort.fp fpformat.fp makefile fp.c fp.h stdfp.h
TST = tstlib tststore tstsort tstset tstformat
OBJ = lib.o store.o sort.o set.o fpformat.o
LIBS = ${LIBD}/libfp.a ${LIBD}/libnfp.a ${LIBD}/libdfp.a
NOBJ = nlib.o nstore.o nsort.o nset.o nfpformat.o
DOBJ = dlib.o # dstore.o dsort.o dset.o dfpformat.o
C = gcc
CFLAGS = -O

all: ${OBJ} ${NOBJ} ${DOBJ} ${TST}

install: ${LIBS} ${TST}

test: ${TST}

clean:
	mkdir .tmp
	mv ${SRC} .tmp
	touch tmp
	rm -f *
	mv .tmp/* .
	rmdir .tmp

.SUFFIXES:

# make ${BIND}/fpc ($F) explicitly depend on nothing, otherwise make
# tries to make it using $C ${CFLAGS} ${BIND}/fpc.c -o ${BIND}/fpc
${BIND}/fpc:
	echo please make $F

tstlib: lib.fp fp.o $F
	cp lib.fp tstlib.fp
	$F -m tstlib.fp
	$C -o tstlib tstlib.c fp.o
	echo 1 | ./tstlib | tail -1
	rm -f tstlib*

tstset: set.fp fp.o $F
	cp set.fp tstset.fp
	$F -m tstset.fp
	$C -o tstset tstset.c fp.o
	echo 1 | ./tstset | tail -1
	rm -f tstset*

tststore: store.fp fp.o $F
	cp store.fp tststore.fp
	$F -m tststore.fp
	$C -o tststore tststore.c fp.o
	echo 1 | ./tststore | tail -1
	rm -f tststore*

tstsort: sort.fp fp.o $F
	cp sort.fp tstsort.fp
	$F -m tstsort.fp
	$C -o tstsort tstsort.c fp.o
	echo 1 | ./tstsort | tail -1
	rm -f tstsort*

tstformat: fpformat.fp lib.o set.o fp.o $F
	cp fpformat.fp tstformat.fp
	$F -mtstformat tstformat.fp
	$C -o tstformat tstformat.c lib.o set.o fp.o
	echo 1 | ./tstformat | tail -1
	rm -f tstformat*

.SUFFIXES: .c .o

fp.o: fp.c stdfp.h fp.h
	$C -c fp.c

.c.o:
	$C ${CFLAGS} -c $*.c
	/bin/rm $*.c

lib.c: lib.fp $F
	sed '/^Def tstlib/,$$d' < lib.fp | $F > lib.c

nlib.c: lib.fp $F
	sed '/^Def tstlib/,$$d' < lib.fp > nlib.fp
	$F -n nlib.fp
	rm -f nlib.fp

dlib.c: lib.fp $F
	sed '/^Def tstlib/,$$d' < lib.fp > dlib.fp
	cp lib.fp dlib.fp
	$F -d dlib.fp
	rm -f dlib.fp

set.c: set.fp $F
	sed '/^Def tstset/,$$d' < set.fp | $F > set.c

nset.c: set.fp $F
	sed '/^Def tstset/,$$d' < set.fp > nset.fp
	$F -n nset.fp
	rm -f nset.fp

dset.c: set.fp $F
	sed '/^Def tstset/,$$d' < set.fp > dset.fp
	$F -d dset.fp
	rm -f dset.fp

store.c: store.fp $F
	sed '/^Def tststore/,$$d' < store.fp | $F > store.c

nstore.c: store.fp $F
	sed '/^Def tststore/,$$d' < store.fp > nstore.fp
	$F -n nstore.fp
	rm -f nstore.fp

dstore.c: store.fp $F
	sed '/^Def tststore/,$$d' < store.fp > dstore.fp
	$F -d dstore.fp
	rm -f dstore.fp

sort.c: sort.fp $F
	sed '/^Def tstsort/,$$d' < sort.fp | $F > sort.c

nsort.c: sort.fp $F
	sed '/^Def tstsort/,$$d' < sort.fp > nsort.fp
	$F -n nsort.fp
	rm -f nsort.fp

dsort.c: sort.fp $F
	sed '/^Def tstsort/,$$d' < sort.fp > dsort.fp
	$F -d dsort.fp
	rm -f dsort.fp

fpformat.c: fpformat.fp $F
	sed '/^Def tstformat/,$$d' < fpformat.fp | $F > fpformat.c

nfpformat.c: fpformat.fp $F
	sed '/^Def tstformat/,$$d' < fpformat.fp > nfpformat.fp
	$F -n nfpformat.fp
	rm -f nfpformat.fp

dfpformat.c: fpformat.fp $F
	sed '/^Def tstformat/,$$d' < fpformat.fp > dfpformat.fp
	$F -d dfpformat.fp
	rm -f dfpformat.fp

${LIBD}/libfp.a: ${OBJ}
	/bin/ar r ${LIBD}/libfp.a ${OBJ}
	/usr/bin/ranlib ${LIBD}/libfp.a

${LIBD}/libnfp.a: ${NOBJ}
	/bin/ar r ${LIBD}/libnfp.a ${NOBJ}
	/usr/bin/ranlib ${LIBD}/libnfp.a

${LIBD}/libdfp.a: ${DOBJ}
	/bin/ar r ${LIBD}/libdfp.a ${DOBJ}
	/usr/bin/ranlib ${LIBD}/libdfp.a

backup: ${BAKD}
	cp -t ${SRC} ${BAKD}
