2020-10-07 19:01:35 +00:00
|
|
|
# Python 3 porting targets
|
2020-09-30 18:47:17 +00:00
|
|
|
#
|
|
|
|
# NOTE: this Makefile requires GNU make
|
|
|
|
|
|
|
|
### Defensive settings for make:
|
|
|
|
# https://tech.davis-hansson.com/p/make/
|
|
|
|
SHELL := bash
|
|
|
|
.ONESHELL:
|
|
|
|
.SHELLFLAGS := -xeu -o pipefail -c
|
|
|
|
.SILENT:
|
|
|
|
.DELETE_ON_ERROR:
|
|
|
|
MAKEFLAGS += --warn-undefined-variables
|
|
|
|
MAKEFLAGS += --no-builtin-rules
|
|
|
|
|
|
|
|
|
|
|
|
# Top-level, phony targets
|
|
|
|
|
|
|
|
.PHONY: default
|
|
|
|
default:
|
|
|
|
@echo "no default target"
|
|
|
|
|
2020-09-30 19:14:06 +00:00
|
|
|
.PHONY: test-py3-all-before
|
|
|
|
## Log the output of running all tests under Python 3 before changes
|
|
|
|
test-py3-all-before: ../../.tox/make-test-py3-all-old.log
|
|
|
|
.PHONY: test-py3-all-diff
|
|
|
|
## Compare the output of running all tests under Python 3 after changes
|
|
|
|
test-py3-all-diff: ../../.tox/make-test-py3-all.diff
|
|
|
|
|
2020-09-30 18:47:17 +00:00
|
|
|
|
|
|
|
# Real targets
|
|
|
|
|
|
|
|
# Gauge the impact of changes on Python 3 compatibility
|
|
|
|
# Compare the output from running all tests under Python 3 before and after changes.
|
|
|
|
# Before changes:
|
|
|
|
# `$ rm -f .tox/make-test-py3-all-*.log && make .tox/make-test-py3-all-old.log`
|
|
|
|
# After changes:
|
|
|
|
# `$ make .tox/make-test-py3-all.diff`
|
|
|
|
$(foreach side,old new,../../.tox/make-test-py3-all-$(side).log):
|
|
|
|
cd "../../"
|
|
|
|
tox --develop --notest -e py36-coverage
|
|
|
|
(make VIRTUAL_ENV=./.tox/py36-coverage TEST_SUITE=allmydata \
|
|
|
|
test-venv-coverage || true) | \
|
|
|
|
sed -E 's/\([0-9]+\.[0-9]{3} secs\)/(#.### secs)/' | \
|
|
|
|
tee "./misc/python3/$(@)"
|
|
|
|
../../.tox/make-test-py3-all.diff: ../../.tox/make-test-py3-all-new.log
|
|
|
|
(diff -u "$(<:%-new.log=%-old.log)" "$(<)" || true) | tee "$(@)"
|
|
|
|
|
|
|
|
# Locate modules that are candidates for naively converting `unicode` -> `str`.
|
|
|
|
# List all Python source files that reference `unicode` but don't reference `str`
|
|
|
|
../../.tox/py3-unicode-no-str.ls:
|
|
|
|
cd "../../"
|
|
|
|
find src -type f -iname '*.py' -exec grep -l -E '\Wunicode\W' '{}' ';' | \
|
|
|
|
xargs grep -L '\Wstr\W' | xargs ls -ld | tee "./misc/python3/$(@)"
|