.SUFFIXES: .so .no .fo
.c.no:;
.c.so:;
.c.fo:;


TESTDIR = .

DECCFLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -DONEPASS -fD

DECC2FLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -UONEPASS -fD

DECFFLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -UONEPASS -DFORT -fD

# if Sky ever fixes the board, add -DNFSKY to these

SKYCFLAGS = -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -DONEPASS \
		-DSKY -DNFSKY -DIEEE

SKYC2FLAGS = -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
		-UONEPASS -DSKY -DNFSKY -DIEEE

SKYFFLAGS = -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -UONEPASS \
		-DSKY -DFORT -DNFSKY -DIEEE

PCFLAGS = -p -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
		-DONEPASS -DIEEE

CFLAGS = -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
		 -DONEPASS -DIEEE

FFLAGS = -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
	-UONEPASS -DFORT -DIEEE

C2FLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES -UONEPASS \
		-DIEEE

M=../mip

I=-I$M -I.

ALL=	rodata.no scan.no cgram.no xdefs.no pftn.no trees.no optim.no \
	local.no stab.no code.no comm1.no \
	reader.no allo.no match.no order.no local2.no table.no

SKYALL=	rodata.so scan.so cgram.so xdefs.so pftn.so trees.so optim.so \
	local.so stab.so code.so comm1.so \
	reader.so allo.so match.so order.so local2.so table.so

DECALL= rodata.fo scan.fo cgram.fo xdefs.fo pftn.fo trees.fo optim.fo \
	local.fo stab.fo code.fo comm1.fo \
	reader.fo allo.fo match.fo order.fo local2.fo table.fo

PASS0=	rodata.0o scan.0o cgram.0o xdefs.0o pftn.0o trees.0o optim.0o \
	local.0o stab.0o code.0o comm1.0o

PASS1=	reader.1o allo.1o match.1o comm2.1o order.1o local2.1o table.1o

FORT= fort.no freader.no fallo.no fmatch.no fcomm2.no forder.no \
		flocal2.no ftable.no

SKYFORT= fort.so freader.so fallo.so fmatch.so fcomm2.so forder.so flocal2.so \
	 ftable.so

DECFORT= fort.fo freader.fo fallo.fo fmatch.fo fcomm2.fo forder.fo flocal2.fo \
	 ftable.fo

all:	ccom f1 skyccom skyf1 decccom decf1

ccom:	${ALL}
	$(CC) $(LDFLAGS) ${ALL} -o $(TESTDIR)/ccom
	@ echo finished ccom

skyccom: ${SKYALL}
	$(CC) $(LDFLAGS) ${SKYALL} -o $(TESTDIR)/skyccom
	@ echo finished skyccom

decccom: ${DECALL}
	$(CC) -fD $(LDFLAGS) ${DECALL} -o $(TESTDIR)/decccom
	@ echo finished decccom

pccom:  ${PALL}
	$(CC) -p $(LDFLAGS) ${PALL} -o $(TESTDIR)/pccom
	@ echo finished pccom

c0:	$(PASS0)
	$(CC) $(LDFLAGS) -o ${TESTDIR}/c0 $(PASS0)
	@ echo finished c0

c1:	$(PASS1)
	$(CC) $(LDFLAGS) -o ${TESTDIR}/c1 $(PASS1)
	@ echo finished c1

f1: 	${FORT}
	$(CC) -z $(LDFLAGS) -o $(TESTDIR)/f1 ${FORT}
	@ echo finished f1

skyf1: 	${SKYFORT}
	$(CC) -z $(LDFLAGS) -o $(TESTDIR)/skyf1 ${SKYFORT}
	@ echo finished skyf1

decf1:	${DECFORT}
	$(CC) -z $(LDFLAGS) -o $(TESTDIR)/decf1 ${DECFORT}
	@ echo finished decf1

trees.no: $M/manifest macdefs $M/mfile1 $M/trees.c
	$(CC) -c $(CFLAGS) $I  $M/trees.c
	mv trees.o trees.no
trees.so: $M/manifest macdefs $M/mfile1 $M/trees.c
	$(CC) -c $(SKYCFLAGS) $I  $M/trees.c
	mv trees.o trees.so
