SRC := sttts
EXTRA ?= dev,all
PYTHON ?= python3
VENV ?= venv
ACTIVATE := $(VENV)/bin/activate
,:=,
.PHONY: deps
deps: $(ACTIVATE)
$(ACTIVATE): requirements.txt
$(PYTHON) -m venv $(VENV)
. $(ACTIVATE) ; pip install --require-virtualenv -U pip setuptools wheel
. $(ACTIVATE) ; pip install -U -r $(<)
@touch $(@)
.PHONY: install
install: $(VENV)/bin/$(SRC)
$(VENV)/bin/$(SRC): setup.py requirements.in
$(PYTHON) -m venv $(VENV)
. $(ACTIVATE) ; pip install --require-virtualenv -U pip setuptools wheel
. $(ACTIVATE) ; pip install --force-reinstall .[$(EXTRA)]
@touch $(@)
.PHONY: requirements
requirements: requirements.txt
requirements.txt: requirements.in
grep -E -e '^[^#]+$$' -e ' #;.* extra==($(subst $(,),|,$(EXTRA)))' $(<) > $(@)
.PHONY: check
check: deps
. $(ACTIVATE) ; mypy --ignore-missing-imports --pretty --no-error-summary $(SRC) $(wildcard *.py)
. $(ACTIVATE) ; mypy --ignore-missing-imports --pretty --no-error-summary --python-version 3.8 $(SRC) $(wildcard *.py)
. $(ACTIVATE) ; flake8 --max-line-length 120 $(SRC) $(wildcard *.py)
. $(ACTIVATE) ; yamllint -d '{extends: default, rules: {line-length: disable}}' -- $(wildcard *.yaml) /dev/null
.PHONY: docs
docs: deps
@mkdir -p $(@)/pydoc
. $(ACTIVATE) ; cd $(@)/pydoc && PYTHONPATH=../../ python3 -m pydoc -w $(shell find $(SRC) -type f -name '*.py' -not -empty -not -path '*__pycache__*' | sed 's#^[./]*## ; s#\.py$$## ; s#/#.#g') && ln -fs $(SRC).html index.html
. $(ACTIVATE) ; cd $(@) && sphinx-apidoc -o source ../$(SRC) && rm -f source/modules.rst
. $(ACTIVATE) ; cd $(@) && sphinx-build -n --keep-going -b html -a -E source html && rm -rf html/_sources html/py-modindex.html html/.buildinfo html/objects.inv html/.doctrees source/$(SRC).rst source/$(SRC).*.rst
.PHONY: clean
clean:
rm -rf requirements.txt $(VENV) .mypy_cache docs/html docs/pydoc $(SRC).egg-info build
find . -ignore_readdir_race -type d -name '__pycache__' -exec rm -rf {} \; >/dev/null 2>&1 || true