.PHONY: all clean wheels venv virtualenv test all: requirements venv PYTHONPATH:=$(abspath .) # Set python module path to source directory PYTHON_EXE:=python3 # re-evaluate each time because there's no sensible way to check # whether the python interpreter changed $(eval $(shell $(PYTHON_EXE) utils/make_vars.py)) requirements: release-$(PYTHON_IMPL)-requirements.txt dev-$(PYTHON_IMPL)-requirements.txt wheels: wheels/$(PYTHON_IMPL)/.done venv: virtualenvs/$(PYTHON_IMPL)/.done ln -sf 'virtualenvs/$(PYTHON_IMPL)' venv virtualenv: venv test: venv venv/bin/pytest $(TEST_ARGS) # -- docs handling docs: docs-html docs-%: venv $(MAKE) -C docs PATH="$$PWD/venv/bin:$$PATH" '$*' # -- requirement file rules release-$(PYTHON_IMPL)-requirements.txt: release-requirements.in '$(PYTHON_EXE)' -m piptools compile -v --annotate -o '$@.new' $< mv '$@.new' '$@' # Pull in both files into one compiled development requirement set dev-$(PYTHON_IMPL)-requirements.txt: release-requirements.in dev-requirements.in '$(PYTHON_EXE)' -m piptools compile -v --annotate -o '$@.new' release-requirements.in dev-requirements.in mv '$@.new' '$@' # -- wheel building rules wheels/$(PYTHON_IMPL)/.done: dev-$(PYTHON_IMPL)-requirements.txt mkdir -p 'wheels/$(PYTHON_IMPL)' '$(PYTHON_EXE)' -m pip wheel -w 'wheels/$(PYTHON_IMPL)' -r 'dev-$(PYTHON_IMPL)-requirements.txt' touch '$@' # -- virtualenv rules virtualenvs/$(PYTHON_IMPL)/bin/pip-sync: if test -e 'virtualenvs/$(PYTHON_IMPL)'; then rm -r 'virtualenvs/$(PYTHON_IMPL)'; else true; fi mkdir -p virtualenvs $(PYTHON_VENV) 'virtualenvs/$(PYTHON_IMPL)' 'virtualenvs/$(PYTHON_IMPL)/bin/pip' install -I $(PYTHON_VENV_INSTALL) # for python-2 compatability #'virtualenvs/$(PYTHON_IMPL)/bin/pip' install -I "setuptools<45.0.0" 'pip<20.3' 'pip-tools<6' virtualenvs/$(PYTHON_IMPL)/.done: dev-$(PYTHON_IMPL)-requirements.txt virtualenvs/$(PYTHON_IMPL)/bin/pip-sync wheels/$(PYTHON_IMPL)/.done virtualenvs/$(PYTHON_IMPL)/bin/pip-sync --no-index -f 'wheels/$(PYTHON_IMPL)' 'dev-$(PYTHON_IMPL)-requirements.txt' touch '$@'