• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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