# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt # Makefile for utility work on coverage.py. help: ## Show this help. @echo "Available targets:" @grep '^[a-zA-Z]' $(MAKEFILE_LIST) | sort | awk -F ':.*?## ' 'NF==2 {printf " %-26s%s\n", $$1, $$2}' clean_platform: ## Remove files that clash across platforms. rm -f *.so */*.so rm -rf __pycache__ */__pycache__ */*/__pycache__ */*/*/__pycache__ */*/*/*/__pycache__ */*/*/*/*/__pycache__ rm -f *.pyc */*.pyc */*/*.pyc */*/*/*.pyc */*/*/*/*.pyc */*/*/*/*/*.pyc rm -f *.pyo */*.pyo */*/*.pyo */*/*/*.pyo */*/*/*/*.pyo */*/*/*/*/*.pyo clean: clean_platform ## Remove artifacts of test execution, installation, etc. -pip uninstall -y coverage rm -f *.pyd */*.pyd rm -rf build coverage.egg-info dist htmlcov rm -f *.bak */*.bak */*/*.bak */*/*/*.bak */*/*/*/*.bak */*/*/*/*/*.bak rm -f *$$py.class */*$$py.class */*/*$$py.class */*/*/*$$py.class */*/*/*/*$$py.class */*/*/*/*/*$$py.class rm -f coverage/*,cover rm -f MANIFEST rm -f .coverage .coverage.* coverage.xml .metacov* rm -f .tox/*/lib/*/site-packages/zzz_metacov.pth rm -f */.coverage */*/.coverage */*/*/.coverage */*/*/*/.coverage */*/*/*/*/.coverage */*/*/*/*/*/.coverage rm -f tests/covmain.zip tests/zipmods.zip rm -rf tests/eggsrc/build tests/eggsrc/dist tests/eggsrc/*.egg-info rm -f setuptools-*.egg distribute-*.egg distribute-*.tar.gz rm -rf doc/_build doc/_spell doc/sample_html_beta rm -rf tmp rm -rf .cache .pytest_cache .hypothesis rm -rf $$TMPDIR/coverage_test -make -C tests/gold/html clean sterile: clean ## Remove all non-controlled content, even if expensive. rm -rf .tox -docker image rm -f quay.io/pypa/manylinux1_i686 quay.io/pypa/manylinux1_x86_64 CSS = coverage/htmlfiles/style.css SCSS = coverage/htmlfiles/style.scss css: $(CSS) ## Compile .scss into .css. $(CSS): $(SCSS) pysassc --style=compact $(SCSS) $@ cp $@ tests/gold/html/styled LINTABLE = coverage tests igor.py setup.py __main__.py lint: ## Run linters and checkers. tox -e lint todo: -grep -R --include=*.py TODO $(LINTABLE) pep8: pycodestyle --filename=*.py --repeat $(LINTABLE) test: tox -e py27,py35 $(ARGS) PYTEST_SMOKE_ARGS = -n 6 -m "not expensive" --maxfail=3 $(ARGS) smoke: ## Run tests quickly with the C tracer in the lowest supported Python versions. COVERAGE_NO_PYTRACER=1 tox -q -e py27,py35 -- $(PYTEST_SMOKE_ARGS) pysmoke: ## Run tests quickly with the Python tracer in the lowest supported Python versions. COVERAGE_NO_CTRACER=1 tox -q -e py27,py35 -- $(PYTEST_SMOKE_ARGS) DOCKER_RUN = docker run -it --init --rm -v `pwd`:/io RUN_MANYLINUX_X86 = $(DOCKER_RUN) quay.io/pypa/manylinux1_x86_64 /io/ci/manylinux.sh RUN_MANYLINUX_I686 = $(DOCKER_RUN) quay.io/pypa/manylinux1_i686 /io/ci/manylinux.sh test_linux: ## Run the tests in Linux under Docker. # The Linux .pyc files clash with the host's because of file path # changes, so clean them before and after running tests. make clean_platform $(RUN_MANYLINUX_X86) test $(ARGS) make clean_platform meta_linux: ## Run meta-coverage in Linux under Docker. ARGS="meta $(ARGS)" make test_linux # Coverage measurement of coverage.py itself (meta-coverage). See metacov.ini # for details. metacov: ## Run meta-coverage, measuring ourself. COVERAGE_COVERAGE=yes tox $(ARGS) metahtml: ## Produce meta-coverage HTML reports. python igor.py combine_html # Kitting kit: ## Make the source distribution. python setup.py sdist wheel: ## Make the wheels for distribution. tox -c tox_wheels.ini $(ARGS) kit_linux: ## Make the Linux wheels. $(RUN_MANYLINUX_X86) build $(RUN_MANYLINUX_I686) build kit_upload: ## Upload the built distributions to PyPI. twine upload --verbose dist/* test_upload: ## Upload the distrubutions to PyPI's testing server. twine upload --verbose --repository testpypi dist/* kit_local: # pip.conf looks like this: # [global] # find-links = file:///Users/ned/Downloads/local_pypi cp -v dist/* `awk -F "//" '/find-links/ {print $$2}' ~/.pip/pip.conf` # pip caches wheels of things it has installed. Clean them out so we # don't go crazy trying to figure out why our new code isn't installing. find ~/Library/Caches/pip/wheels -name 'coverage-*' -delete download_appveyor: ## Download the latest Windows artifacts from AppVeyor. python ci/download_appveyor.py nedbat/coveragepy build_ext: python setup.py build_ext # Documentation DOCBIN = .tox/doc/bin SPHINXOPTS = -aE SPHINXBUILD = $(DOCBIN)/sphinx-build $(SPHINXOPTS) SPHINXAUTOBUILD = $(DOCBIN)/sphinx-autobuild -p 9876 --ignore '.git/**' --open-browser WEBHOME = ~/web/stellated/ WEBSAMPLE = $(WEBHOME)/files/sample_coverage_html WEBSAMPLEBETA = $(WEBHOME)/files/sample_coverage_html_beta $(DOCBIN): tox -q -e doc --notest cmd_help: $(DOCBIN) mkdir -p tmp for cmd in annotate combine debug erase html json report run xml; do \ echo > tmp/$$cmd.rst; \ echo ".. code::" >> tmp/$$cmd.rst; \ echo >> tmp/$$cmd.rst; \ echo " $$ coverage $$cmd --help" >> tmp/$$cmd.rst; \ $(DOCBIN)/python -m coverage $$cmd --help | \ sed \ -e 's/__main__.py/coverage/' \ -e '/^Full doc/d' \ -e 's/^/ /' \ >> tmp/$$cmd.rst; \ done dochtml: $(DOCBIN) cmd_help ## Build the docs HTML output. $(DOCBIN)/python doc/check_copied_from.py doc/*.rst $(SPHINXBUILD) -b html doc doc/_build/html docdev: dochtml ## Build docs, and auto-watch for changes. PATH=$(DOCBIN):$(PATH) $(SPHINXAUTOBUILD) -b html doc doc/_build/html docspell: $(DOCBIN) ## Run the spell checker on the docs. $(SPHINXBUILD) -b spelling doc doc/_spell publish: rm -f $(WEBSAMPLE)/*.* mkdir -p $(WEBSAMPLE) cp doc/sample_html/*.* $(WEBSAMPLE) publishbeta: rm -f $(WEBSAMPLEBETA)/*.* mkdir -p $(WEBSAMPLEBETA) cp doc/sample_html_beta/*.* $(WEBSAMPLEBETA) CHANGES_MD = tmp/rst_rst/changes.md RELNOTES_JSON = tmp/relnotes.json $(CHANGES_MD): CHANGES.rst $(DOCBIN) $(SPHINXBUILD) -b rst doc tmp/rst_rst pandoc -frst -tmarkdown_strict --atx-headers --wrap=none tmp/rst_rst/changes.rst > $(CHANGES_MD) relnotes_json: $(RELNOTES_JSON) ## Convert changelog to JSON for further parsing. $(RELNOTES_JSON): $(CHANGES_MD) $(DOCBIN)/python ci/parse_relnotes.py tmp/rst_rst/changes.md $(RELNOTES_JSON) tidelift_relnotes: $(RELNOTES_JSON) ## Upload parsed release notes to Tidelift. $(DOCBIN)/python ci/tidelift_relnotes.py $(RELNOTES_JSON) pypi/coverage github_releases: $(RELNOTES_JSON) ## Update GitHub releases. $(DOCBIN)/python ci/github_releases.py $(RELNOTES_JSON) nedbat/coveragepy