2020-09-17 19:25:34 +00:00
# Tahoe LFS Development and maintenance tasks
#
2008-04-10 23:47:52 +00:00
# NOTE: this Makefile requires GNU make
2007-07-11 20:39:55 +00:00
2020-09-17 18:54:49 +00:00
### Defensive settings for make:
# https://tech.davis-hansson.com/p/make/
SHELL := bash
.ONESHELL :
.SHELLFLAGS := -xeu -o pipefail -c
.SILENT :
.DELETE_ON_ERROR :
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
2020-09-17 19:25:34 +00:00
# Local target variables
2020-09-25 17:04:10 +00:00
VCS_HOOK_SAMPLES = $( wildcard .git/hooks/*.sample)
VCS_HOOKS = $( VCS_HOOK_SAMPLES:%.sample= %)
2007-02-01 02:12:33 +00:00
PYTHON = python
2008-09-12 05:09:19 +00:00
export PYTHON
2020-07-06 17:50:06 +00:00
PYFLAKES = flake8
2016-02-05 20:32:02 +00:00
export PYFLAKES
2020-09-27 20:43:41 +00:00
VIRTUAL_ENV = ./.tox/py27
2016-03-23 09:19:50 +00:00
SOURCES = src/allmydata static misc setup.py
2016-03-25 19:16:01 +00:00
APPNAME = tahoe-lafs
2020-09-27 20:43:41 +00:00
TEST_SUITE = allmydata
2008-01-23 00:42:54 +00:00
2020-09-17 19:25:34 +00:00
2020-09-17 19:36:55 +00:00
# Top-level, phony targets
2020-09-17 19:25:34 +00:00
2020-09-17 19:36:55 +00:00
.PHONY : default
2020-09-17 19:25:34 +00:00
default :
@echo "no default target"
2020-09-27 16:40:36 +00:00
.PHONY : install -vcs -hooks
## Install the VCS hooks to run linters on commit and all tests on push
install-vcs-hooks : .git /hooks /pre -commit .git /hooks /pre -push
2020-09-30 14:37:52 +00:00
.PHONY : uninstall -vcs -hooks
## Remove the VCS hooks
uninstall-vcs-hooks : .tox /create -venvs .log
" ./ $( dir $( <) ) py36/bin/pre-commit " uninstall || true
" ./ $( dir $( <) ) py36/bin/pre-commit " uninstall -t pre-push || true
2020-09-25 17:04:10 +00:00
2020-09-17 21:09:08 +00:00
.PHONY : test
## Run all tests and code reports
2020-09-27 17:12:02 +00:00
test : .tox /create -venvs .log
2020-09-25 17:04:10 +00:00
# Run codechecks first since it takes the least time to report issues early.
tox --develop -e codechecks
# Run all the test environments in parallel to reduce run-time
tox --develop -p auto -e 'py27,py36,pypy27'
2020-09-27 20:43:41 +00:00
.PHONY : test -venv -coverage
## Run all tests with coverage collection and reporting.
test-venv-coverage :
# Special handling for reporting coverage even when the test run fails
2020-10-04 21:10:23 +00:00
rm -f ./.coverage.*
2020-09-27 20:43:41 +00:00
test_exit =
$( VIRTUAL_ENV) /bin/coverage run -m twisted.trial --rterrors --reporter= timing \
$( TEST_SUITE) || test_exit = " $$ ? "
$( VIRTUAL_ENV) /bin/coverage combine
$( VIRTUAL_ENV) /bin/coverage xml || true
$( VIRTUAL_ENV) /bin/coverage report
if [ ! -z " $$ test_exit " ] ; then exit " $$ test_exit " ; fi
2020-09-24 18:20:44 +00:00
.PHONY : test -py 3-all
## Run all tests under Python 3
2020-09-27 17:12:02 +00:00
test-py3-all : .tox /create -venvs .log
2020-09-24 18:20:44 +00:00
tox --develop -e py36 allmydata
2020-09-17 21:09:08 +00:00
2012-01-12 21:06:54 +00:00
# This is necessary only if you want to automatically produce a new
2014-09-30 03:54:55 +00:00
# _version.py file from the current git history (without doing a build).
2014-09-08 21:49:54 +00:00
.PHONY : make -version
2007-09-13 01:56:33 +00:00
make-version :
2012-01-12 21:06:54 +00:00
$( PYTHON) ./setup.py update_version
2007-09-13 01:56:33 +00:00
2014-10-06 22:46:29 +00:00
# Build OS X pkg packages.
2020-09-17 19:36:55 +00:00
.PHONY : build -osx -pkg
2016-03-18 05:23:39 +00:00
build-osx-pkg :
2015-03-24 16:41:43 +00:00
misc/build_helpers/build-osx-pkg.sh $( APPNAME)
2014-10-06 22:46:29 +00:00
2020-09-17 19:36:55 +00:00
.PHONY : test -osx -pkg
2015-03-21 21:09:33 +00:00
test-osx-pkg :
2014-10-07 00:40:19 +00:00
$( PYTHON) misc/build_helpers/test-osx-pkg.py
2020-09-17 19:36:55 +00:00
.PHONY : upload -osx -pkg
2015-03-20 17:52:48 +00:00
upload-osx-pkg :
2019-01-26 14:46:29 +00:00
# [Failure instance: Traceback: <class 'OpenSSL.SSL.Error'>: [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_write_bytes', 'ssl handshake failure')]
#
# @echo "uploading to ~tahoe-tarballs/OS-X-packages/ via flappserver"
# @if [ "X${BB_BRANCH}" = "Xmaster" ] || [ "X${BB_BRANCH}" = "X" ]; then \
# flappclient --furlfile ~/.tahoe-osx-pkg-upload.furl upload-file tahoe-lafs-*-osx.pkg; \
# else \
# echo not uploading tahoe-lafs-osx-pkg because this is not trunk but is branch \"${BB_BRANCH}\" ; \
# fi
2015-03-20 17:52:48 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : code -checks
2016-03-18 05:23:39 +00:00
#code-checks: build version-and-path check-interfaces check-miscaptures -find-trailing-spaces -check-umids pyflakes
2016-04-06 23:57:41 +00:00
code-checks : check -interfaces check -debugging check -miscaptures -find -trailing -spaces -check -umids pyflakes
.PHONY : check -interfaces
2020-09-17 19:33:13 +00:00
check-interfaces :
2016-04-06 23:57:41 +00:00
$( PYTHON) misc/coding_tools/check-interfaces.py 2>& 1 | tee violations.txt
@echo
2016-08-19 17:37:15 +00:00
.PHONY : check -debugging
check-debugging :
2016-04-06 23:57:41 +00:00
$( PYTHON) misc/coding_tools/check-debugging.py
2016-08-19 17:37:15 +00:00
@echo
2007-01-04 08:25:36 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : check -miscaptures
2011-10-07 07:41:21 +00:00
check-miscaptures :
$( PYTHON) misc/coding_tools/check-miscaptures.py $( SOURCES) 2>& 1 | tee miscaptures.txt
@echo
2014-09-08 21:49:54 +00:00
.PHONY : pyflakes
2006-12-14 11:05:22 +00:00
pyflakes :
2016-02-05 20:32:02 +00:00
$( PYFLAKES) $( SOURCES) | sort | uniq
2011-09-15 16:15:32 +00:00
@echo
2011-08-01 03:19:52 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : check -umids
2010-08-04 07:10:42 +00:00
check-umids :
2012-07-01 20:17:11 +00:00
$( PYTHON) misc/coding_tools/check-umids.py ` find $( SOURCES) -name '*.py' -not -name 'old.py' `
2011-09-15 16:15:32 +00:00
@echo
2014-09-08 21:49:54 +00:00
.PHONY : -check -umids
2011-09-15 16:15:32 +00:00
-check-umids :
2012-07-01 20:17:11 +00:00
-$( PYTHON) misc/coding_tools/check-umids.py ` find $( SOURCES) -name '*.py' -not -name 'old.py' `
2011-09-15 16:15:32 +00:00
@echo
2006-12-14 11:05:22 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : doc -checks
2012-06-23 23:23:19 +00:00
doc-checks : check -rst
2014-09-08 21:49:54 +00:00
.PHONY : check -rst
2012-06-23 23:23:19 +00:00
check-rst :
@for x in ` find *.rst docs -name "*.rst" ` ; do rst2html -v $$ { x} >/dev/null; done 2>& 1 | grep -v 'Duplicate implicit target name:'
@echo
2014-09-08 21:49:54 +00:00
.PHONY : count -lines
2007-01-22 08:17:39 +00:00
count-lines :
2007-01-31 01:10:37 +00:00
@echo -n "files: "
2011-11-09 18:42:27 +00:00
@find src -name '*.py' | grep -v /build/ | wc -l
2007-01-22 08:17:39 +00:00
@echo -n "lines: "
2011-11-09 18:42:27 +00:00
@cat ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 08:17:39 +00:00
@echo -n "TODO: "
2011-11-09 18:42:27 +00:00
@grep TODO ` find src -name '*.py' | grep -v /build/` | wc -l
@echo -n "XXX: "
@grep XXX ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 08:17:39 +00:00
2016-03-18 05:23:39 +00:00
# Here is a list of testing tools that can be run with 'python' from a
# virtualenv in which Tahoe has been installed. There used to be Makefile
# targets for each, but the exact path to a suitable python is now up to the
# developer. But as a hint, after running 'tox', ./.tox/py27/bin/python will
# probably work.
# src/allmydata/test/bench_dirnode.py
# The check-speed and check-grid targets are disabled, since they depend upon
# the pre-located $(TAHOE) executable that was removed when we switched to
# tox. They will eventually be resurrected as dedicated tox environments.
2008-06-18 22:49:30 +00:00
# The check-speed target uses a pre-established client node to run a canned
# set of performance tests against a test network that is also
# pre-established (probably on a remote machine). Provide it with the path to
# a local directory where this client node has been created (and populated
# with the necessary FURLs of the test network). This target will start that
# client with the current code and then run the tests. Afterwards it will
# stop the client.
2007-09-21 02:03:16 +00:00
#
# The 'sleep 5' is in there to give the new client a chance to connect to its
# storageservers, since check_speed.py has no good way of doing that itself.
2016-03-18 05:23:39 +00:00
##.PHONY: check-speed
##check-speed: .built
## if [ -z '$(TESTCLIENTDIR)' ]; then exit 1; fi
## @echo "stopping any leftover client code"
## -$(TAHOE) stop $(TESTCLIENTDIR)
## $(TAHOE) start $(TESTCLIENTDIR)
## sleep 5
## $(TAHOE) @src/allmydata/test/check_speed.py $(TESTCLIENTDIR)
## $(TAHOE) stop $(TESTCLIENTDIR)
2007-03-09 01:12:24 +00:00
2008-06-18 20:15:55 +00:00
# The check-grid target also uses a pre-established client node, along with a
# long-term directory that contains some well-known files. See the docstring
# in src/allmydata/test/check_grid.py to see how to set this up.
2016-03-18 05:23:39 +00:00
##.PHONY: check-grid
##check-grid: .built
## if [ -z '$(TESTCLIENTDIR)' ]; then exit 1; fi
## $(TAHOE) @src/allmydata/test/check_grid.py $(TESTCLIENTDIR) bin/tahoe
2007-11-03 05:32:55 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : test -get -ignore
2012-01-07 00:48:47 +00:00
test-git-ignore :
$( MAKE)
$( PYTHON) misc/build_helpers/test-git-ignore.py
2014-09-08 21:49:54 +00:00
.PHONY : test -clean
2007-05-24 00:57:48 +00:00
test-clean :
2014-09-03 01:32:27 +00:00
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.old
2007-05-24 00:57:48 +00:00
$( MAKE)
2014-09-03 01:32:27 +00:00
$( MAKE) distclean
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.new
2007-05-24 00:57:48 +00:00
diff allfiles.tmp.old allfiles.tmp.new
2007-05-24 00:51:28 +00:00
2011-08-01 03:19:52 +00:00
# It would be nice if 'make clean' deleted any automatically-generated
# _version.py too, so that 'make clean; make all' could be useable as a
# "what the heck is going on, get me back to a clean state', but we need
2013-10-10 18:50:49 +00:00
# 'make clean' to work on non-checkout trees without destroying useful information.
# Use 'make distclean' instead to delete all generated files.
2014-09-08 21:49:54 +00:00
.PHONY : clean
2007-09-12 23:02:53 +00:00
clean :
2011-06-26 05:41:24 +00:00
rm -rf build _trial_temp _test_memory .built
2010-05-23 20:52:28 +00:00
rm -f ` find src *.egg -name '*.so' -or -name '*.pyc' `
2007-09-15 22:17:55 +00:00
rm -rf support dist
2011-01-19 02:50:53 +00:00
rm -rf ` ls -d *.egg | grep -vEe"setuptools-|setuptools_darcs-|darcsver-" `
2010-05-23 20:52:28 +00:00
rm -rf *.pyc
2011-01-03 05:27:38 +00:00
rm -f bin/tahoe bin/tahoe.pyscript
2014-10-03 15:37:14 +00:00
rm -f *.pkg
2006-12-14 10:59:51 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : distclean
2020-09-30 14:37:52 +00:00
distclean : clean uninstall -vcs -hooks
2016-03-25 19:58:05 +00:00
rm -rf src/*.egg-info
2013-10-10 16:47:30 +00:00
rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py
2020-09-17 21:09:08 +00:00
rm -rf ./.tox/
2013-10-10 16:47:30 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : find -trailing -spaces
2007-11-06 04:32:08 +00:00
find-trailing-spaces :
2011-08-01 03:19:52 +00:00
$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
2011-09-15 16:15:32 +00:00
@echo
2014-09-08 21:49:54 +00:00
.PHONY : -find -trailing -spaces
2011-09-15 16:15:32 +00:00
-find-trailing-spaces :
-$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
@echo
2007-07-31 23:55:45 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : fetch -and -unpack -deps
2008-09-17 20:01:19 +00:00
fetch-and-unpack-deps :
2016-03-22 21:10:08 +00:00
@echo "test-and-unpack-deps is obsolete"
2008-09-17 20:01:19 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : test -desert -island
2008-09-17 20:01:19 +00:00
test-desert-island :
2016-03-22 21:10:08 +00:00
@echo "test-desert-island is obsolete"
2008-09-17 01:37:02 +00:00
2015-06-16 20:41:21 +00:00
.PHONY : test -pip -install
test-pip-install :
2016-03-22 21:10:08 +00:00
@echo "test-pip-install is obsolete"
2008-09-17 01:37:02 +00:00
2008-01-31 03:45:14 +00:00
# TARBALL GENERATION
2014-09-08 21:49:54 +00:00
.PHONY : tarballs
2018-03-27 21:34:32 +00:00
tarballs : # delegated to tox, so setup.py can update setuptools if needed
tox -e tarballs
2008-09-17 20:01:19 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : upload -tarballs
2008-02-01 02:00:40 +00:00
upload-tarballs :
2016-03-30 22:58:01 +00:00
@if [ " X ${ BB_BRANCH } " = "Xmaster" ] || [ " X ${ BB_BRANCH } " = "X" ] ; then for f in dist/*; do flappclient --furlfile ~/.tahoe-tarball-upload.furl upload-file $$ f; done ; else echo not uploading tarballs because this is not trunk but is branch \" ${ BB_BRANCH } \" ; fi
2020-09-17 19:25:34 +00:00
# Real targets
src/allmydata/_version.py :
$( MAKE) make-version
2020-09-17 21:09:08 +00:00
2020-09-27 17:12:02 +00:00
.tox/create-venvs.log : tox .ini setup .py
2020-09-27 16:32:40 +00:00
tox --notest -p all | tee -a " $( @) "
2020-09-25 17:04:10 +00:00
2020-09-27 17:12:02 +00:00
$(VCS_HOOKS) : .tox /create -venvs .log .pre -commit -config .yaml
2020-09-30 14:36:16 +00:00
" ./ $( dir $( <) ) py36/bin/pre-commit " install --hook-type $( @:.git/hooks/%= %)