SPIM=spim -notrap -file 
PPS=../ppc 
PPC=$(PPS) $(OPTIONS)
PPI=$(PPS) -i
PPIC=$(PPS) -ic
CHECKIIC=false
CHECKCTA=true

TEST= fact.out fib.out tri.out mul.out fact2.out mul2.out quick.out \
      bignum.out many.out

ok: $(TEST) ../ppc
	touch ok

mlx: $(TEST:.out=.mlx)

XXX:
	send2poly www/compil/ppc/test *.{p,in,ref}

fact.spi: $(PPS) 
fib.spi: $(PPS) 
tri.spi: $(PPS) 
fact2.spi: $(PPS)
mul.spi: $(PPS)
mul2.spi: $(PPS)
bignum.spi: $(PPS)
quick.spi: $(PPS)
many.spi: $(PPS)

clean:
	rm -f *.spi *.out

.p.mlx: 
	$(PPC) -ast $< | cat run.ml - > $@

.spi.out: 
	$(SPIM) $< < $*.in | tail +5 > $@ 
	diff $@ $*.ref || rm $@
	@if $(CHECKIIC); then \
	     echo 'checking interpreted versions of' $*; \
	     $(PPI) $*.p < $*.in | diff - $*.out || rm $@; \
	     $(PPIC) $*.p < $*.in | diff - $*.out || rm $@; \
	fi
	@if $(CHECKCTA); then \
	     echo 'checking constrained register allocation for' $*; \
	     $(PPS) -3 $*.p > $<m; \
	     $(SPIM) $<m < $*.in | tail +5 | diff - $*.out || rm $@; \
	     echo 'checking trivial register allocation for' $*; \
	     $(PPS) -talloc $*.p > $<m; \
	     $(SPIM) $<m < $*.in | tail +5 | diff - $*.out || rm $@;\
	     rm $<m; \
	fi
	@test $@ || exit 1

.p.spi:
	$(PPC) $< > $@ || (rm $@ && exit 1)


.SUFFIXES: .spi .p .in .out .ref .mlx
