# this Makefile uses a flat directory structure for demonstration
# purposes; the main directory (../..) contains a slightly more
# modular organization.

SPLINT_ROOT = $(shell pwd)/../..
XXPRESSION_PREREQS = %.tex %.scn %.idx %.tok ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ${SPLINT_ROOT}/cweb/bo.tok xtoks.sty

include ${SPLINT_ROOT}/makefile.inc

# rules specific to this example

PARSER = xxpp
LEXER = xxpl

all:		xxpression.pdf ptab.tex ltab.tex

step1:		${PARSER}.y ${LEXER}.l
step2:		ptabout ltabout
step3:		ltab.tex ptab.tex
step4:		xymbols.sns

ptabout:	${SPLINT_ROOT}/cweb/mkeparser.c ${PARSER}.c
		${CC} -DPARSER_FILE=\"../examples/xxpression/$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<

ptab.tex:	ptabout
		$< --optimize-actions $@

ltabout:	${SPLINT_ROOT}/cweb/mkscanner.c ${LEXER}.c
		${CC} -DLEXER_FILE=\"../examples/xxpression/$(lastword $^)\" -o $@ $<

ltab.tex:	ltabout
		$< --optimize-actions $@

${LEXER}.c:	${LEXER}.l
		${FLEX} -o $@ $<

test.tex xymbols.tex \
${PARSER}.yy ${LEXER}.ll:	xxpression.x
				@${CTANGLE} $<
				${UNLINE} test.txx test.tex
				${UNLINE} xymbols.txx xymbols.tex

xymbols.sns:			xymbols.tex xxpression.tok ${SPLINT_ROOT}/cweb/bo.tok ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ptab.tex
				${PDFTEX} $<

xxpression.tex:	xxpression.x
		${CWEAVE} $<

xxpression.gdx: %.gdx:		${XXPRESSION_PREREQS}
				${TEX} $*.tex

xxpression.pdf: %.pdf:		${XXPRESSION_PREREQS} %.gdy
				${PDFTEX} $* && touch $*.gdy && touch $*.pdf
#		if [ -f $*.gdx ] ; then ${BINDX} $*.gdx $*.gdy; fi

xxpression.tok:	xxpression.tex ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ${SPLINT_ROOT}/cweb/bo.tok
		${PDFTEX} $< && touch xxpression.tok

test:	test.tex xymbols.sns xxpression.tok ptab.tex ltab.tex
	tex test.tex

docs:	xxpression.pdf

clean:	clean_core
	-rm -f ptabout ltabout *.txx

mostlyclean:			clean_temp
				-rm -f ptabout ltabout xxpression.c *.txx

distclean:			clean
				cd ${SPLINT_ROOT} && ${MAKE} clean

.INTERMEDIATE:			xxpression.gdx
