TOPDIR = ../.. GENERATED_STD = grammartest.l grammartest.y grammartest.ebnf include/grammartest.h # These types are meant to be cut off the tree and turned into hand coded flex # regexes #TRIM_SYMBOLS = blah TRIM_SYMBOLS = GENERATE_LOG_LEVEL ?= notice FIX_EXTENSIONS ?= discard CHECK_SYMBOLS ?= --check-symbols=all GRAMMAR_INPUT ?= grammartest-input.ebnf GENERATED = grammartest-dense.ebnf $(GENERATED_STD) GENERATE_PY = ./generate.py GENERATE = python ./$(GENERATE_PY) --log-level $(GENERATE_LOG_LEVEL) create \ --fix-extensions $(FIX_EXTENSIONS) \ --unroll-lists \ --unroll-options \ $(CHECK_SYMBOLS) \ --trim-symbols=$(shell echo $(TRIM_SYMBOLS) | sed 's/ */,/g') \ $(CREATE_EXTRA_ARGS) CHECK_SYMBOLS ?= special_character FB_NAME_PREFIX ?= grammartest_ FB_HDRDIR ?= include FB_BISON_OUT_EXT ?= cpp FB_FLEX_OUT_EXT ?= cpp FB_CASE_INSENSITIVE ?= true FB_SRC ?= $(filter %.y %.l,$(GENERATED)) include $(TOPDIR)/make/proj.mk include $(MODDIR)/make/flex-bison.mk include $(MODDIR)/make/py-defs.mk all: debug-all: GENERATE_LOG_LEVEL=debug make all 2>&1 | tee run.out generate: $(GENERATED) grammartest.y: include/grammartest.h lex.grammartest.c: grammartest.l check: $(GRAMMAR_INPUT) $(GENERATE_PY) Makefile python ./$(GENERATE_PY) --log-level info check --fix-extensions unroll --unroll-lists --unroll-options --check-symbols='$(CHECK_SYMBOLS)' $< grammartest-dense.ebnf: $(GRAMMAR_INPUT) $(GENERATE_PY) python ./$(GENERATE_PY) --log-level $(GENERATE_LOG_LEVEL) create --fix-extensions keep $< grammartest.ebnf > $@.tmp mv $@.tmp $@ define generate_rule $(1): $$(GRAMMAR_INPUT) $$(GENERATE_PY) Makefile $$(GENERATE) $$< $$(patsubst grammartest.%,grammartest.%,$$@) > $$@.tmp mv $$@.tmp $$@ endef $(foreach target,$(GENERATED_STD),$(eval $(call generate_rule,$(target)))) clean.generated: rm -f $(GENERATED) clean: clean.generated echo-generated: @echo GENERATED = $(GENERATED) help: $(GENERATE) --help expand-macros: make 2>/dev/null | sed '/g++/ !d; s/g++\|gcc//; s/-o .*//' | xargs g++ -E -C | indent