UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) PYTHON ?= ../../python endif ifeq ($(UNAME_S),Darwin) PYTHON ?= ../../python.exe endif VENVDIR ?= ./venv VENVPYTHON ?= $(VENVDIR)/bin/python CPYTHON ?= ../../Lib MYPY ?= ./venv/bin/mypy BLACK ?= ./venv/bin/black GRAMMAR = ../../Grammar/python.gram TOKENS = ../../Grammar/Tokens build: peg_extension/parse.c peg_extension/parse.c: $(GRAMMAR) $(TOKENS) pegen/*.py peg_extension/peg_extension.c ../../Parser/pegen.c ../../Parser/pegen_errors.c ../../Parser/string_parser.c ../../Parser/action_helpers.c ../../Parser/*.h pegen/grammar_parser.py $(VENVPYTHON) -m pegen -q c $(GRAMMAR) $(TOKENS) -o peg_extension/parse.c --compile-extension clean: -rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c -rm -rf $(VENVDIR) regen-metaparser: pegen/metagrammar.gram pegen/*.py $(VENVPYTHON) -m pegen -q python pegen/metagrammar.gram -o pegen/grammar_parser.py # Note: These targets really depend on the generated shared object in peg_extension/parse.*.so but # this has different names in different systems so we are abusing the implicit dependency on # parse.c by the use of --compile-extension. venv: $(PYTHON) -m venv $(VENVDIR) $(VENVPYTHON) -m pip install -U pip setuptools black mypy @echo "The venv has been created in the $(VENVDIR) directory" mypy: regen-metaparser $(MYPY) # For list of files, see mypy.ini format-python: $(BLACK) pegen format: venv format-python tags: TAGS TAGS: pegen/*.py test/test_pegen.py etags pegen/*.py test/test_pegen.py