2020-09-17 12:25:34 -07:00
# Tahoe LFS Development and maintenance tasks
#
2008-04-10 16:47:52 -07:00
# NOTE: this Makefile requires GNU make
2007-07-11 13:39:55 -07:00
2020-09-17 11:54:49 -07: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 12:25:34 -07:00
# Local target variables
2020-09-25 10:04:10 -07:00
VCS_HOOK_SAMPLES = $( wildcard .git/hooks/*.sample)
VCS_HOOKS = $( VCS_HOOK_SAMPLES:%.sample= %)
2007-01-31 19:12:33 -07:00
PYTHON = python
2008-09-11 22:09:19 -07:00
export PYTHON
2020-07-06 13:50:06 -04:00
PYFLAKES = flake8
2016-02-05 12:32:02 -08:00
export PYFLAKES
2020-09-27 13:43:41 -07:00
VIRTUAL_ENV = ./.tox/py27
2016-03-23 02:19:50 -07:00
SOURCES = src/allmydata static misc setup.py
2016-03-25 19:16:01 +00:00
APPNAME = tahoe-lafs
2020-09-27 13:43:41 -07:00
TEST_SUITE = allmydata
2008-01-22 17:42:54 -07:00
2020-09-17 12:25:34 -07:00
2020-09-17 12:36:55 -07:00
# Top-level, phony targets
2020-09-17 12:25:34 -07:00
2020-09-17 12:36:55 -07:00
.PHONY : default
2020-09-17 12:25:34 -07:00
default :
@echo "no default target"
2020-09-27 09:40:36 -07: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 07:37:52 -07: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 10:04:10 -07:00
2020-09-17 14:09:08 -07:00
.PHONY : test
## Run all tests and code reports
2020-09-27 10:12:02 -07:00
test : .tox /create -venvs .log
2020-09-25 10:04:10 -07: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 13:43:41 -07: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 14:10:23 -07:00
rm -f ./.coverage.*
2020-09-27 13:43:41 -07: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 11:20:44 -07:00
.PHONY : test -py 3-all
## Run all tests under Python 3
2020-09-27 10:12:02 -07:00
test-py3-all : .tox /create -venvs .log
2020-09-24 11:20:44 -07:00
tox --develop -e py36 allmydata
2020-09-17 14:09:08 -07:00
2012-01-12 13:06:54 -08: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 22:49:54 +01:00
.PHONY : make -version
2007-09-12 18:56:33 -07:00
make-version :
2012-01-12 13:06:54 -08:00
$( PYTHON) ./setup.py update_version
2007-09-12 18:56:33 -07:00
2014-10-06 23:46:29 +01:00
# Build OS X pkg packages.
2020-09-17 12:36:55 -07:00
.PHONY : build -osx -pkg
2016-03-17 22:23:39 -07:00
build-osx-pkg :
2015-03-24 16:41:43 +00:00
misc/build_helpers/build-osx-pkg.sh $( APPNAME)
2014-10-06 23:46:29 +01:00
2020-09-17 12:36:55 -07:00
.PHONY : test -osx -pkg
2015-03-21 14:09:33 -07:00
test-osx-pkg :
2014-10-07 01:40:19 +01:00
$( PYTHON) misc/build_helpers/test-osx-pkg.py
2020-09-17 12:36:55 -07:00
.PHONY : upload -osx -pkg
2015-03-20 10:52:48 -07:00
upload-osx-pkg :
2019-01-26 09:46:29 -05: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 10:52:48 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : code -checks
2016-03-17 22:23:39 -07:00
#code-checks: build version-and-path check-interfaces check-miscaptures -find-trailing-spaces -check-umids pyflakes
2016-04-06 13:57:41 -10:00
code-checks : check -interfaces check -debugging check -miscaptures -find -trailing -spaces -check -umids pyflakes
.PHONY : check -interfaces
2020-09-17 12:33:13 -07:00
check-interfaces :
2016-04-06 13:57:41 -10:00
$( PYTHON) misc/coding_tools/check-interfaces.py 2>& 1 | tee violations.txt
@echo
2016-08-19 11:37:15 -06:00
.PHONY : check -debugging
check-debugging :
2016-04-06 13:57:41 -10:00
$( PYTHON) misc/coding_tools/check-debugging.py
2016-08-19 11:37:15 -06:00
@echo
2007-01-04 01:25:36 -07:00
2014-09-08 22:49:54 +01: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 22:49:54 +01:00
.PHONY : pyflakes
2006-12-14 04:05:22 -07:00
pyflakes :
2016-02-05 12:32:02 -08:00
$( PYFLAKES) $( SOURCES) | sort | uniq
2011-09-15 09:15:32 -07:00
@echo
2011-07-31 20:19:52 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : check -umids
2010-08-04 00:10:42 -07: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 09:15:32 -07:00
@echo
2014-09-08 22:49:54 +01:00
.PHONY : -check -umids
2011-09-15 09:15:32 -07: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 09:15:32 -07:00
@echo
2006-12-14 04:05:22 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : doc -checks
2012-06-23 23:23:19 +00:00
doc-checks : check -rst
2014-09-08 22:49:54 +01: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 22:49:54 +01:00
.PHONY : count -lines
2007-01-22 01:17:39 -07:00
count-lines :
2007-01-30 18:10:37 -07:00
@echo -n "files: "
2011-11-09 10:42:27 -08:00
@find src -name '*.py' | grep -v /build/ | wc -l
2007-01-22 01:17:39 -07:00
@echo -n "lines: "
2011-11-09 10:42:27 -08:00
@cat ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 01:17:39 -07:00
@echo -n "TODO: "
2011-11-09 10:42:27 -08: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 01:17:39 -07:00
2016-03-17 22:23:39 -07: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 15:49:30 -07: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-20 19:03:16 -07: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-17 22:23:39 -07: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-08 18:12:24 -07:00
2008-06-18 13:15:55 -07: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-17 22:23:39 -07: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-02 22:32:55 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : test -get -ignore
2012-01-06 16:48:47 -08:00
test-git-ignore :
$( MAKE)
$( PYTHON) misc/build_helpers/test-git-ignore.py
2014-09-08 22:49:54 +01:00
.PHONY : test -clean
2007-05-23 17:57:48 -07:00
test-clean :
2014-09-02 18:32:27 -07:00
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.old
2007-05-23 17:57:48 -07:00
$( MAKE)
2014-09-02 18:32:27 -07:00
$( MAKE) distclean
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.new
2007-05-23 17:57:48 -07:00
diff allfiles.tmp.old allfiles.tmp.new
2007-05-23 17:51:28 -07:00
2011-07-31 20:19:52 -07: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 19:50:49 +01: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 22:49:54 +01:00
.PHONY : clean
2007-09-12 16:02:53 -07:00
clean :
2011-06-25 22:41:24 -07:00
rm -rf build _trial_temp _test_memory .built
2010-05-23 13:52:28 -07:00
rm -f ` find src *.egg -name '*.so' -or -name '*.pyc' `
2007-09-15 15:17:55 -07:00
rm -rf support dist
2011-01-18 18:50:53 -08:00
rm -rf ` ls -d *.egg | grep -vEe"setuptools-|setuptools_darcs-|darcsver-" `
2010-05-23 13:52:28 -07:00
rm -rf *.pyc
2011-01-02 21:27:38 -08:00
rm -f bin/tahoe bin/tahoe.pyscript
2014-10-03 21:07:14 +05:30
rm -f *.pkg
2006-12-14 03:59:51 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : distclean
2020-09-30 07:37:52 -07:00
distclean : clean uninstall -vcs -hooks
2016-03-25 12:58:05 -07:00
rm -rf src/*.egg-info
2013-10-10 17:47:30 +01:00
rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py
2020-09-17 14:09:08 -07:00
rm -rf ./.tox/
2013-10-10 17:47:30 +01:00
2014-09-08 22:49:54 +01:00
.PHONY : find -trailing -spaces
2007-11-05 21:32:08 -07:00
find-trailing-spaces :
2011-07-31 20:19:52 -07:00
$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
2011-09-15 09:15:32 -07:00
@echo
2014-09-08 22:49:54 +01:00
.PHONY : -find -trailing -spaces
2011-09-15 09:15:32 -07:00
-find-trailing-spaces :
-$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
@echo
2007-07-31 16:55:45 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : fetch -and -unpack -deps
2008-09-17 13:01:19 -07:00
fetch-and-unpack-deps :
2016-03-22 14:10:08 -07:00
@echo "test-and-unpack-deps is obsolete"
2008-09-17 13:01:19 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : test -desert -island
2008-09-17 13:01:19 -07:00
test-desert-island :
2016-03-22 14:10:08 -07:00
@echo "test-desert-island is obsolete"
2008-09-16 18:37:02 -07:00
2015-06-16 13:41:21 -07:00
.PHONY : test -pip -install
test-pip-install :
2016-03-22 14:10:08 -07:00
@echo "test-pip-install is obsolete"
2008-09-16 18:37:02 -07:00
2008-01-30 20:45:14 -07:00
# TARBALL GENERATION
2014-09-08 22:49:54 +01:00
.PHONY : tarballs
2018-03-27 14:34:32 -07:00
tarballs : # delegated to tox, so setup.py can update setuptools if needed
tox -e tarballs
2008-09-17 13:01:19 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : upload -tarballs
2008-01-31 19:00:40 -07:00
upload-tarballs :
2016-03-30 15:58:01 -07: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 12:25:34 -07:00
# Real targets
src/allmydata/_version.py :
$( MAKE) make-version
2020-09-17 14:09:08 -07:00
2020-09-27 10:12:02 -07:00
.tox/create-venvs.log : tox .ini setup .py
2020-09-27 09:32:40 -07:00
tox --notest -p all | tee -a " $( @) "
2020-09-25 10:04:10 -07:00
2020-09-27 10:12:02 -07:00
$(VCS_HOOKS) : .tox /create -venvs .log .pre -commit -config .yaml
2020-09-30 07:36:16 -07:00
" ./ $( dir $( <) ) py36/bin/pre-commit " install --hook-type $( @:.git/hooks/%= %)