# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# SPLinT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with SPLinT. If not, see <
http://www.gnu.org/licenses/>.
# this Makefile uses a flat directory structure for demonstration
# purposes; the main directory (../..) contains a slightly more
# modular organization.
PARSER = ldp
LEXER = ldl
MANUAL = ldman
LD_CORE_PREREQS = ${SPLINT_XTEXSTYLES} ${SPLINT_XTABLES}
LD_DOC_PREREQS_STATIC = ldunion.sty ldtexlex.sty ldint.sty ltokenset.sty lstokenset.sty
LD_DOC_PREREQS_GEN = ldptab.tex ldltab.tex ld_small_tab.tex ld_small_dfa.tex ${PARSER}.tok ldsetup.sty
LD_DOC_PREREQS_XREF = ${LD_CORE_PREREQS} %.sty ${LD_DOC_PREREQS_STATIC} %.tex ${LD_DOC_PREREQS_GEN} %.scn %.idx
LD_DOC_PREREQS_XREF += ldfrontmatter.sty
include ../../makefile.inc
include ${SPLINT_ROOT}makefile.loc
# rules specific to this example
ptabout: ${SPLINT_ROOT}cweb/mkeparser.c ${PARSER}.c
${CC} ${BISON_STATE} -DPARSER_FILE=\"../examples/ld/$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
ldptab.tex: ptabout
$< --optimize-actions --optimize-tables $@
ltabout: ${SPLINT_ROOT}cweb/mkscanner.c ldl_states.h ${LEXER}.c
${CC} -DLEXER_FILE=\"../examples/ld/$(lastword $^)\" -o $@ $<
ldltab.tex: ltabout
$< --optimize-actions --optimize-tables $@
${LEXER}.c: ${LEXER}.l
${FLEX} -o $@ $<
${PARSER}.yy : ldgram.x
@${CTANGLE} $<
${LEXER}.ll: ldlex.x
@${CTANGLE} $<
${MANUAL}.stx \
ldsetup.stx: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x ldexample_l.hx ldexample_t.hx alphas.hx
@${CTANGLE} $<
# term name parser for ld grammar
ldsmallp_out: ${SPLINT_ROOT}cweb/mkeparser.c ld_small_parser.c
${CC} ${BISON_STATE} -DPARSER_FILE=\"../examples/ld/$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
ldsmalll_out: ${SPLINT_ROOT}cweb/mkscanner.c ld_small_lexer.c
${CC} -DLEXER_FILE=\"../examples/ld/$(lastword $^)\" -o $@ $<
ld_small_tab.tex: ldsmallp_out
$< --optimize-actions --optimize-tables $@
ld_small_dfa.tex: ldsmalll_out
$< --optimize-actions --optimize-tables $@
ld_small_parser.yy \
ld_small_lexer.ll: ldnp.x
@${CTANGLE} $<
# numeric parser for ld grammar
ldnump_out: ${SPLINT_ROOT}cweb/mkeparser.c ld_num_parser.c
${CC} ${BISON_STATE} -DPARSER_FILE=\"../examples/ld/$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
ldnuml_out: ${SPLINT_ROOT}cweb/mkscanner.c ld_num_lexer.c
${CC} -DLEXER_FILE=\"../examples/ld/$(lastword $^)\" -o $@ $<
ld_num_tab.tex: ldnump_out
$< --optimize-actions --optimize-tables $@
ld_num_dfa.tex: ldnuml_out
$< --optimize-actions --optimize-tables $@
ld_num_parser.yy \
ld_num_lexer.ll: ldnump.x
@${CTANGLE} $<
ldexample_%.hx: ldexample.hw
echo $(patsubst ldexample_%.hx, "@G(%)", $@) >> $(patsubst %.hx, %.hy, $@)
cat $< >> $(patsubst %.hx, %.hy, $@)
echo "@g" >> $(patsubst %.hx, %.hy, $@)
${BRACK} $(patsubst %.hx, %.hy, $@) $@
alphas.hx:
${MISCCW} --alpha-list --alpha-length=1 $@
${MANUAL}.tex: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x ldexample_l.hx ldexample_t.hx alphas.hx
@echo "Preparing the ${MANUAL}.tex file ..."
-${CWEAVE} $<
${MANUAL}.sty \
ldsetup.sty:%.sty: %.stx
${UNLINE} $< $@
${MANUAL}.gdx: %.gdx: ${LD_DOC_PREREQS_XREF} ${PARSER}.tok
@echo "Making the bison and TeX indices ..."
${TEX} $*.tex
%.gdy: %.gdx
${MANUAL}.gdy: %.gdy: %.gdx
${BINDX} --fine $^ $@
${MANUAL}.pdf: %.pdf: ${LD_DOC_PREREQS_XREF} %.gdy %.aux
${PDFTEX} $*.tex && touch $*.gdy && touch $*.pdf
${PARSER}.tok: ldgram.tex ${MANUAL}.sty ${LD_CORE_PREREQS}
${TEX} ${MODEBOOTSTRAP} \\input $<
ldl_states.h: ldlex.tex ${MANUAL}.sty ${LD_CORE_PREREQS}
${TEX} ${MODEBOOTSTRAP} \\input $<
ldgram.tex ldlex.tex: \
%.tex: %.x
@echo "Building ldgram.tex and ldlex.tex."
-${CWEAVE} -x $*.x
docs: ${MANUAL}.pdf
install: docs
@cp ${LD_DOC_PREREQS_STATIC} ${SPLINT_INSTALL_DIR}/tex/
@cp ${LD_DOC_PREREQS_GEN} ${SPLINT_INSTALL_DIR}/cweb/
uninstall:
@rm -f $(patsubst %, ${SPLINT_INSTALL_DIR}/tex/%, ${LD_DOC_PREREQS_STATIC})
@rm -f $(patsubst %, ${SPLINT_INSTALL_DIR}/cweb/%, ${LD_DOC_PREREQS_GEN})
mostlyclean: clean_temp
-rm -f ptabout ltabout ldsmalll_out ldsmallp_out ldnump_out ldnuml_out ${MANUAL}.c
clean: clean_core
-rm -f ptabout ltabout ldsmalll_out ldsmallp_out ldnump_out ldnuml_out *.stx \
ldman.sty ldsetup.sty
distclean: clean
cd ${SPLINT_ROOT} && ${MAKE} clean