2007-07-11 20:39:55 +00:00
2008-04-10 23:47:52 +00:00
# NOTE: this Makefile requires GNU make
2007-07-11 20:39:55 +00:00
2008-01-22 15:35:38 +00:00
default : build
2007-01-07 20:09:37 +00:00
2007-02-01 02:12:33 +00:00
PYTHON = python
2007-04-10 19:24:32 +00:00
PATHSEP = $( shell python -c 'import os ; print os.pathsep' )
2007-09-21 00:02:54 +00:00
OSSEP = $( shell python -c 'import os ; print os.sep' )
2007-04-04 18:18:38 +00:00
2007-09-14 01:20:35 +00:00
REACTOR =
2007-04-10 19:24:32 +00:00
2007-11-14 03:16:59 +00:00
i f n e q ( $( INCLUDE_DIRS ) , )
INCLUDE_DIRS_ARG = -I$( INCLUDE_DIRS)
e n d i f
i f n e q ( $( LIBRARY_DIRS ) , )
LIBRARY_DIRS_ARG = -L$( LIBRARY_DIRS)
e n d i f
2007-04-10 19:24:32 +00:00
PLAT = $( strip $( shell python -c "import sys ; print sys.platform" ) )
2007-09-14 01:20:35 +00:00
i f e q ( $( PLAT ) , w i n 3 2 )
# The platform is Windows with cygwin build tools and the native Python interpreter.
SUPPORT = $( shell cygpath -w $( shell pwd ) ) \s upport
SUPPORTLIB := $( SUPPORT) \L ib\s ite-packages
2007-10-15 18:52:26 +00:00
SRCPATH := $( shell cygpath -w $( shell pwd ) /src)
2007-09-21 21:11:16 +00:00
CHECK_PYWIN32_DEP := check-pywin32-dep
2008-01-15 01:22:36 +00:00
INNOSETUP := $( shell cygpath -au " $( PROGRAMFILES) /Inno Setup 5/Compil32.exe " )
2007-04-10 19:24:32 +00:00
e l s e
2007-09-14 01:20:35 +00:00
PYVER = $( shell $( PYTHON) misc/pyver.py)
SUPPORT = $( shell pwd ) /support
SUPPORTLIB = $( SUPPORT) /lib/$( PYVER) /site-packages
2007-09-15 03:17:43 +00:00
SRCPATH := $( shell pwd ) /src
2007-09-21 21:11:16 +00:00
CHECK_PYWIN32_DEP :=
2007-04-04 18:18:38 +00:00
e n d i f
2007-04-10 19:24:32 +00:00
2007-09-14 10:33:44 +00:00
i f e q ( $( PLAT ) , c y g w i n )
REACTOR = poll
e n d i f
2007-09-14 01:20:35 +00:00
i f n e q ( $( REACTOR ) , )
REACTOROPT := --reactor= $( REACTOR)
2007-04-04 18:18:38 +00:00
e l s e
2007-09-14 01:20:35 +00:00
REACTOROPT :=
2007-04-04 18:18:38 +00:00
e n d i f
2007-03-09 00:54:38 +00:00
2007-10-04 21:11:16 +00:00
i f n e q ( $( PYTHONPATH ) , )
2008-03-26 17:00:33 +00:00
PP = PYTHONPATH = " $( PYTHONPATH) $( PATHSEP) $( SUPPORTLIB) "
e l s e
PP = PYTHONPATH = " $( SUPPORTLIB) "
2007-10-04 21:11:16 +00:00
e n d i f
2007-09-13 01:56:33 +00:00
2008-01-23 00:42:54 +00:00
TRIALCMD = $( shell $( PP) $( PYTHON) misc/find_trial.py)
TRIAL = PYTHONUNBUFFERED = 1 $( TRIALCMD) --rterrors $( REACTOROPT)
2007-09-13 01:56:33 +00:00
.PHONY : make -version build
2007-12-21 01:17:55 +00:00
2008-01-01 06:28:31 +00:00
# The 'darcsver' setup.py command comes in the 'darcsver' package:
# http://pypi.python.org/pypi/darcsver It is necessary only if you want to
2007-12-21 01:17:55 +00:00
# automatically produce a new _version.py file from the current darcs history.
2007-09-13 01:56:33 +00:00
make-version :
2008-03-26 17:00:33 +00:00
$( PP) $( PYTHON) ./setup.py darcsver --count-all-patches
2007-09-13 01:56:33 +00:00
2008-01-03 21:33:33 +00:00
# We want src/allmydata/_version.py to be up-to-date, but it's a fairly
# expensive operation (about 6 seconds on a just-before-0.7.0 tree, probably
# because of the 332 patches since the last tag), and we've removed the need
# for an explicit 'build' step by removing the C code from src/allmydata and
# by running everything in place. It would be neat to do:
#
#src/allmydata/_version.py: _darcs/patches
# $(MAKE) make-version
#
# since that would update the embedded version string each time new darcs
# patches were pulled, but 1) this would break non-darcs trees (i.e. building
# from an exported tarball), and 2) without an obligatory 'build' step this
# rule wouldn't be run frequently enought anyways.
#
# So instead, I'll just make sure that we update the version at least once
2008-01-05 00:25:46 +00:00
# when we first start using the tree, and again whenever an explicit
# 'make-version' is run, since then at least the developer has some means to
# update things. 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 'make clean' to work on non-darcs trees without
# destroying useful information.
2008-01-03 21:33:33 +00:00
2007-09-19 19:28:30 +00:00
.built :
$( MAKE) build
2008-01-05 00:25:46 +00:00
src/allmydata/_version.py :
2008-01-03 21:33:33 +00:00
$( MAKE) make-version
2008-01-05 00:25:46 +00:00
build : src /allmydata /_version .py
2008-01-22 15:35:38 +00:00
mkdir -p " $( SUPPORTLIB) "
2008-03-26 17:00:33 +00:00
$( PP) $( PYTHON) ./setup.py develop --prefix= " $( SUPPORT) "
2008-01-23 23:40:20 +00:00
chmod +x bin/tahoe
2008-01-30 08:32:57 +00:00
touch .built
2007-09-12 23:48:45 +00:00
2007-09-12 23:02:53 +00:00
# 'make install' will do the following:
# build+install tahoe (probably to /usr/lib/pythonN.N/site-packages)
2007-09-15 02:23:55 +00:00
# 'make install PREFIX=/usr/local/stow/tahoe-N.N' will do the same, but to
# a different location
2007-01-30 21:57:59 +00:00
2008-01-05 00:25:46 +00:00
install : src /allmydata /_version .py
2007-09-12 23:02:53 +00:00
i f d e f P R E F I X
mkdir -p $( PREFIX)
$( PP) $( PYTHON) ./setup.py install \
--single-version-externally-managed \
--prefix= $( PREFIX) --record= ./tahoe.files
e l s e
$( PP) $( PYTHON) ./setup.py install \
--single-version-externally-managed
e n d i f
2007-02-01 23:07:07 +00:00
2007-01-17 04:02:00 +00:00
2007-04-27 03:16:48 +00:00
# TESTING
2008-05-06 19:09:00 +00:00
.PHONY : check -all -deps $( CHECK_PYWIN 32_DEP ) signal -error -deps , signal -error -pywin 32-dep , test test -figleaf figleaf -output
2007-09-15 22:17:55 +00:00
2007-09-21 20:40:28 +00:00
signal-error-deps :
2007-11-20 07:07:44 +00:00
@echo
@echo
2008-04-14 13:52:21 +00:00
@echo "ERROR: Not all of Tahoe's dependencies are in place. Please see docs/install.html for help on installing dependencies."
2007-11-20 07:07:44 +00:00
@echo
@echo
2007-09-19 23:23:55 +00:00
exit 1
2007-09-21 20:40:28 +00:00
signal-error-pywin32-dep :
2007-11-20 07:07:44 +00:00
@echo
@echo
2008-04-14 13:52:21 +00:00
@echo "ERROR: the pywin32 dependency is not in place. Please see docs/install.html for help on installing dependencies."
2007-11-20 07:07:44 +00:00
@echo
@echo
2007-09-21 20:40:28 +00:00
exit 1
2007-11-20 07:07:44 +00:00
signal-error-pyopenssl-dep :
@echo
@echo
2008-01-22 17:22:51 +00:00
@echo "ERROR: the pyOpenSSL dependency is not in place (note that pyOpenSSL required OpenSSL). Please see docs/install.html for help on installing dependencies."
2007-11-20 07:07:44 +00:00
@echo
@echo
exit 1
2008-01-23 00:24:33 +00:00
check-auto-deps :
2008-03-25 18:45:55 +00:00
@$( PP) $( PYTHON) -c 'import _auto_deps ; _auto_deps.require_auto_deps()' || $( MAKE) signal-error-deps
2008-01-23 00:24:33 +00:00
check-all-deps : check -deps check -auto -deps
2007-09-21 20:40:28 +00:00
check-pywin32-dep :
2008-03-26 17:00:33 +00:00
@$( PP) $( PYTHON) -c 'import win32process' || $( MAKE) signal-error-pywin32-dep
2007-09-15 22:17:55 +00:00
2007-11-20 07:07:44 +00:00
check-pyopenssl-dep :
2008-03-26 17:00:33 +00:00
@$( PP) $( PYTHON) -c 'import OpenSSL' || $( MAKE) signal-error-pyopenssl-dep
2007-11-20 07:07:44 +00:00
2008-05-06 19:09:00 +00:00
check-deps : $( CHECK_PYWIN 32_DEP ) check -pyopenssl -dep
2007-12-22 17:46:31 +00:00
2007-09-15 22:17:55 +00:00
.checked-deps :
2007-12-30 12:47:17 +00:00
$( MAKE) check-all-deps
2007-09-15 22:17:55 +00:00
touch .checked-deps
2006-12-01 02:51:19 +00:00
2007-08-09 22:26:27 +00: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 18:08:39 +00:00
# too.
2007-09-12 23:02:53 +00:00
TEST = allmydata
2007-01-04 04:38:29 +00:00
2007-12-13 02:34:08 +00:00
# use 'make test TRIALARGS=--reporter=bwverbose' from buildbot, to
2007-09-14 01:20:35 +00:00
# suppress the ansi color sequences
2007-05-04 04:12:15 +00:00
2008-04-24 16:57:04 +00:00
test : build src /allmydata /_version .py
2008-04-14 13:52:21 +00:00
$( PP) $( TRIAL) $( TRIALARGS) $( TEST)
2007-05-01 06:02:45 +00:00
2008-04-24 16:57:04 +00:00
quicktest : .built .checked -deps
$( PP) $( TRIAL) $( TRIALARGS) $( TEST)
test-figleaf : build src /allmydata /_version .py
2007-01-09 04:28:08 +00:00
rm -f .figleaf
2008-04-14 13:52:21 +00:00
$( PP) $( TRIAL) --reporter= bwverbose-figleaf $( TEST)
2006-12-06 22:26:12 +00:00
2008-04-24 18:30:38 +00:00
quicktest-figleaf : src /allmydata /_version .py
rm -f .figleaf
$( PP) $( TRIAL) --reporter= bwverbose-figleaf $( TEST)
2006-12-07 02:24:02 +00:00
figleaf-output :
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) misc/figleaf2html -d coverage-html -r src -x misc/figleaf.excludes
2007-01-04 05:06:51 +00:00
@echo "now point your browser at coverage-html/index.html"
2007-05-01 18:08:39 +00:00
2007-01-04 04:38:29 +00:00
# after doing test-figleaf and figleaf-output, point your browser at
# coverage-html/index.html
2006-12-07 02:24:02 +00:00
2007-09-19 19:59:32 +00:00
.PHONY : upload -figleaf .figleaf .el pyflakes count -lines
.PHONY : check -memory check -memory -once clean
2007-05-01 18:08:39 +00:00
# 'upload-figleaf' is meant to be run with an UPLOAD_TARGET=host:/dir setting
2007-03-08 22:28:13 +00:00
i f d e f U P L O A D _ T A R G E T
2007-07-02 22:10:20 +00:00
i f n d e f U P L O A D _ H O S T
$( error UPLOAD_HOST must be set when using UPLOAD_TARGET )
e n d i f
i f n d e f C O V E R A G E D I R
$( error COVERAGEDIR must be set when using UPLOAD_TARGET )
e n d i f
2007-03-08 22:28:13 +00:00
upload-figleaf :
rsync -a coverage-html/ $( UPLOAD_TARGET)
2007-07-02 22:22:49 +00:00
ssh $( UPLOAD_HOST) make update-tahoe-figleaf COVERAGEDIR = $( COVERAGEDIR)
2007-03-08 22:28:13 +00:00
e l s e
upload-figleaf :
echo "this target is meant to be run with UPLOAD_TARGET=host:/path/"
2008-01-11 21:43:31 +00:00
false
2007-03-08 22:28:13 +00:00
e n d i f
2007-01-04 08:25:36 +00:00
.figleaf.el : .figleaf
2008-04-14 13:52:21 +00:00
$( PP) $( PYTHON) misc/figleaf2el.py .figleaf src
2007-01-04 08:25:36 +00:00
2006-12-14 11:05:22 +00:00
pyflakes :
2008-01-10 03:23:12 +00:00
$( PYTHON) -OOu ` which pyflakes` src/allmydata | sort | uniq
2006-12-14 11:05:22 +00:00
2007-01-22 08:17:39 +00:00
count-lines :
2007-01-31 01:10:37 +00:00
@echo -n "files: "
@find src -name '*.py' | grep -v /build/ | wc --lines
2007-01-22 08:17:39 +00:00
@echo -n "lines: "
2007-01-31 01:10:37 +00:00
@cat ` find src -name '*.py' | grep -v /build/` | wc --lines
2007-01-22 08:17:39 +00:00
@echo -n "TODO: "
2007-01-31 01:10:37 +00:00
@grep TODO ` find src -name '*.py' | grep -v /build/` | wc --lines
2007-01-22 08:17:39 +00:00
2007-09-19 19:28:30 +00:00
check-memory : .built
2007-09-15 20:53:36 +00:00
rm -rf _test_memory
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload-self
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload-POST
2007-09-19 01:56:05 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py download
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py download-GET
2007-09-19 03:35:27 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py download-GET-slow
2007-09-20 03:39:17 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py receive
2007-09-15 20:53:36 +00:00
2007-09-19 19:29:16 +00:00
check-memory-once : .built
rm -rf _test_memory
$( PP) \
2007-09-19 19:59:32 +00:00
$( PYTHON) src/allmydata/test/check_memory.py $( MODE)
2007-09-19 19:29:16 +00:00
2007-09-20 01:27:47 +00:00
# this 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
2007-09-21 02:03:16 +00:00
# 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.
#
# 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.
2007-09-20 01:27:47 +00:00
check-speed : .built
if [ -z '$(TESTCLIENTDIR)' ] ; then exit 1; fi
2007-12-14 09:04:25 +00:00
@echo "stopping any leftover client code"
-$( PYTHON) bin/tahoe stop $( TESTCLIENTDIR)
2007-10-11 10:38:24 +00:00
$( PYTHON) bin/tahoe start $( TESTCLIENTDIR)
2007-09-21 02:03:16 +00:00
sleep 5
2007-09-20 01:27:47 +00:00
$( PYTHON) src/allmydata/test/check_speed.py $( TESTCLIENTDIR)
2007-10-11 10:38:24 +00:00
$( PYTHON) bin/tahoe stop $( TESTCLIENTDIR)
2007-03-09 01:12:24 +00:00
2007-11-03 05:32:55 +00:00
# 'make repl' is a simple-to-type command to get a Python interpreter loop
# from which you can type 'import allmydata'
repl :
$( PP) python
2007-05-24 00:51:28 +00:00
test-darcs-boringfile :
2007-05-24 00:57:48 +00:00
$( MAKE)
2007-05-24 00:51:28 +00:00
$( PYTHON) misc/test-darcs-boringfile.py
2007-05-24 00:57:48 +00:00
test-clean :
2008-01-23 17:43:37 +00:00
find . | grep -vEe"allfiles.tmp|src/allmydata/_(version|auto_deps).py|src/allmydata_tahoe.egg-info" | sort >allfiles.tmp.old
2007-05-24 00:57:48 +00:00
$( MAKE)
$( MAKE) clean
2008-01-23 17:43:37 +00:00
find . | grep -vEe"allfiles.tmp|src/allmydata/_(version|auto_deps).py|src/allmydata_tahoe.egg-info" | 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
2007-09-12 23:02:53 +00:00
clean :
2007-09-19 19:28:30 +00:00
rm -rf build _trial_temp _test_memory .checked-deps .built
2006-12-14 11:08:09 +00:00
rm -f debian
2007-09-12 23:02:53 +00:00
rm -f ` find src/allmydata -name '*.so' -or -name '*.pyc' `
2007-09-15 02:23:55 +00:00
rm -rf tahoe_deps.egg-info allmydata_tahoe.egg-info
2007-09-15 22:17:55 +00:00
rm -rf support dist
2008-03-11 03:40:39 +00:00
rm -rf setuptools*.egg *.pyc darcsver*.egg pyutil*.egg
2008-01-11 03:24:44 +00:00
rm -rf misc/dependencies/build misc/dependencies/temp
rm -rf misc/dependencies/tahoe_deps.egg-info
2006-12-14 10:59:51 +00:00
2007-11-06 04:32:08 +00:00
find-trailing-spaces :
$( PYTHON) misc/find-trailing-spaces.py -r src
2007-07-31 23:55:45 +00:00
2008-01-31 03:45:14 +00:00
# TARBALL GENERATION
2008-02-01 02:00:40 +00:00
.PHONY : tarballs upload -tarballs
2008-01-31 03:45:14 +00:00
tarballs :
2008-01-31 20:52:48 +00:00
$( MAKE) make-version
$( PYTHON) setup.py sdist --formats= bztar,gztar,zip
2008-02-01 02:00:40 +00:00
upload-tarballs :
for f in dist/allmydata-tahoe-*; do \
xfer-client --furlfile ~/.tahoe-tarball-upload.furl $$ f; \
done
2007-07-31 23:55:45 +00:00
2007-05-01 18:08:39 +00:00
# DEBIAN PACKAGING
2006-12-05 09:00:44 +00:00
2007-05-04 03:14:07 +00:00
VER = $( shell $( PYTHON) misc/get-version.py)
2007-01-06 03:06:51 +00:00
DEBCOMMENTS = "'make deb' build"
2007-05-04 03:14:07 +00:00
show-version :
2007-05-01 20:23:15 +00:00
@echo $( VER)
2007-01-06 03:06:51 +00:00
2007-07-11 19:45:00 +00:00
.PHONY : setup -deb deb -ARCH is -known -debian -arch
2007-07-11 21:31:04 +00:00
.PHONY : deb -sid deb -feisty deb -edgy deb -etch
2007-07-11 19:45:00 +00:00
deb-sid :
$( MAKE) deb-ARCH ARCH = sid
deb-feisty :
$( MAKE) deb-ARCH ARCH = feisty
2007-04-04 23:39:25 +00:00
# edgy uses the feisty control files for now
2007-07-11 19:45:00 +00:00
deb-edgy :
$( MAKE) deb-ARCH ARCH = edgy TAHOE_ARCH = feisty
# etch uses the feisty control files for now
deb-etch :
2007-09-12 23:02:53 +00:00
$( MAKE) deb-ARCH ARCH = etch TAHOE_ARCH = feisty
2007-10-17 20:35:11 +00:00
# same with gutsy, the process has been nicely stable for a while now
deb-gutsy :
$( MAKE) deb-ARCH ARCH = gutsy TAHOE_ARCH = feisty
2007-07-11 19:45:00 +00:00
# we know how to handle the following debian architectures
2007-10-17 20:35:11 +00:00
KNOWN_DEBIAN_ARCHES := sid feisty edgy etch gutsy
2007-07-11 19:45:00 +00:00
i f e q ( $( findstring x -$ ( ARCH ) -x ,$ ( foreach arch ,$ ( KNOWN_DEBIAN_ARCHES ) ,"x -$ ( arch ) -x ") ) , )
is-known-debian-arch :
@echo "ARCH must be set when using setup-deb or deb-ARCH"
@echo "I know how to handle:" $( KNOWN_DEBIAN_ARCHES)
2007-12-22 18:50:10 +00:00
false
2007-07-11 19:45:00 +00:00
e l s e
is-known-debian-arch :
2007-12-22 18:50:10 +00:00
true
2007-07-11 19:45:00 +00:00
e n d i f
2007-04-04 23:39:25 +00:00
2007-07-11 19:45:00 +00:00
i f n d e f T A H O E _ A R C H
TAHOE_ARCH = $( ARCH)
e n d i f
2007-03-29 21:36:15 +00:00
2007-07-11 19:45:00 +00:00
setup-deb : is -known -debian -arch
2007-05-04 07:07:06 +00:00
rm -f debian
2007-07-11 19:45:00 +00:00
ln -s misc/$( TAHOE_ARCH) /debian debian
chmod +x debian/rules
2007-05-01 19:41:35 +00:00
2007-09-14 10:28:56 +00:00
# etch (current debian stable) has python-simplejson-1.3, which doesn't
# support indent=
2007-07-11 21:00:47 +00:00
# sid (debian unstable) currently has python-simplejson 1.7.1
2007-09-14 10:28:56 +00:00
# edgy has 1.3, which doesn't support indent=
# feisty has 1.4, which supports indent= but emits a deprecation warning
2007-07-11 21:00:47 +00:00
# gutsy has 1.7.1
2007-09-14 10:28:56 +00:00
#
# we need 1.4 or newer
2007-07-11 21:00:47 +00:00
deb-ARCH : is -known -debian -arch setup -deb
fakeroot debian/rules binary
2007-10-11 21:37:29 +00:00
@echo
@echo "The newly built .deb packages are in the parent directory from here."
2007-05-01 19:41:35 +00:00
2007-07-11 19:45:00 +00:00
.PHONY : increment -deb -version
2007-07-11 21:31:04 +00:00
.PHONY : deb -sid -head deb -edgy -head deb -feisty -head
2007-07-11 19:45:00 +00:00
.PHONY : deb -etch -head
2007-01-06 03:06:51 +00:00
2007-07-11 19:45:00 +00:00
# The buildbot runs the following targets after each change, to produce
2007-08-21 21:01:01 +00:00
# up-to-date tahoe .debs. These steps do not create .debs for anything else.
2007-05-04 07:07:06 +00:00
increment-deb-version : make -version
2007-05-04 03:14:07 +00:00
debchange --newversion $( VER) $( DEBCOMMENTS)
2007-07-11 19:45:00 +00:00
deb-sid-head :
$( MAKE) setup-deb ARCH = sid
$( MAKE) increment-deb-version
2006-12-05 09:00:44 +00:00
fakeroot debian/rules binary
2007-07-11 19:45:00 +00:00
deb-edgy-head :
2007-07-11 20:26:23 +00:00
$( MAKE) setup-deb ARCH = edgy TAHOE_ARCH = feisty
2007-07-11 19:45:00 +00:00
$( MAKE) increment-deb-version
2007-04-04 23:39:25 +00:00
fakeroot debian/rules binary
2007-07-11 19:45:00 +00:00
deb-feisty-head :
$( MAKE) setup-deb ARCH = feisty
$( MAKE) increment-deb-version
2007-03-29 21:36:15 +00:00
fakeroot debian/rules binary
2007-07-11 19:45:00 +00:00
deb-etch-head :
2007-07-11 20:26:23 +00:00
$( MAKE) setup-deb ARCH = etch TAHOE_ARCH = feisty
2007-07-11 19:45:00 +00:00
$( MAKE) increment-deb-version
2007-05-04 07:07:06 +00:00
fakeroot debian/rules binary
2007-10-17 20:35:11 +00:00
deb-gutsy-head :
$( MAKE) setup-deb ARCH = gutsy TAHOE_ARCH = feisty
$( MAKE) increment-deb-version
fakeroot debian/rules binary
2008-01-10 02:06:28 +00:00
# These targets provide for windows native builds
2008-01-22 20:47:48 +00:00
.PHONY : windows -exe windows -installer windows -installer -upload
2008-01-15 00:53:54 +00:00
2008-01-22 20:47:48 +00:00
windows-exe : .built
2008-01-15 00:53:54 +00:00
cd windows && $( PP) $( PYTHON) setup.py py2exe
2008-01-10 02:06:28 +00:00
2008-01-12 03:41:21 +00:00
windows-installer : windows -exe
2008-01-15 00:53:54 +00:00
$( PP) $( PYTHON) misc/sub-ver.py windows/installer.tmpl >windows/installer.iss
cd windows && " $( INNOSETUP) " /cc installer.iss
2008-01-17 03:29:30 +00:00
windows-installer-upload :
chmod -R o+rx windows/dist/installer
rsync -av -e /usr/bin/ssh windows/dist/installer/ amduser@dev:/home/amduser/public_html/dist/tahoe/windows/
add mac native build
This patch adds support for a mac native build.
At the moment it's a fairly simple .app - i.e. so simple as to be unacceptable
for a shipping product, but ok for testing and experiment at this point.
notably once launched, the app's ui does not respond at all, although its dock
icon does allow it to be force-quit.
this produces a single .app bundle, which when run will look for a node basedir
in ~/.tahoe. If one is not found, one will be created in ~/Library/Application
Support/Allmydata Tahoe, and that will be symlinked to ~/.tahoe
if the basedir is lacking basic config (introducer.furl and root_dir.cap) then
the wx config wizard will be launched to log into an account and to set up
those files.
if a webport file is not found, the default value of 8123 will be written into
it.
once the node has started running, a webbrowser will be opened to the webish
interface at the users root_dir
note that, once configured, the node runs as the main thread of the .app,
no daemonisation is done, twistd is not involved.
the binary itself, from within the .app bundle, i.e.
"Allmydata Tahoe.app/Contents/MacOS/Allmydata Tahoe"
can be used from the command line and functions as the 'tahoe' executable
would in a unix environment, with one exception - when launched with no args
it triggers the default behaviour of running a node, and if necessary config
wizard, as if the user had launched the .app
one other gotcha to be aware of is that symlinking to this binary from some
other place in ones $PATH will most likely not work. when I tried this,
something - wx I believe - exploded, since it seems to use argv[0] to figure
out where necessary libraries reside and fails if argv[0] isn't in the .app
bundle. it's pretty easy to set up a script a la
#!/bin/bash
/Blah/blah/blah/Allmydata\ Tahoe.app/Contents/MacOS/Allmydata\ Tahoe "${@}"
2008-01-23 02:32:26 +00:00
# These targets provide for mac native builds
.PHONY : mac -exe mac -upload mac -cleanup mac -dbg
mac-exe : .built
$( MAKE) -C mac clean
VERSION = $( VER) $( PP) $( MAKE) -C mac build
mac-dist :
2008-01-25 23:29:13 +00:00
VERSION = $( VER) $( MAKE) -C mac diskimage
mac-upload :
2008-02-27 00:03:53 +00:00
VERSION = $( VER) $( MAKE) -C mac upload UPLOAD_DEST = $( UPLOAD_DEST)
add mac native build
This patch adds support for a mac native build.
At the moment it's a fairly simple .app - i.e. so simple as to be unacceptable
for a shipping product, but ok for testing and experiment at this point.
notably once launched, the app's ui does not respond at all, although its dock
icon does allow it to be force-quit.
this produces a single .app bundle, which when run will look for a node basedir
in ~/.tahoe. If one is not found, one will be created in ~/Library/Application
Support/Allmydata Tahoe, and that will be symlinked to ~/.tahoe
if the basedir is lacking basic config (introducer.furl and root_dir.cap) then
the wx config wizard will be launched to log into an account and to set up
those files.
if a webport file is not found, the default value of 8123 will be written into
it.
once the node has started running, a webbrowser will be opened to the webish
interface at the users root_dir
note that, once configured, the node runs as the main thread of the .app,
no daemonisation is done, twistd is not involved.
the binary itself, from within the .app bundle, i.e.
"Allmydata Tahoe.app/Contents/MacOS/Allmydata Tahoe"
can be used from the command line and functions as the 'tahoe' executable
would in a unix environment, with one exception - when launched with no args
it triggers the default behaviour of running a node, and if necessary config
wizard, as if the user had launched the .app
one other gotcha to be aware of is that symlinking to this binary from some
other place in ones $PATH will most likely not work. when I tried this,
something - wx I believe - exploded, since it seems to use argv[0] to figure
out where necessary libraries reside and fails if argv[0] isn't in the .app
bundle. it's pretty easy to set up a script a la
#!/bin/bash
/Blah/blah/blah/Allmydata\ Tahoe.app/Contents/MacOS/Allmydata\ Tahoe "${@}"
2008-01-23 02:32:26 +00:00
mac-cleanup :
VERSION = $( VER) $( MAKE) -C mac cleanup
mac-dbg :
cd mac && $( PP) $( PYTHON) w allmydata_tahoe.py
2008-01-17 03:29:30 +00:00
stats: add a simple stats gathering system
We have a desire to collect runtime statistics from multiple nodes primarily
for server monitoring purposes. This implements a simple implementation of
such a system, as a skeleton to build more sophistication upon.
Each client now looks for a 'stats_gatherer.furl' config file. If it has
been configured to use a stats gatherer, then it instantiates internally
a StatsProvider. This is a central place for code which wishes to offer
stats up for monitoring to report them to, either by calling
stats_provider.count('stat.name', value) to increment a counter, or by
registering a class as a stats producer with sp.register_producer(obj).
The StatsProvider connects to the StatsGatherer server and provides its
provider upon startup. The StatsGatherer is then responsible for polling
the attached providers periodically to retrieve the data provided.
The provider queries each registered producer when the gatherer queries
the provider. Both the internal 'counters' and the queried 'stats' are
then reported to the gatherer.
This provides a simple gatherer app, (c.f. make stats-gatherer-run)
which prints its furl and listens for incoming connections. Once a
minute, the gatherer polls all connected providers, and writes the
retrieved data into a pickle file.
Also included is a munin plugin which knows how to read the gatherer's
stats.pickle and output data munin can interpret. this plugin,
tahoe-stats.py can be symlinked as multiple different names within
munin's 'plugins' directory, and inspects argv to determine which
data to display, doing a lookup in a table within that file.
It looks in the environment for 'statsfile' to determine the path to
the gatherer's stats.pickle. An example plugins-conf.d file is
provided.
2008-01-31 03:11:07 +00:00
# This target runs a stats gatherer server
.PHONY : stats -gatherer -run
stats-gatherer-run :
cd stats_gatherer && $( PP) $( PYTHON) ../src/allmydata/stats.py