summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile195
1 files changed, 82 insertions, 113 deletions
diff --git a/Makefile b/Makefile
index f47d262c..5081a4ed 100644
--- a/Makefile
+++ b/Makefile
@@ -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}'