# GNU Makefile for P5 Pascal
#
# http://www.standardpascal.com/p5.html
#
# Sunday, March 24, 2013  11:23pm

.PHONY: all clean cleanall fast medium slow
.PRECIOUS: %.p5

EXE=.exe

SED=sed
DIFF=diff -waus
RM=rm -f
#DIFF=fc /w
#RM=del

PC=gpc
MARCH=pentium
MTUNE=i686
OPTIMIZE=-O -march=$(MARCH) -mtune=$(MTUNE)
PFLAGS=-s -w --classic-pascal $(OPTIMIZE)

PAS=$(wildcard [^p]*.pas)

all: pcom$(EXE) pint$(EXE) fast

fast: $(PAS:%.pas=%.tst)

medium: pcomm.tst

slow: pintm.tst

%$(EXE) :: %.pas
	$(PC) $(PFLAGS) $< -o $@

pcomm.pas: pcom.pas
	$(SED) -e "s/{elide}/{/g" -e "s/{noelide}/}/g" $< > $@

pintm.pas: pint.pas
	$(SED) -e "s/{elide}/{/g" -e "s/{noelide}/}/g" -e "s/{remove//g" \
-e "s/remove}//g" $< > $@

pcomm.tst: pcomm.p5 pcomm.pas pint$(EXE)
	@echo "... Testing pcomm (for me, approx. 15 min.) ..."
	@pint --gpc-rts -n prr:$@ -n prd:$< < pcomm.pas > pcomm.err
	@$(DIFF) $@ $<

pintm2.p5: pintm.p5 iso7185pat.p5
	@-cat $^ > $@
	@-copy /b $< + iso7185pat.p5 $@

7185pats.cmp: iso7185pats.cmp
	@-cp $< $@
	@-copy /b $< $@

pintm.tst: pintm2.p5 7185pats.cmp pint$(EXE)
	@echo "... Testing pintm (for me, approx. 4 hours!) ..."
	@pint --gpc-rts -n prr:pintm2.prr -n prd:$< > $@
	@$(DIFF) $@ 7185pats.cmp

%.p5: %.pas pcom$(EXE)
	@pcom --gpc-rts -n prr:$@ < $< > $*.err

%.tst: %.p5 %.inp %.cmp pint$(EXE)
	@echo ... Testing $* ...
	@pint --gpc-rts -n prr:$*.prr -n prd:$< < $*.inp > $@
	@$(DIFF) $@ $*.cmp

clean:
	@-$(RM) *.tst *.p5 *.prr *.err pcomm.pas pintm.pas

cleanall: clean
	@-$(RM) pcom$(EXE) pint$(EXE)

# EOF
