1UNAME_S := $(shell uname -s) 2ifeq ($(UNAME_S),Linux) 3 PYTHON ?= ../../python 4endif 5ifeq ($(UNAME_S),Darwin) 6 PYTHON ?= ../../python.exe 7endif 8VENVDIR ?= ./venv 9VENVPYTHON ?= $(VENVDIR)/bin/python 10CPYTHON ?= ../../Lib 11MYPY ?= ./venv/bin/mypy 12BLACK ?= ./venv/bin/black 13 14GRAMMAR = ../../Grammar/python.gram 15TOKENS = ../../Grammar/Tokens 16 17build: peg_extension/parse.c 18 19peg_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 20 $(VENVPYTHON) -m pegen -q c $(GRAMMAR) $(TOKENS) -o peg_extension/parse.c --compile-extension 21 22clean: 23 -rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c 24 -rm -rf $(VENVDIR) 25 26regen-metaparser: pegen/metagrammar.gram pegen/*.py 27 $(VENVPYTHON) -m pegen -q python pegen/metagrammar.gram -o pegen/grammar_parser.py 28 29# Note: These targets really depend on the generated shared object in peg_extension/parse.*.so but 30# this has different names in different systems so we are abusing the implicit dependency on 31# parse.c by the use of --compile-extension. 32 33venv: 34 $(PYTHON) -m venv $(VENVDIR) 35 $(VENVPYTHON) -m pip install -U pip setuptools black mypy 36 @echo "The venv has been created in the $(VENVDIR) directory" 37 38mypy: regen-metaparser 39 $(MYPY) # For list of files, see mypy.ini 40 41format-python: 42 $(BLACK) pegen 43 44format: venv format-python 45 46tags: TAGS 47 48TAGS: pegen/*.py test/test_pegen.py 49 etags pegen/*.py test/test_pegen.py 50