trees.fo: $M/manifest macdefs $M/mfile1 $M/trees.c
	$(CC) -c $(DECCFLAGS) $I  $M/trees.c
	mv trees.o trees.fo
optim.no: $M/manifest macdefs $M/mfile1 $M/optim.c
	$(CC) -c $(CFLAGS) $I $M/optim.c
	mv optim.o optim.no
optim.so: $M/manifest macdefs $M/mfile1 $M/optim.c
	$(CC) -c $(SKYCFLAGS) $I $M/optim.c
	mv optim.o optim.so
optim.fo: $M/manifest macdefs $M/mfile1 $M/optim.c
	$(CC) -c $(DECCFLAGS) $I $M/optim.c
	mv optim.o optim.fo
pftn.no: $M/manifest macdefs $M/mfile1 $M/pftn.c
	$(CC) -c $(CFLAGS) $I $M/pftn.c
	mv pftn.o pftn.no
pftn.so: $M/manifest macdefs $M/mfile1 $M/pftn.c
	$(CC) -c $(SKYCFLAGS) $I $M/pftn.c
	mv pftn.o pftn.so
pftn.fo: $M/manifest macdefs $M/mfile1 $M/pftn.c
	$(CC) -c $(DECCFLAGS) $I $M/pftn.c
	mv pftn.o pftn.fo
code.no: $M/manifest macdefs $M/mfile1
	$(CC) -c $(CFLAGS) $I code.c
	mv code.o code.no
code.so: $M/manifest macdefs $M/mfile1
	$(CC) -c $(SKYCFLAGS) $I code.c
	mv code.o code.so
code.fo: $M/manifest macdefs $M/mfile1
	$(CC) -c $(DECCFLAGS) $I code.c
	mv code.o code.fo
local.no: $M/manifest macdefs $M/mfile1
	$(CC) -c $(CFLAGS) $I local.c
	mv local.o local.no
local.so: $M/manifest macdefs $M/mfile1
	$(CC) -c $(SKYCFLAGS) $I local.c
	mv local.o local.so
local.fo: $M/manifest macdefs $M/mfile1
	$(CC) -c $(DECCFLAGS) $I local.c
	mv local.o local.fo
stab.no: $M/manifest macdefs $M/mfile1
	$(CC) -c $(CFLAGS) $I stab.c
	mv stab.o stab.no
stab.so: $M/manifest macdefs $M/mfile1
	$(CC) -c $(SKYCFLAGS) $I stab.c
	mv stab.o stab.so
stab.fo: $M/manifest macdefs $M/mfile1
	$(CC) -c $(DECCFLAGS) $I stab.c
	mv stab.o stab.fo
scan.no: $M/manifest macdefs $M/mfile1 $M/scan.c
	$(CC) -c $(CFLAGS) $I $M/scan.c
	mv scan.o scan.no
scan.so: $M/manifest macdefs $M/mfile1 $M/scan.c
	$(CC) -c $(SKYCFLAGS) $I $M/scan.c
	mv scan.o scan.so
scan.fo: $M/manifest macdefs $M/mfile1 $M/scan.c
	$(CC) -c $(DECCFLAGS) $I $M/scan.c
	mv scan.o scan.fo
xdefs.no: $M/manifest $M/mfile1 macdefs $M/xdefs.c
	$(CC) -c $(CFLAGS) $I $M/xdefs.c
	mv xdefs.o xdefs.no
xdefs.so: $M/manifest $M/mfile1 macdefs $M/xdefs.c
	$(CC) -c $(SKYCFLAGS) $I $M/xdefs.c
	mv xdefs.o xdefs.so
xdefs.fo: $M/manifest $M/mfile1 macdefs $M/xdefs.c
	$(CC) -c $(DECCFLAGS) $I $M/xdefs.c
	mv xdefs.o xdefs.fo
cgram.no: $M/manifest $M/mfile1 macdefs cgram.c
	$(CC) -c $(CFLAGS) $I cgram.c
	mv cgram.o cgram.no
cgram.so: $M/manifest $M/mfile1 macdefs cgram.c
	$(CC) -c $(SKYCFLAGS) $I cgram.c
	mv cgram.o cgram.so
cgram.fo: $M/manifest $M/mfile1 macdefs cgram.c
	$(CC) -c $(DECCFLAGS) $I cgram.c
	mv cgram.o cgram.fo
