# 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 . docs: splint.pdf include ../makefile.inc tables: ${SPLINT_PTABLES} ${SPLINT_LTABLES} bdout bbout bgout \ bfout:b%out: mkeparser.c b%.c ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $< bd.yy bg.yy \ bb.yy bf.yy:b%.yy: bo.u bo.m ${CTANGLE} $< bd.yx bg.yx \ bb.yx bf.yx:%.yx: %.yy ${BRACK} --replace-only --bison-link=bo.m $*.yy $*.yx bd.y bg.y \ bb.y bf.y:%.y: %.yx cp -f $^ $@ byytab.tex gyytab.tex \ dyytab.tex fyytab.tex:\ %yytab.tex: b%out ${SPLINT_DRIVER_DIR}/$< --optimize-actions $@ ltab.tex: ltout ${SPLINT_DRIVER_DIR}/$< --optimize-actions $@ ltout: mkscanner.c lo_states.h lo.c ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $< lo.ll: %.ll: %.x ${CTANGLE} $< && rm $(patsubst %.x, %.c, $^) fil.ll: so.x ${CTANGLE} $< && rm $(patsubst %.x, %.c, $^) fip.yy rep.yy rap.yy ddp.yy: fo.x ${CTANGLE} $< && rm $(patsubst %.x, %.c, $^) # flex parser fil.c: fil.l ${FLEX} -o $@ $< fil_out: mkscanner.c fil_states.h fil.c ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $< filtab.tex: fil_out ${SPLINT_DRIVER_DIR}/$< --optimize-actions --optimize-tables $@ # state parsing for the \flex\ input scanner fil_states.h: so.tex ssfstab.tex ddptab.tex ${SPLINT_ROOT}tex/grabstates.sty @echo "Generating state list for the flex lexer ..." @${PDFTEX} $< fip.c rep.c rap.c ddp.c:%.c: %.y ${BISON} -o $@ $< fip_out rap_out \ ddp_out rep_out:%_out: mkeparser.c %.c ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $< fiptab.tex raptab.tex \ ddptab.tex reptab.tex:%tab.tex: %_out ${SPLINT_DRIVER_DIR}/$< --optimize-actions --optimize-tables $@ so.tex: so.x ${CWEAVE} $< fo.tex: fo.x -${CWEAVE} $< fo.tok: fo.tex ltab.tex dyytab.tex bo.tok @echo "Generating token equivalences for flex input parser ..." @${TEX} ${MODEBOOTSTRAP} \\input $< lo.c: lo.l ${FLEX} -o $@ $< mkscanner.c mkeparser.c: \ %.c: %.w ${CTANGLE} $< # bootstrap flex parser ssfs.ll: so.x ${CTANGLE} $< && rm $(patsubst %.x, %.c, $^) ssfs.c: ssfs.l ${FLEX} -o $@ $< ssfs_out: mkscanner.c ssfs.c ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $< ssfstab.tex: ssfs_out ${SPLINT_DRIVER_DIR}/$< --optimize-actions --optimize-tables $@ # name parser smallp_out: mkeparser.c small_parser.c ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $< smalll_out: mkscanner.c small_lexer.c ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $< small_tab.tex: smallp_out ${SPLINT_DRIVER_DIR}/$< --optimize-actions $@ small_dfa.tex: smalll_out ${SPLINT_DRIVER_DIR}/$< --optimize-actions $@ small_parser.yy \ small_lexer.ll: np.x @${CTANGLE} $< bo.tex: bo.x -${CWEAVE} -x $< 1>/dev/null splint.tex \ splint.idx \ splint.scn: splint.x bo.x lo.x fo.x so.x np.x common.w bs.w \ fk.w philosophy.w checklists.w references.w alphas.hx -${CWEAVE} $< 1>/dev/null alphas.hx: @${MISCCW} --alpha-list --alpha-length=1 $@ bo.tok: bo.tex ltab.tex byytab.tex @echo "Making token equivalence tables for the bison parser ..." @${TEX} ${MODEBOOTSTRAP} \\input $< #1>/dev/null splint.gdx splint.aux: ${SPLINT_DOC_PREREQS_XREF} @echo "Making the bison and TeX indices ..." @${PDFTEX} splint.tex #1>/dev/null # remove the implicit rule before building the main index %.gdy: %.gdx splint.gdy: splint.gdx ${BINDX} --fine $^ $@ splint.pdf: %.pdf: ${SPLINT_DOC_PREREQS_XREF} %.gdy %.aux @echo "Generating SPLinT documentation (splint.pdf) ..." while test "`diff --new-file splint.pdf /tmp/splint.pdf`"; do \ echo "Files differ" && mv splint.pdf /tmp/; \ ${PDFTEX} \\input $*.tex && touch $*.gdy && touch $*.pdf; \ done splint.dvi: %.dvi: ${SPLINT_DOC_PREREQS_XREF} %.gdy @${TEX} $*.tex && touch $*.gdy && touch $*.dvi && rm $*.ftn # state parsing lo.tex: lo.x ${CWEAVE} $< lo_states.h: lo.tex ssfstab.tex ddptab.tex ${SPLINT_ROOT}tex/grabstates.sty @echo "Generating state list for the bison lexer ..." @${PDFTEX} $< # clean will erase all automatically generated files in the current directory clean: clean_core -rm -f ctablesout b?out ltout smallp_out /tmp/splint.pdf \ smalll_out ssfs_out fil_out fip_out rep_out rap_out ddp_out include ${SPLINT_ROOT}makefile.loc # since bg.yy is not an intermediate file in examples/symbols/Makefile, repeated 'make all' # remakes bg.yy thereby forcing make to update byytab.tex, etc., which results in remaking # of bo.tok, lo.tex, eventually leading to remaking of splint.pdf; # the special target below tells make to treat bg.yy as if it were not an intermediate file .PRECIOUS: %.yy bo.tok fo.tok %.ll b%.y splint.gdx # the files below appear as targets but are really intermediaries for other files .INTERMEDIATE: smallp_out smalll_out ssfs_out ltout fil_out \ fip_out rep_out rap_out ddp_out splint.gdx