| 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 |