17db96d56Sopenharmony_ciUNAME_S := $(shell uname -s)
27db96d56Sopenharmony_ciifeq ($(UNAME_S),Linux)
37db96d56Sopenharmony_ci	PYTHON ?= ../../python
47db96d56Sopenharmony_ciendif
57db96d56Sopenharmony_ciifeq ($(UNAME_S),Darwin)
67db96d56Sopenharmony_ci	PYTHON ?= ../../python.exe
77db96d56Sopenharmony_ciendif
87db96d56Sopenharmony_ciVENVDIR ?= ./venv
97db96d56Sopenharmony_ciVENVPYTHON ?= $(VENVDIR)/bin/python
107db96d56Sopenharmony_ciCPYTHON ?= ../../Lib
117db96d56Sopenharmony_ciMYPY ?= mypy
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciGRAMMAR = ../../Grammar/python.gram
147db96d56Sopenharmony_ciTOKENS = ../../Grammar/Tokens
157db96d56Sopenharmony_ciTESTFILE = data/cprog.py
167db96d56Sopenharmony_ciTIMEFILE = data/xxl.py
177db96d56Sopenharmony_ciTESTDIR = .
187db96d56Sopenharmony_ciTESTFLAGS = --short
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_cidata/xxl.py:
217db96d56Sopenharmony_ci	$(PYTHON) -m zipfile -e data/xxl.zip data
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_cibuild: peg_extension/parse.c
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_cipeg_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
267db96d56Sopenharmony_ci	$(PYTHON) -m pegen -q c $(GRAMMAR) $(TOKENS) -o peg_extension/parse.c --compile-extension
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciclean:
297db96d56Sopenharmony_ci	-rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c
307db96d56Sopenharmony_ci	-rm -f data/xxl.py
317db96d56Sopenharmony_ci	-rm -rf $(VENVDIR)
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cidump: peg_extension/parse.c
347db96d56Sopenharmony_ci	cat -n $(TESTFILE)
357db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; import ast; t = parse.parse_file('$(TESTFILE)', mode=1); print(ast.dump(t))"
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciregen-metaparser: pegen/metagrammar.gram pegen/*.py
387db96d56Sopenharmony_ci	$(PYTHON) -m pegen -q python pegen/metagrammar.gram -o pegen/grammar_parser.py
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci# Note: These targets really depend on the generated shared object in peg_extension/parse.*.so but
417db96d56Sopenharmony_ci# this has different names in different systems so we are abusing the implicit dependency on
427db96d56Sopenharmony_ci# parse.c by the use of --compile-extension.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci.PHONY: test
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_civenv:
477db96d56Sopenharmony_ci	$(PYTHON) -m venv $(VENVDIR)
487db96d56Sopenharmony_ci	$(VENVPYTHON) -m pip install -U pip setuptools
497db96d56Sopenharmony_ci	$(VENVPYTHON) -m pip install -r requirements.pip
507db96d56Sopenharmony_ci	@echo "The venv has been created in the $(VENVDIR) directory"
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_citest: run
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_cirun: peg_extension/parse.c
557db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)'); exec(t)"
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_cicompile: peg_extension/parse.c
587db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=2)"
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ciparse: peg_extension/parse.c
617db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=1)"
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_cicheck: peg_extension/parse.c
647db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=0)"
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_cistats: peg_extension/parse.c data/xxl.py
677db96d56Sopenharmony_ci	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TIMEFILE)', mode=0); parse.dump_memo_stats()" >@data
687db96d56Sopenharmony_ci	$(PYTHON) scripts/joinstats.py @data
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_citime: time_compile
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_citime_compile: venv data/xxl.py
737db96d56Sopenharmony_ci	$(VENVPYTHON) scripts/benchmark.py --target=xxl compile
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_citime_parse: venv data/xxl.py
767db96d56Sopenharmony_ci	$(VENVPYTHON) scripts/benchmark.py --target=xxl parse
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_citime_peg_dir: venv
797db96d56Sopenharmony_ci	$(VENVPYTHON) scripts/test_parse_directory.py \
807db96d56Sopenharmony_ci		-d $(TESTDIR) \
817db96d56Sopenharmony_ci		$(TESTFLAGS) \
827db96d56Sopenharmony_ci		--exclude "*/failset/*" \
837db96d56Sopenharmony_ci		--exclude "*/failset/**" \
847db96d56Sopenharmony_ci		--exclude "*/failset/**/*"
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_citime_stdlib: $(CPYTHON) venv
877db96d56Sopenharmony_ci	$(VENVPYTHON) scripts/test_parse_directory.py \
887db96d56Sopenharmony_ci		-d $(CPYTHON) \
897db96d56Sopenharmony_ci		$(TESTFLAGS) \
907db96d56Sopenharmony_ci		--exclude "*/bad*" \
917db96d56Sopenharmony_ci		--exclude "*/lib2to3/tests/data/*"
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_cimypy: regen-metaparser
947db96d56Sopenharmony_ci	$(MYPY)  # For list of files, see mypy.ini
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciformat-python:
977db96d56Sopenharmony_ci	black pegen scripts
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ciformat: format-python
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_cifind_max_nesting:
1027db96d56Sopenharmony_ci	$(PYTHON) scripts/find_max_nesting.py
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_citags: TAGS
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ciTAGS: pegen/*.py test/test_pegen.py
1077db96d56Sopenharmony_ci	etags pegen/*.py test/test_pegen.py
108