
GHC=ghc
HUGS=hugs
HAPPY=happy
RM=rm
PERL=perl
MAKE=make

DEBUG=
GHC_OPTS=-package lang -package net

TEXS=KS.tex HistorySKK.tex ChurchNumerals.tex UrzyChains.tex \
     MonotonicityWitnesses.tex Tabular.tex SimplePair.tex \
     ProofProjIsIsotone.tex ProofSumIsIsotone.tex \
     ProofPairingIsIsotone.tex ProofIdentityIsIsotone.tex \
     WrongForall.tex TypedSK.tex Proof22KIsTypable.tex \
     ProofProdPresIsotone.tex ProofSumPresIsotone.tex

MAINS=Parser CPFwCGI ParseCPFw

.PHONY: all
all: ${TEXS} ${MAINS}

.PHONY: ${MAINS} ${basename ${TEXS}}
${MAINS} ${basename ${TEXS}}: %: %.hs
	EXIT=(1 1); \
	until test "$${EXIT[1]}" == "0"; do \
	  ${GHC} ${GHC_OPTS} --make $< -o $@ 2>&1 \
	  | ${PERL} -p \
	            -e 'BEGIN {$$remade=0;}' \
	            -e "if (/(^ghc.*\: can't find module )\`(.*)'.*$$/ || " \
	            -e '    /^(Skipping  |Compiling ).*\( (.*)\.hs\, .* \)$$/ )' \
                    -e '  {if (system "${MAKE} -q $$2.hs")' \
                    -e '    {if (!system "${MAKE} $$2.hs") {$$remade=1}}}' \
	            -e 'END {exit $$remade;}'; \
	  EXIT=($${PIPESTATUS[*]}); \
	done; \
	exit $${EXIT[0]}

%.hs: %.y
	${HAPPY} -a ${DEBUG} $< -o $@

%.info: %.y
	${HAPPY} -a -i $< 

${TEXS}: %.tex: %
	./$< > $@

.PHONY: tar
tar:
	cvs checkout -d /tmp/fopra/ fopra
	WD=$$(pwd); cd /tmp/; tar -cvjf $$WD/fopra.tar.bz2 fopra/
	rm -fr /tmp/fopra

.PHONY: GHCVersion.tex
GHCVersion.tex:
	( echo "{\tt " ; ${GHC} --version ; echo " }" ) > $@

.PHONY: HugsVersion.tex
HugsVersion.tex:
	( echo "{\tt " ; \
	  (echo ":version" | ${HUGS} 2>/dev/null | perl -n \
	       -e 'if (/^Prelude> -- (Hugs Version .+)$$/) {print $$1 }'); \
	  echo " }" ) > $@

.PHONY: clean
clean:
	${RM} -f *.o
	${RM} -f *.hi
	${RM} -f ParseCPFw.hs
	${RM} -f ParseCPFw.info
	${RM} -f ${TEXS}
	${RM} -f ${basename ${TEXS}}
	${RM} -f ${MAINS}
	${RM} -f GHCVersion.tex
	${RM} -f HugsVersion.tex
	${RM} -f fopra.tar.bz2
