genpkgpy.mk (2106B)
1 PYTHON_EXE?=python3 2 pthbs_genpkgpy?=. 3 cache?=../cache 4 5 # re-evaluate each time because there's no sensible way to check 6 # whether the python interpreter changed 7 $(eval $(shell $(PYTHON_EXE) $(pthbs_genpkgpy)/make_vars.py '$(cache)/make')) 8 9 PY_SRC:=$(wildcard $(pthbs_genpkgpy)/*.py) 10 PY_REQ:=$(pthbs_genpkgpy)/py-$(PYTHON_IMPL)-requirements.txt 11 PY_WHL:=$(cache)/wheels/$(PYTHON_IMPL) 12 VENV:=$(cache)/virtualenvs/$(PYTHON_IMPL) 13 PYTHON_VENV_INSTALL=pip-tools wheel 14 15 pycodestyle: $(patsubst $(pthbs_genpkgpy)/%.py,$(pthbs_genpkgpy)/.%.pyfmt,$(PY_SRC)) $(VENV)/.done 16 '$(VENV)/bin/pylama' -l 88 $(PY_SRC) || true 17 18 $(pthbs_genpkgpy)/.%.pyfmt: $(pthbs_genpkgpy)/%.py $(VENV)/.done 19 '$(VENV)/bin/isort' - <'$<' >'$<.tmp1' 20 cp -a '$<' '$<.tmp2' 21 '$(VENV)/bin/black' -S - <'$<.tmp1' >'$<.tmp2' 22 rm '$<.tmp1' 23 if cmp -s '$<.tmp2' '$<'; then rm -v '$<.tmp2'; else mv -v '$<.tmp2' '$<'; fi 24 touch $@ 25 26 .PHONY: py-requirements py-wheels py-venv py-virtualenv py-genpkg 27 py-requirements: $(PY_REQ) 28 29 py-wheels: $(PY_WHL)/.done 30 31 py-venv: $(VENV)/.done 32 33 py-virtualenv: py-venv 34 35 py-genpkg: $(VENV)/.done $(cache)/link/git-commit-sha1/.local $(cache)/link/file-sha256/.local 36 '$(VENV)/bin/python' $(pthbs_genpkgpy)/genpkg.py \ 37 --package-dir='$(packages)' \ 38 --template-dir='$(templates)' \ 39 --index-dir='$(index)' \ 40 --cache-dir='$(cache)' 41 42 # -- requirement file rules 43 44 $(PY_REQ): $(pthbs_genpkgpy)/py-requirements.in $(VENV)/bin/pip-compile 45 '$(VENV)/bin/pip-compile' -v --annotate -o '$@.new' '$(pthbs_genpkgpy)/py-requirements.in' 46 mv '$@.new' '$@' 47 48 # -- wheel building rules 49 50 $(PY_WHL)/.done: $(PY_REQ) 51 mkdir -p '$(PY_WHL)' 52 '$(VENV)/bin/python' -m pip wheel -w '$(PY_WHL)' -r '$(PY_REQ)' 53 touch '$@' 54 55 # -- virtualenv rules 56 57 $(VENV)/bin/pip-compile $(VENV)/bin/pip-sync: 58 if test -e '$(VENV)'; then rm -r '$(VENV)'; else true; fi 59 mkdir -p virtualenvs 60 $(PYTHON_VENV) '$(VENV)' 61 '$(VENV)/bin/pip' install -I $(PYTHON_VENV_INSTALL) 62 63 $(VENV)/.done: $(PY_REQ) $(VENV)/bin/pip-sync $(PY_WHL)/.done 64 $(VENV)/bin/pip-sync --no-index -f '$(PY_WHL)' '$(PY_REQ)' 65 ln -sf 'virtualenvs/$(PYTHON_IMPL)' '$(cache)/venv' 66 touch '$@'