rodata.no: rodata.c rofix
	$(CC) $(CFLAGS) -S rodata.c
	rofix rodata.s
	$(AS) -o rodata.no rodata.s
	rm -f rodata.s
rodata.so: rodata.c rofix
	$(CC) $(SKYCFLAGS) -S rodata.c
	rofix rodata.s
	$(AS) -o rodata.so rodata.s
	rm -f rodata.s
rodata.fo: rodata.c rofix
	$(CC) $(DECCFLAGS) -S rodata.c
	rofix rodata.s
	$(AS) -o rodata.fo rodata.s
	rm -f rodata.s
rodata.c cgram.c: $M/cgram.y yyfix
	$(YACC) $M/cgram.y
	rm -f rodata.c
	yyfix yyexca yyact yypact yypgo yyr1 yyr2 yychk yydef
	mv y.tab.c cgram.c
comm1.no: $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c
	$(CC) -c $(CFLAGS) $I $M/comm1.c
	mv comm1.o comm1.no
comm1.so: $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c
	$(CC) -c $(SKYCFLAGS) $I $M/comm1.c
	mv comm1.o comm1.so
comm1.fo: $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c
	$(CC) -c $(DECCFLAGS) $I $M/comm1.c
	mv comm1.o comm1.fo
table.no: $M/manifest $M/mfile2 mac2defs macdefs table.c rofix
	$(CC) $(CFLAGS) -S $I table.c
	rofix table.s
	$(AS) -o table.no table.s
	rm -f table.s
table.so: $M/manifest $M/mfile2 mac2defs macdefs table.c rofix
	$(CC) $(SKYCFLAGS) -S $I table.c
	rofix table.s
	$(AS) -o table.so table.s
	rm -f table.s
table.fo: $M/manifest $M/mfile2 mac2defs macdefs table.c rofix
	$(CC) $(DECCFLAGS) -S $I table.c
	rofix table.s
	$(AS) -o table.fo table.s
	rm -f table.s
reader.no: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c
	$(CC) -c $(CFLAGS) $I $M/reader.c
	mv reader.o reader.no
reader.so: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c
	$(CC) -c $(SKYCFLAGS) $I $M/reader.c
	mv reader.o reader.so
reader.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c
	$(CC) -c $(DECCFLAGS) $I $M/reader.c
	mv reader.o reader.fo
local2.no: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(CFLAGS) $I local2.c
	mv local2.o local2.no
local2.so: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(SKYCFLAGS) $I local2.c
	mv local2.o local2.so
local2.fo: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(DECCFLAGS) $I local2.c
	mv local2.o local2.fo
order.no: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(CFLAGS) $I order.c
	mv order.o order.no
order.so: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(SKYCFLAGS) $I order.c
	mv order.o order.so
order.fo: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(DECCFLAGS) $I order.c
	mv order.o order.fo
match.no: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c
	$(CC) -c $(CFLAGS) $I $M/match.c
	mv match.o match.no
match.so: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c
	$(CC) -c $(SKYCFLAGS) $I $M/match.c
	mv match.o match.so
match.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c
	$(CC) -c $(DECCFLAGS) $I $M/match.c
	mv match.o match.fo
allo.no: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c
	$(CC) -c $(CFLAGS) $I $M/allo.c
	mv allo.o allo.no
allo.so: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c
	$(CC) -c $(SKYCFLAGS) $I $M/allo.c
	mv allo.o allo.so
allo.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c
	$(CC) -c $(DECCFLAGS) $I $M/allo.c
	mv allo.o allo.fo


trees.0o: $M/manifest macdefs $M/mfile1 $M/trees.c
	$(CC) -c $(C2FLAGS) $I  $M/trees.c ; mv trees.o trees.0o
optim.0o: $M/manifest macdefs $M/mfile1 $M/optim.c
	$(CC) -c $(C2FLAGS) $I $M/optim.c ; mv optim.o optim.0o
pftn.0o: $M/manifest macdefs $M/mfile1 $M/pftn.c
	$(CC) -c $(C2FLAGS) $I $M/pftn.c ; mv pftn.o pftn.0o
