mirror of https://github.com/python/cpython
50 lines
1.5 KiB
Makefile
50 lines
1.5 KiB
Makefile
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
|