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
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
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
2008-01-23 00:42:54 +00:00
2020-09-17 19:25:34 +00:00
# Top-level targets
default :
@echo "no default target"
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.
2015-03-21 21:09:33 +00:00
.PHONY : build -osx -pkg test -osx -pkg upload -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
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
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
2016-03-18 05:23:39 +00:00
# code coverage-based testing is disabled temporarily, as we switch to tox.
# This will eventually be added to a tox environment. The following comments
# and variable settings are retained as notes for that future effort.
2010-01-28 17:39:04 +00:00
2016-03-18 05:23:39 +00:00
## # code coverage: install the "coverage" package from PyPI, do "make
## # test-coverage" to do a unit test run with coverage-gathering enabled, then
## # use "make coverage-output" to generate an HTML report. Also see "make
## # .coverage.el" and misc/coding_tools/coverage.el for Emacs integration.
##
## # This might need to be python-coverage on Debian-based distros.
## COVERAGE=coverage
##
## COVERAGEARGS=--branch --source=src/allmydata
##
## # --include appeared in coverage-3.4
## COVERAGE_OMIT=--include '$(CURDIR)/src/allmydata/*' --omit '$(CURDIR)/src/allmydata/test/*'
2010-01-28 17:39:04 +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
2013-10-10 16:47:30 +00:00
distclean : clean
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
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