code.0o: $M/manifest macdefs $M/mfile1
	$(CC) -c $(C2FLAGS) $I code.c ; mv code.o code.0o
local.0o: $M/manifest macdefs $M/mfile1
	$(CC) -c $(C2FLAGS) $I local.c ; mv local.o local.0o
stab.0o: $M/manifest macdefs $M/mfile1
	$(CC) -c $(C2FLAGS) $I stab.c ; mv stab.o stab.0o
scan.0o: $M/manifest macdefs $M/mfile1 $M/scan.c
	$(CC) -c $(C2FLAGS) $I $M/scan.c ; mv scan.o scan.0o
xdefs.0o: $M/manifest $M/mfile1 macdefs $M/xdefs.c
	$(CC) -c $(C2FLAGS) $I $M/xdefs.c ; mv xdefs.o xdefs.0o
cgram.0o: $M/manifest $M/mfile1 macdefs cgram.c
	$(CC) -c $(C2FLAGS) $I cgram.c ; mv cgram.o cgram.0o
rodata.0o: rodata.c rofix
	$(CC) $(C2FLAGS) -S rodata.c
	rofix rodata.s
	$(AS) -o rodata.0o rodata.s
	rm -f rodata.s
comm1.0o: $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c
	$(CC) -c $(C2FLAGS) $I $M/comm1.c ; mv comm1.o comm1.0o

table.1o: $M/manifest $M/mfile2 mac2defs macdefs table.c rofix
	$(CC) $(C2FLAGS) -S $I table.c
	rofix table.s
	$(AS) -o table.1o table.s
	rm -f table.s
reader.1o: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c
	$(CC) -c $(C2FLAGS) $I $M/reader.c ; mv reader.o reader.1o
local2.1o: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(C2FLAGS) $I local2.c ; mv local2.o local2.1o
order.1o: $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(C2FLAGS) $I order.c ; mv order.o order.1o
match.1o: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c
	$(CC) -c $(C2FLAGS) $I $M/match.c ; mv match.o match.1o
allo.1o: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c
	$(CC) -c $(C2FLAGS) $I $M/allo.c ; mv allo.o allo.1o
comm2.1o: $M/manifest $M/mfile2 $M/common macdefs $M/comm2.c
	$(CC) -c $(C2FLAGS) $I $M/comm2.c ; mv comm2.o comm2.1o


shrink:
	rm *.o ccom
clean:
	rm -f *.*o *ccom *f1 cgram.c rodata.c rslts core a.out
lintall:
	lint -hpv $I  $M/cgram.c $M/xdefs.c $M/scan.c $M/pftn.c \
		$M/trees.c $M/optim.c code.c local.c $M/reader \
		local2.c order.c $M/match.c $M/allo.c $M/comm1.c table.c

fort.no: fort.h $M/fort.c
	$(CC) -c $(FFLAGS) $I $M/fort.c
	mv fort.o fort.no
fort.so: fort.h $M/fort.c
	$(CC) -c $(SKYFFLAGS) $I $M/fort.c
	mv fort.o fort.so
fort.fo: fort.h $M/fort.c
	$(CC) -c $(DECFFLAGS) $I $M/fort.c
	mv fort.o fort.fo
freader.no: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c $M/freader.c
	$(CC) -c $(FFLAGS) $I $M/freader.c
	mv freader.o freader.no
freader.so: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c $M/freader.c
	$(CC) -c $(SKYFFLAGS) $I $M/freader.c
	mv freader.o freader.so
freader.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c $M/freader.c
	$(CC) -c $(DECFFLAGS) $I $M/freader.c
	mv freader.o freader.fo
fallo.no: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c $M/fallo.c
	$(CC) -c $(FFLAGS) $I $M/fallo.c
	mv fallo.o fallo.no
fallo.so: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c $M/fallo.c
	$(CC) -c $(SKYFFLAGS) $I $M/fallo.c
	mv fallo.o fallo.so
fallo.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c $M/fallo.c
	$(CC) -c $(DECFFLAGS) $I $M/fallo.c
	mv fallo.o fallo.fo
fmatch.no: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c $M/fmatch.c
	$(CC) -c $(FFLAGS) $I $M/fmatch.c
	mv fmatch.o fmatch.no
