2007-07-11 13:39:55 -07:00
2008-04-10 16:47:52 -07:00
# NOTE: this Makefile requires GNU make
2007-07-11 13:39:55 -07:00
2008-01-22 08:35:38 -07:00
default : build
2007-01-07 13:09:37 -07:00
2007-01-31 19:12:33 -07:00
PYTHON = python
2008-09-11 22:09:19 -07:00
export PYTHON
2007-04-04 11:18:38 -07:00
2008-09-11 18:03:21 -07:00
# setup.py will extend sys.path to include our support/lib/... directory
# itself. It will also create it in the beginning of the 'develop' command.
2007-11-13 20:16:59 -07:00
2011-01-19 15:37:37 -08:00
TAHOE = $( PYTHON) bin/tahoe
2014-09-09 10:31:05 -07:00
SOURCES = src/allmydata src/buildtest static misc bin/tahoe-script.template setup.py
2014-12-05 17:53:13 +00:00
APPNAME = allmydata-tahoe
2008-01-22 17:42:54 -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
2007-09-19 12:28:30 -07:00
.built :
$( MAKE) build
2008-01-04 17:25:46 -07:00
src/allmydata/_version.py :
2008-01-03 14:33:33 -07:00
$( MAKE) make-version
2008-01-04 17:25:46 -07:00
2011-07-31 20:19:52 -07:00
# It is unnecessary to have this depend on build or src/allmydata/_version.py,
2013-05-29 01:17:40 +01:00
# since 'setup.py build' always updates the version.
2014-09-08 22:49:54 +01:00
.PHONY : build
2011-07-31 20:19:52 -07:00
build :
2009-01-29 13:59:52 -07:00
$( PYTHON) setup.py build
2008-01-30 01:32:57 -07:00
touch .built
2007-09-12 16:48:45 -07:00
2014-10-06 23:46:29 +01:00
# Build OS X pkg packages.
2015-03-21 14:09:33 -07:00
.PHONY : build -osx -pkg test -osx -pkg upload -osx -pkg
2015-01-13 15:01:46 +05:30
build-osx-pkg : build
2015-03-24 16:41:43 +00:00
misc/build_helpers/build-osx-pkg.sh $( APPNAME)
2014-10-06 23:46:29 +01:00
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
2015-03-20 10:52:48 -07:00
upload-osx-pkg :
2015-07-16 09:27:26 -07:00
@echo "uploading to ~tahoe-tarballs/OS-X-packages/ via flappserver"
2015-03-20 10:52:48 -07:00
@if [ " X ${ BB_BRANCH } " = "Xmaster" ] || [ " X ${ BB_BRANCH } " = "X" ] ; then \
2015-03-21 14:20:00 -07:00
flappclient --furlfile ~/.tahoe-osx-pkg-upload.furl upload-file tahoe-lafs-*-osx.pkg; \
2015-03-20 10:52:48 -07:00
else \
echo not uploading tahoe-lafs-osx-pkg because this is not trunk but is branch \" ${ BB_BRANCH } \" ; \
fi
2007-04-26 20:16:48 -07:00
# TESTING
2007-08-09 15:26:27 -07:00
# you can use 'make test TEST=allmydata.test.test_introducer' to run just
# test_introducer. TEST=allmydata.test.test_client.Basic.test_permute works
2007-05-01 11:08:39 -07:00
# too.
2007-09-12 16:02:53 -07:00
TEST = allmydata
2007-01-03 21:38:29 -07:00
2011-06-23 13:55:28 -07:00
# It is unnecessary to have this depend on build or src/allmydata/_version.py,
# since 'setup.py test' always updates the version and builds before testing.
2014-09-08 22:49:54 +01:00
.PHONY : test
2011-06-23 13:55:28 -07:00
test :
2009-01-30 04:25:36 -07:00
$( PYTHON) setup.py test $( TRIALARGS) -s $( TEST)
2011-06-23 13:55:28 -07:00
touch .built
2014-09-08 22:49:54 +01:00
.PHONY : check
2011-06-23 13:55:28 -07:00
check : test
2007-04-30 23:02:45 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : quicktest
2013-05-29 01:17:40 +01:00
quicktest : make -version
2011-01-19 15:37:37 -08:00
$( TAHOE) debug trial $( TRIALARGS) $( TEST)
2009-04-14 13:14:00 -07:00
2012-10-25 02:16:21 +01:00
# "make tmpfstest" may be a faster way of running tests on Linux. It works best when you have
# at least 330 MiB of free physical memory (to run the whole test suite). Since it uses sudo
# to mount/unmount the tmpfs filesystem, it might prompt for your password.
2014-09-08 22:49:54 +01:00
.PHONY : tmpfstest
2012-10-25 02:16:21 +01:00
tmpfstest :
time make _tmpfstest 'TMPDIR=$(shell mktemp -d --tmpdir=.)'
2014-09-08 22:49:54 +01:00
.PHONY : _tmpfstest
2013-05-29 01:17:40 +01:00
_tmpfstest : make -version
2012-11-13 16:24:36 +00:00
sudo mount -t tmpfs -o size = 400m tmpfs '$(TMPDIR)'
2012-10-25 02:16:21 +01:00
-$( TAHOE) debug trial --rterrors '--temp-directory=$(TMPDIR)/_trial_temp' $( TRIALARGS) $( TEST)
sudo umount '$(TMPDIR)'
rmdir '$(TMPDIR)'
2015-10-08 12:51:21 -06:00
.PHONY : smoketest
smoketest :
-python ./src/allmydata/test/check_magicfolder_smoke.py kill
-rm -rf smoke_magicfolder/
python ./src/allmydata/test/check_magicfolder_smoke.py
2008-04-24 11:30:38 -07:00
2014-09-08 22:49:23 +01: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
2010-01-28 09:39:04 -08:00
2010-11-25 12:38:32 -08:00
# --include appeared in coverage-3.4
COVERAGE_OMIT = --include '$(CURDIR)/src/allmydata/*' --omit '$(CURDIR)/src/allmydata/test/*'
2014-09-08 22:49:23 +01:00
2014-09-08 22:49:54 +01:00
.PHONY : test -coverage
2014-09-08 22:49:23 +01:00
test-coverage : build
rm -f .coverage
$( TAHOE) '@$(COVERAGE)' run $( COVERAGEARGS) @tahoe debug trial $( TRIALARGS) $( TEST)
2014-09-08 22:49:54 +01:00
.PHONY : coverage -output
2010-01-28 09:39:04 -08:00
coverage-output :
rm -rf coverage-html
2010-08-04 00:11:31 -07:00
coverage html -i -d coverage-html $( COVERAGE_OMIT)
2010-01-28 09:39:04 -08:00
cp .coverage coverage-html/coverage.data
2007-01-03 22:06:51 -07:00
@echo "now point your browser at coverage-html/index.html"
2007-05-01 11:08:39 -07:00
2010-01-28 09:39:04 -08:00
.coverage.el : .coverage
2010-08-04 00:11:31 -07:00
$( PYTHON) misc/coding_tools/coverage2el.py
2010-01-28 09:39:04 -08:00
2007-03-08 15:28:13 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : code -checks
2011-10-07 07:41:21 +00:00
code-checks : build version -and -path check -interfaces check -miscaptures -find -trailing -spaces -check -umids pyflakes
2011-09-15 09:15:32 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : version -and -path
2011-09-15 09:15:32 -07:00
version-and-path :
$( TAHOE) --version-and-path
2014-09-08 22:49:54 +01:00
.PHONY : check -interfaces
2011-09-15 09:15:32 -07:00
check-interfaces :
$( TAHOE) @misc/coding_tools/check-interfaces.py 2>& 1 | tee violations.txt
@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 :
2012-03-13 23:13:51 -07:00
@$( PYTHON) -OOu ` which 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
2014-09-08 22:49:54 +01:00
.PHONY : check -memory
2007-09-19 12:28:30 -07:00
check-memory : .built
2007-09-15 13:53:36 -07:00
rm -rf _test_memory
2011-07-31 20:19:52 -07:00
$( TAHOE) @src/allmydata/test/check_memory.py upload
$( TAHOE) @src/allmydata/test/check_memory.py upload-self
$( TAHOE) @src/allmydata/test/check_memory.py upload-POST
$( TAHOE) @src/allmydata/test/check_memory.py download
$( TAHOE) @src/allmydata/test/check_memory.py download-GET
$( TAHOE) @src/allmydata/test/check_memory.py download-GET-slow
$( TAHOE) @src/allmydata/test/check_memory.py receive
2007-09-15 13:53:36 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : check -memory -once
2007-09-19 12:29:16 -07:00
check-memory-once : .built
rm -rf _test_memory
2011-07-31 20:19:52 -07:00
$( TAHOE) @src/allmydata/test/check_memory.py $( MODE)
2007-09-19 12:29:16 -07:00
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.
2014-09-08 22:49:54 +01:00
.PHONY : check -speed
2007-09-19 18:27:47 -07:00
check-speed : .built
if [ -z '$(TESTCLIENTDIR)' ] ; then exit 1; fi
2007-12-14 02:04:25 -07:00
@echo "stopping any leftover client code"
2011-01-19 15:44:29 -08:00
-$( TAHOE) stop $( TESTCLIENTDIR)
$( TAHOE) start $( TESTCLIENTDIR)
2007-09-20 19:03:16 -07:00
sleep 5
2011-07-31 20:19:52 -07:00
$( TAHOE) @src/allmydata/test/check_speed.py $( TESTCLIENTDIR)
2011-01-19 15:44:29 -08:00
$( 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.
2014-09-08 22:49:54 +01:00
.PHONY : check -grid
2008-06-18 12:57:47 -07:00
check-grid : .built
if [ -z '$(TESTCLIENTDIR)' ] ; then exit 1; fi
2011-07-31 20:19:52 -07:00
$( TAHOE) @src/allmydata/test/check_grid.py $( TESTCLIENTDIR) bin/tahoe
2008-06-18 12:57:47 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : bench -dirnode
2009-11-11 14:25:42 -08:00
bench-dirnode : .built
2011-07-31 20:19:52 -07:00
$( TAHOE) @src/allmydata/test/bench_dirnode.py
2009-11-11 14:25:42 -08:00
2012-02-15 18:24:42 +00:00
# the provisioning tool runs as a stand-alone webapp server
2014-09-08 22:49:54 +01:00
.PHONY : run -provisioning -tool
2012-02-15 18:24:42 +00:00
run-provisioning-tool : .built
$( TAHOE) @misc/operations_helpers/provisioning/run.py
2007-11-02 22:32:55 -07:00
# 'make repl' is a simple-to-type command to get a Python interpreter loop
# from which you can type 'import allmydata'
2014-09-08 22:49:54 +01:00
.PHONY : repl
2007-11-02 22:32:55 -07:00
repl :
2011-01-19 15:44:29 -08:00
$( TAHOE) debug repl
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
2008-01-10 20:24:44 -07:00
rm -rf misc/dependencies/build misc/dependencies/temp
rm -rf misc/dependencies/tahoe_deps.egg-info
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
2013-10-10 17:47:30 +01:00
distclean : clean
rm -rf src/allmydata_tahoe.egg-info
rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py
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
2008-09-16 18:37:02 -07:00
# The test-desert-island target grabs the tahoe-deps tarball, unpacks it,
# does a build, then asserts that the build did not try to download anything
# as it ran. Invoke this on a new tree, or after a 'clean', to make sure the
# support/lib/ directory is gone.
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 :
2013-04-24 14:58:27 -07:00
test -f tahoe-deps.tar.gz || wget https://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-deps.tar.gz
2008-09-16 22:22:04 -07:00
rm -rf tahoe-deps
2013-04-24 15:20:47 -07:00
tar xzf tahoe-lafs-deps.tar.gz
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 :
$( MAKE) fetch-and-unpack-deps
2008-09-16 18:37:02 -07:00
$( MAKE) 2>& 1 | tee make.out
2010-06-06 22:16:18 -07:00
$( PYTHON) misc/build_helpers/check-build.py make.out no-downloads
2008-09-16 18:37:02 -07:00
2015-06-16 13:41:21 -07:00
.PHONY : test -pip -install
test-pip-install :
$( PYTHON) misc/build_helpers/test-pip-install.py
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
2008-01-30 20:45:14 -07:00
tarballs :
2008-01-31 13:52:48 -07:00
$( MAKE) make-version
$( PYTHON) setup.py sdist --formats= bztar,gztar,zip
2008-09-17 13:01:19 -07:00
$( PYTHON) setup.py sdist --sumo --formats= bztar,gztar,zip
2014-09-08 22:49:54 +01:00
.PHONY : upload -tarballs
2008-01-31 19:00:40 -07:00
upload-tarballs :
2014-12-05 17:53:13 +00:00
@if [ " X ${ BB_BRANCH } " = "Xmaster" ] || [ " X ${ BB_BRANCH } " = "X" ] ; then for f in dist/$( APPNAME) -*; 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