diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 195 |
1 files changed, 82 insertions, 113 deletions
@@ -5,7 +5,6 @@ PYTHON = python TSCRIPT = psutil/tests/__main__.py ARGS = - # List of nice-to-have dev libs. DEPS = \ argparse \ @@ -23,10 +22,11 @@ DEPS = \ sphinx \ twine \ unittest2 \ - requests + wheel # In not in a virtualenv, add --user options for install commands. INSTALL_OPTS = `$(PYTHON) -c "import sys; print('' if hasattr(sys, 'real_prefix') else '--user')"` +TEST_PREFIX = PYTHONWARNINGS=all PSUTIL_TESTING=1 PSUTIL_DEBUG=1 all: test @@ -34,8 +34,7 @@ all: test # Install # =================================================================== -# Remove all build files. -clean: +clean: ## Remove all build files. rm -rf `find . -type d -name __pycache__ \ -o -type f -name \*.bak \ -o -type f -name \*.orig \ @@ -60,9 +59,7 @@ clean: _: - -# Compile without installing. -build: _ +build: _ ## Compile without installing. # make sure setuptools is installed (needed for 'develop' / edit mode) $(PYTHON) -c "import setuptools" PYTHONWARNINGS=all $(PYTHON) setup.py build @@ -73,21 +70,16 @@ build: _ rm -rf tmp $(PYTHON) -c "import psutil" # make sure it actually worked -# Install this package + GIT hooks. Install is done: -# - as the current user, in order to avoid permission issues -# - in development / edit mode, so that source can be modified on the fly -install: +install: ## Install this package as current user in "edit" mode. ${MAKE} build PYTHONWARNINGS=all $(PYTHON) setup.py develop $(INSTALL_OPTS) rm -rf tmp -# Uninstall this package via pip. -uninstall: +uninstall: ## Uninstall this package via pip. cd ..; $(PYTHON) -m pip uninstall -y -v psutil -# Install PIP (only if necessary). -install-pip: - PYTHONWARNINGS=all $(PYTHON) -c \ +install-pip: ## Install pip (no-op if already installed). + $(PYTHON) -c \ "import sys, ssl, os, pkgutil, tempfile, atexit; \ sys.exit(0) if pkgutil.find_loader('pip') else None; \ pyexc = 'from urllib.request import urlopen' if sys.version_info[0] == 3 else 'from urllib2 import urlopen'; \ @@ -105,8 +97,7 @@ install-pip: f.close(); \ sys.exit(code);" -# Install GIT hooks, pip, test deps (also upgrades them). -setup-dev-env: +setup-dev-env: ## Install GIT hooks, pip, test deps (also upgrades them). ${MAKE} install-git-hooks ${MAKE} install-pip $(PYTHON) -m pip install $(INSTALL_OPTS) --upgrade pip @@ -116,68 +107,55 @@ setup-dev-env: # Tests # =================================================================== -# Run all tests. -test: +test: ## Run all tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) $(TSCRIPT) + $(TEST_PREFIX) $(PYTHON) $(TSCRIPT) -# Run process-related API tests. -test-process: +test-process: ## Run process-related API tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) -m unittest -v psutil.tests.test_process + $(TEST_PREFIX) $(PYTHON) -m unittest -v psutil.tests.test_process -# Run system-related API tests. -test-system: +test-system: ## Run system-related API tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) -m unittest -v psutil.tests.test_system + $(TEST_PREFIX) $(PYTHON) -m unittest -v psutil.tests.test_system -# Run miscellaneous tests. -test-misc: +test-misc: ## Run miscellaneous tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_misc.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_misc.py -# Test APIs dealing with strings. -test-unicode: +test-unicode: ## Test APIs dealing with strings. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_unicode.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_unicode.py -# APIs sanity tests. -test-contracts: +test-contracts: ## APIs sanity tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_contracts.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_contracts.py -# Test net_connections() and Process.connections(). -test-connections: +test-connections: ## Test net_connections() and Process.connections(). ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_connections.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_connections.py -# POSIX specific tests. -test-posix: +test-posix: ## POSIX specific tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_posix.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_posix.py -# Run specific platform tests only. -test-platform: +test-platform: ## Run specific platform tests only. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_`$(PYTHON) -c 'import psutil; print([x.lower() for x in ("LINUX", "BSD", "OSX", "SUNOS", "WINDOWS") if getattr(psutil, x)][0])'`.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_`$(PYTHON) -c 'import psutil; print([x.lower() for x in ("LINUX", "BSD", "OSX", "SUNOS", "WINDOWS", "AIX") if getattr(psutil, x)][0])'`.py -# Memory leak tests. -test-memleaks: +test-memleaks: ## Memory leak tests. ${MAKE} install - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) psutil/tests/test_memory_leaks.py + $(TEST_PREFIX) $(PYTHON) psutil/tests/test_memory_leaks.py -# Run a specific test by name, e.g. -# make test-by-name psutil.tests.test_system.TestSystemAPIs.test_cpu_times -test-by-name: +test-by-name: ## e.g. make test-by-name ARGS=psutil.tests.test_system.TestSystemAPIs ${MAKE} install - @PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) -m unittest -v $(ARGS) + @$(TEST_PREFIX) $(PYTHON) -m unittest -v $(ARGS) -# Run test coverage. -coverage: +test-coverage: ## Run test coverage. ${MAKE} install # Note: coverage options are controlled by .coveragerc file rm -rf .coverage htmlcov - PSUTIL_TESTING=1 PYTHONWARNINGS=all $(PYTHON) -m coverage run $(TSCRIPT) + $(TEST_PREFIX) $(PYTHON) -m coverage run $(TSCRIPT) $(PYTHON) -m coverage report @echo "writing results to htmlcov/index.html" $(PYTHON) -m coverage html @@ -187,27 +165,25 @@ coverage: # Linters # =================================================================== -pep8: +pep8: ## PEP8 linter. @git ls-files | grep \\.py$ | xargs $(PYTHON) -m pep8 -pyflakes: +pyflakes: ## Pyflakes linter. @export PYFLAKES_NODOCTEST=1 && \ git ls-files | grep \\.py$ | xargs $(PYTHON) -m pyflakes -flake8: +flake8: ## flake8 linter. @git ls-files | grep \\.py$ | xargs $(PYTHON) -m flake8 # =================================================================== # GIT # =================================================================== -# git-tag a new release -git-tag-release: +git-tag-release: ## Git-tag a new release. git tag -a release-`python -c "import setup; print(setup.get_version())"` -m `git rev-list HEAD --count`:`git rev-parse --short HEAD` git push --follow-tags -# Install GIT pre-commit hook. -install-git-hooks: +install-git-hooks: ## Install GIT pre-commit hook. ln -sf ../../.git-pre-commit .git/hooks/pre-commit chmod +x .git/hooks/pre-commit @@ -215,86 +191,79 @@ install-git-hooks: # Distribution # =================================================================== -# Generate tar.gz source distribution. -sdist: - ${MAKE} clean +# --- create + +sdist: ## Create tar.gz source distribution. ${MAKE} generate-manifest - PYTHONWARNINGS=all $(PYTHON) setup.py sdist + $(PYTHON) setup.py sdist -# Upload source tarball on https://pypi.python.org/pypi/psutil. -upload-src: - ${MAKE} sdist - PYTHONWARNINGS=all $(PYTHON) setup.py sdist upload +wheel: ## Generate wheel. + $(PYTHON) setup.py bdist_wheel -# Download exes/wheels hosted on appveyor. -win-download-exes: - PYTHONWARNINGS=all $(PYTHON) scripts/internal/download_exes.py --user giampaolo --project psutil +win-download-wheels: ## Download wheels hosted on appveyor. + $(TEST_PREFIX) $(PYTHON) scripts/internal/download_exes.py --user giampaolo --project psutil -# Upload exes/wheels in dist/* directory to PYPI. -win-upload-exes: - PYTHONWARNINGS=all $(PYTHON) -m twine upload dist/*.exe - PYTHONWARNINGS=all $(PYTHON) -m twine upload dist/*.whl +# --- upload -# All the necessary steps before making a release. -pre-release: - @PYTHONWARNINGS=all $(PYTHON) -c "import subprocess, sys; out = subprocess.check_output('git diff-index HEAD --', shell=True).strip(); sys.exit('there are uncommitted changes') if out else sys.exit(0);" +upload-src: ## Upload source tarball on https://pypi.python.org/pypi/psutil. ${MAKE} sdist + $(PYTHON) setup.py sdist upload + +upload-win-wheels: ## Upload wheels in dist/* directory on PYPI. + $(PYTHON) -m twine upload dist/*.whl + +# --- others + +pre-release: ## Check if we're ready to produce a new release. + rm -rf dist ${MAKE} install - @PYTHONWARNINGS=all $(PYTHON) -c \ + ${MAKE} generate-manifest + git diff MANIFEST.in > /dev/null # ...otherwise 'git diff-index HEAD' will complain + ${MAKE} win-download-wheels + ${MAKE} sdist + $(PYTHON) -c \ "from psutil import __version__ as ver; \ doc = open('docs/index.rst').read(); \ history = open('HISTORY.rst').read(); \ assert ver in doc, '%r not in docs/index.rst' % ver; \ assert ver in history, '%r not in HISTORY.rst' % ver; \ assert 'XXXX' not in history, 'XXXX in HISTORY.rst';" - ${MAKE} win-download-exes + $(PYTHON) -c "import subprocess, sys; out = subprocess.check_output('git diff --quiet && git diff --cached --quiet', shell=True).strip(); sys.exit('there are uncommitted changes:\n%s' % out) if out else 0 ;" -# Create a release: creates tar.gz and exes/wheels, uploads them, -# upload doc, git tag release. -release: +release: ## Create a release (down/uploads tar.gz, wheels, git tag release). ${MAKE} pre-release - PYTHONWARNINGS=all $(PYTHON) -m twine upload dist/* # upload tar.gz, exes, wheels on PYPI + $(PYTHON) -m twine upload dist/* # upload tar.gz and Windows wheels on PYPI ${MAKE} git-tag-release -# Print announce of new release. -print-announce: - @PYTHONWARNINGS=all $(PYTHON) scripts/internal/print_announce.py +print-announce: ## Print announce of new release. + @$(TEST_PREFIX) $(PYTHON) scripts/internal/print_announce.py -# Print releases' timeline. -print-timeline: - @PYTHONWARNINGS=all $(PYTHON) scripts/internal/print_timeline.py +print-timeline: ## Print releases' timeline. + @$(TEST_PREFIX) $(PYTHON) scripts/internal/print_timeline.py -# Inspect MANIFEST.in file. -check-manifest: - PYTHONWARNINGS=all $(PYTHON) -m check_manifest -v $(ARGS) +check-manifest: ## Inspect MANIFEST.in file. + $(PYTHON) -m check_manifest -v $(ARGS) -# Generates MANIFEST.in file. -generate-manifest: - @PYTHONWARNINGS=all $(PYTHON) scripts/internal/generate_manifest.py > MANIFEST.in +generate-manifest: ## Generates MANIFEST.in file. + $(PYTHON) scripts/internal/generate_manifest.py > MANIFEST.in # =================================================================== # Misc # =================================================================== -grep-todos: +grep-todos: ## Look for TODOs in the source files. git grep -EIn "TODO|FIXME|XXX" -# run script which benchmarks oneshot() ctx manager (see #799) -bench-oneshot: +bench-oneshot: ## Benchmarks for oneshot() ctx manager (see #799). ${MAKE} install - PYTHONWARNINGS=all $(PYTHON) scripts/internal/bench_oneshot.py + $(TEST_PREFIX) $(PYTHON) scripts/internal/bench_oneshot.py -# same as above but using perf module (supposed to be more precise) -bench-oneshot-2: +bench-oneshot-2: ## Same as above but using perf module (supposed to be more precise) ${MAKE} install - PYTHONWARNINGS=all $(PYTHON) scripts/internal/bench_oneshot_2.py + $(TEST_PREFIX) $(PYTHON) scripts/internal/bench_oneshot_2.py -# generate a doc.zip file and manually upload it to PYPI. -doc: - cd docs && make html && cd _build/html/ && zip doc.zip -r . - mv docs/_build/html/doc.zip . - @echo "done; now manually upload doc.zip from here: https://pypi.python.org/pypi?:action=pkg_edit&name=psutil" - -# check whether the links mentioned in some files are valid. -check-broken-links: +check-broken-links: ## Look for broken links in source files. git ls-files | xargs $(PYTHON) -Wa scripts/internal/check_broken_links.py + +help: ## Display callable targets. + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' |