PYTHON = python
TSCRIPT = psutil/tests/__main__.py
ARGS =
DEPS = \
argparse \
check-manifest \
coverage \
flake8 \
futures \
ipaddress \
mock==1.0.1 \
pep8 \
perf \
pyflakes \
requests \
setuptools \
sphinx \
twine \
unittest2 \
wheel
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
clean:
rm -rf `find . -type d -name __pycache__ \
-o -type f -name \*.bak \
-o -type f -name \*.orig \
-o -type f -name \*.pyc \
-o -type f -name \*.pyd \
-o -type f -name \*.pyo \
-o -type f -name \*.rej \
-o -type f -name \*.so \
-o -type f -name \*.~ \
-o -type f -name \*\$testfn`
rm -rf \
*.core \
*.egg-info \
*\$testfn* \
.coverage \
.tox \
build/ \
dist/ \
docs/_build/ \
htmlcov/ \
tmp/
_:
build: _
$(PYTHON) -c "import setuptools"
PYTHONWARNINGS=all $(PYTHON) setup.py build
@ @ @ PYTHONWARNINGS=all $(PYTHON) setup.py build_ext -i
rm -rf tmp
$(PYTHON) -c "import psutil"
install:
${MAKE} build
PYTHONWARNINGS=all $(PYTHON) setup.py develop $(INSTALL_OPTS)
rm -rf tmp
uninstall:
cd ..; $(PYTHON) -m pip uninstall -y -v psutil
install-pip:
$(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'; \
exec(pyexc); \
ctx = ssl._create_unverified_context() if hasattr(ssl, '_create_unverified_context') else None; \
kw = dict(context=ctx) if ctx else {}; \
req = urlopen('https://bootstrap.pypa.io/get-pip.py', **kw); \
data = req.read(); \
f = tempfile.NamedTemporaryFile(suffix='.py'); \
atexit.register(f.close); \
f.write(data); \
f.flush(); \
print('downloaded %s' % f.name); \
code = os.system('%s %s --user' % (sys.executable, f.name)); \
f.close(); \
sys.exit(code);"
setup-dev-env:
${MAKE} install-git-hooks
${MAKE} install-pip
$(PYTHON) -m pip install $(INSTALL_OPTS) --upgrade pip
$(PYTHON) -m pip install $(INSTALL_OPTS) --upgrade $(DEPS)
test:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) $(TSCRIPT)
test-process:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) -m unittest -v psutil.tests.test_process
test-system:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) -m unittest -v psutil.tests.test_system
test-misc:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_misc.py
test-unicode:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_unicode.py
test-contracts:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_contracts.py
test-connections:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_connections.py
test-posix:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_posix.py
test-platform:
${MAKE} install
$(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
test-memleaks:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) psutil/tests/test_memory_leaks.py
test-by-name: ## e.g. make test-by-name ARGS=psutil.tests.test_system.TestSystemAPIs
${MAKE} install
@$(TEST_PREFIX) $(PYTHON) -m unittest -v $(ARGS)
test-coverage:
${MAKE} install
rm -rf .coverage htmlcov
$(TEST_PREFIX) $(PYTHON) -m coverage run $(TSCRIPT)
$(PYTHON) -m coverage report
@echo "writing results to htmlcov/index.html"
$(PYTHON) -m coverage html
$(PYTHON) -m webbrowser -t htmlcov/index.html
pep8:
@git ls-files | grep \\.py$ | xargs $(PYTHON) -m pep8
pyflakes:
@export PYFLAKES_NODOCTEST=1 && \
git ls-files | grep \\.py$ | xargs $(PYTHON) -m pyflakes
flake8:
@git ls-files | grep \\.py$ | xargs $(PYTHON) -m flake8
git-tag-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-hooks:
ln -sf ../../.git-pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
sdist:
${MAKE} generate-manifest
$(PYTHON) setup.py sdist
wheel:
$(PYTHON) setup.py bdist_wheel
win-download-wheels:
$(TEST_PREFIX) $(PYTHON) scripts/internal/download_exes.py --user giampaolo --project psutil
upload-src:
${MAKE} sdist
$(PYTHON) setup.py sdist upload
upload-win-wheels:
$(PYTHON) -m twine upload dist/*.whl
pre-release:
rm -rf dist
${MAKE} install
${MAKE} generate-manifest
git diff MANIFEST.in > /dev/null ${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';"
$(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 ;"
release:
${MAKE} pre-release
$(PYTHON) -m twine upload dist/* ${MAKE} git-tag-release
print-announce:
@$(TEST_PREFIX) $(PYTHON) scripts/internal/print_announce.py
print-timeline:
@$(TEST_PREFIX) $(PYTHON) scripts/internal/print_timeline.py
check-manifest:
$(PYTHON) -m check_manifest -v $(ARGS)
generate-manifest:
$(PYTHON) scripts/internal/generate_manifest.py > MANIFEST.in
grep-todos:
git grep -EIn "TODO|FIXME|XXX"
bench-oneshot:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) scripts/internal/bench_oneshot.py
bench-oneshot-2:
${MAKE} install
$(TEST_PREFIX) $(PYTHON) scripts/internal/bench_oneshot_2.py
check-broken-links:
git ls-files | xargs $(PYTHON) -Wa scripts/internal/check_broken_links.py
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'