fmatch.so: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c $M/fmatch.c
	$(CC) -c $(SKYFFLAGS) $I $M/fmatch.c
	mv fmatch.o fmatch.so
fmatch.fo: $M/manifest $M/mfile2 mac2defs macdefs $M/match.c $M/fmatch.c
	$(CC) -c $(DECFFLAGS) $I $M/fmatch.c
	mv fmatch.o fmatch.fo
ftable.no: $M/manifest $M/mfile2 mac2defs macdefs table.c $M/ftable.c rofix
	$(CC) $(FFLAGS) -S $I $M/ftable.c
	rofix ftable.s
	$(AS) -o ftable.no ftable.s
	rm -f ftable.s
ftable.so: $M/manifest $M/mfile2 mac2defs macdefs table.c $M/ftable.c rofix
	$(CC) $(SKYFFLAGS) -S $I $M/ftable.c
	rofix ftable.s
	$(AS) -o ftable.so ftable.s
	rm -f ftable.s
ftable.fo: $M/manifest $M/mfile2 mac2defs macdefs table.c $M/ftable.c rofix
	$(CC) $(DECFFLAGS) -S $I $M/ftable.c
	rofix ftable.s
	$(AS) -o ftable.fo ftable.s
	rm -f ftable.s
forder.no: $M/manifest $M/mfile2 mac2defs macdefs order.c $M/forder.c
	$(CC) -c $(FFLAGS) $I $M/forder.c
	mv forder.o forder.no
forder.so: $M/manifest $M/mfile2 mac2defs macdefs order.c $M/forder.c
	$(CC) -c $(SKYFFLAGS) $I $M/forder.c
	mv forder.o forder.so
forder.fo: $M/manifest $M/mfile2 mac2defs macdefs order.c $M/forder.c
	$(CC) -c $(DECFFLAGS) $I $M/forder.c
	mv forder.o forder.fo
flocal2.no: $M/manifest $M/mfile2 mac2defs macdefs local2.c $M/flocal2.c
	$(CC) -c $(FFLAGS) $I $M/flocal2.c
	mv flocal2.o flocal2.no
flocal2.so: $M/manifest $M/mfile2 mac2defs macdefs local2.c $M/flocal2.c
	$(CC) -c $(SKYFFLAGS) $I $M/flocal2.c
	mv flocal2.o flocal2.so
flocal2.fo: $M/manifest $M/mfile2 mac2defs macdefs local2.c $M/flocal2.c
	$(CC) -c $(DECFFLAGS) $I $M/flocal2.c
	mv flocal2.o flocal2.fo
fcomm2.no: $M/manifest $M/mfile2 $M/common macdefs $M/comm2.c $M/fcomm2.c
	$(CC) -c $(FFLAGS) $I $M/fcomm2.c
	mv fcomm2.o fcomm2.no
fcomm2.so: $M/manifest $M/mfile2 $M/common macdefs $M/comm2.c $M/fcomm2.c
	$(CC) -c $(SKYFFLAGS) $I $M/fcomm2.c
	mv fcomm2.o fcomm2.so
fcomm2.fo: $M/manifest $M/mfile2 $M/common macdefs $M/comm2.c $M/fcomm2.c
	$(CC) -c $(DECFFLAGS) $I $M/fcomm2.c
	mv fcomm2.o fcomm2.fo

fort.no freader.no fallo.no fmatch.no ftable.no forder.no flocal2.no \
	fcomm2.no: $M/mfile2 $M/manifest macdefs mac2defs

fort.so freader.so fallo.so fmatch.so ftable.so forder.so flocal2.so \
	fcomm2.so: $M/mfile2 $M/manifest macdefs mac2defs

fort.fo freader.fo fallo.fo fmatch.fo ftable.fo forder.fo flocal2.fo \
	fcomm2.fo: $M/mfile2 $M/manifest macdefs mac2defs

install:	all
	install -s ccom ${DESTDIR}/lib/ccom
	install -s f1 ${DESTDIR}/usr/lib/f1
	install -s skyccom ${DESTDIR}/lib/skyccom
	install -s skyf1 ${DESTDIR}/usr/lib/skyf1
	install -s decccom ${DESTDIR}/lib/decccom
	install -s decf1 ${DESTDIR}/usr/lib/decf1
