2007-07-11 20:39:55 +00:00
# this Makefile requires GNU make
2007-09-14 01:20:00 +00:00
# If you get an error message like the following:
# error: Setup script exited with error: Python was built with version 7.1 of Visual Studio, and extensions need to be built with the same version of the compiler, but it isn't installed.
# Then that probably means that you aren't using the the right
# compiler. In that case, try creating distutils configuration file
# (as described in http://docs.python.org/inst/config-syntax.html ),
# specifying which compiler to use. For example, if you use either
# the cygwin gcc compiler with mingw support, or the MINGW compiler,
# then you can add the following lines to your .cfg file:
# [build]
# compiler=mingw32
2007-01-07 20:09:37 +00:00
default : build
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-04-11 15:50:59 +00:00
TRIALPATH = $( shell which trial.py 2>/dev/null)
2007-04-10 19:24:32 +00:00
i f e q ( $( TRIALPATH ) , )
2007-04-27 00:49:01 +00:00
TRIALPATH = $( shell which trial 2>/dev/null)
e n d i f
i f e q ( $( TRIALPATH ) , )
TRIALPATH = $( shell $( PYTHON) -c "import os, sys; print repr(os.path.join(sys.prefix, \"Scripts\", \"trial.py\"))" )
e n d i f
i f e q ( $( TRIALPATH ) , )
TRIALPATH = $( shell $( PYTHON) -c "import os, sys; print repr(os.path.join(sys.prefix, \"Scripts\", \"trial\"))" )
2007-04-10 19:24:32 +00:00
e n d i f
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
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.
TRIALPATH := $( shell cygpath -w $( TRIALPATH) )
SUPPORT = $( shell cygpath -w $( shell pwd ) ) \s upport
SUPPORTLIB := $( SUPPORT) \L ib\s ite-packages
2007-09-15 03:17:43 +00:00
SRCPATH := $( shell cygpath -w $( shell pwd ) ) \s rc
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-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-09-14 01:20:35 +00:00
TRIAL = $( PYTHON) -u " $( TRIALPATH) " --rterrors $( REACTOROPT)
2007-04-10 19:24:32 +00:00
2007-09-15 02:23:55 +00:00
build-deps : build
2007-09-14 01:20:35 +00:00
mkdir -p " $( SUPPORTLIB) "
2007-09-15 02:23:55 +00:00
PYTHONPATH = " $( PYTHONPATH) $( PATHSEP) $( SUPPORTLIB) $( PATHSEP) . " \
$( PYTHON) misc/dependencies/build-deps-setup.py install \
2007-09-14 01:20:35 +00:00
--prefix= " $( SUPPORT) "
2007-09-12 23:48:45 +00:00
EGGSPATH = $( shell $( PYTHON) misc/find-dep-eggs.py)
show-eggspath :
@echo $( EGGSPATH)
2007-09-15 03:17:43 +00:00
PP = PYTHONPATH = " $( SRCPATH) $( PATHSEP) $( EGGSPATH) $( PATHSEP) $( PYTHONPATH) "
2007-09-13 01:56:33 +00:00
.PHONY : make -version build
make-version :
2007-09-14 01:20:35 +00:00
$( PYTHON) misc/make-version.py "allmydata-tahoe" "src/allmydata/_version.py"
2007-09-13 01:56:33 +00:00
build : make -version
2007-09-14 01:20:35 +00:00
$( PYTHON) ./setup.py build_ext -i
2007-09-15 02:23:55 +00:00
chmod +x bin/allmydata-tahoe
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
2007-09-12 23:02:53 +00:00
install : make -version
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
2007-09-14 01:20:35 +00:00
.PHONY : test test -figleaf figleaf -output
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-09-14 01:20:35 +00:00
# use 'make test REPORTER=--reporter=bwverbose' from buildbot, to
# suppress the ansi color sequences
2007-05-04 04:12:15 +00:00
2007-05-01 18:08:39 +00:00
test : build
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) -c 'import allmydata, zfec, foolscap, simplejson, nevow, OpenSSL'
$( PP) \
$( TRIAL) $( REPORTER) $( TEST)
2007-05-01 06:02:45 +00:00
2007-01-06 01:12:04 +00:00
test-figleaf : build
2007-01-09 04:28:08 +00:00
rm -f .figleaf
2007-09-15 19:32:11 +00:00
$( PP) \
$( TRIAL) --reporter= bwverbose-figleaf $( TEST)
2006-12-06 22:26:12 +00:00
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-08-18 06:45:14 +00:00
.PHONY : upload -figleaf .figleaf .el pyflakes count -lines check -memory
2007-09-12 23:02:53 +00:00
.PHONY : 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/"
/bin/false
e n d i f
2007-01-04 08:25:36 +00:00
.figleaf.el : .figleaf
2007-09-14 01:20:35 +00:00
$( PYTHON) misc/figleaf2el.py .figleaf src
2007-01-04 08:25:36 +00:00
2006-12-14 11:05:22 +00:00
pyflakes :
2007-09-14 01:20:35 +00:00
$( PYTHON) -OOu ` which pyflakes` src/allmydata
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-05-25 00:34:42 +00:00
check-memory : build
2007-07-17 17:41:41 +00:00
touch memstats.out
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload
2007-07-17 17:41:41 +00:00
cat _test_memory/stats.out >>memstats.out
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload-self
2007-08-10 08:41:34 +00:00
cat _test_memory/stats.out >>memstats.out
2007-09-15 19:32:11 +00:00
$( PP) \
$( PYTHON) src/allmydata/test/check_memory.py upload-POST
2007-07-17 17:41:41 +00:00
cat _test_memory/stats.out >>memstats.out
2007-03-09 01:12:24 +00:00
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 :
2007-09-14 10:28:56 +00:00
find . | grep -v allfiles.tmp | grep -v src/allmydata/_version.py | sort >allfiles.tmp.old
2007-05-24 00:57:48 +00:00
$( MAKE)
$( MAKE) clean
2007-09-14 10:28:56 +00:00
find . | grep -v allfiles.tmp | grep -v src/allmydata/_version.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
2007-09-12 23:02:53 +00:00
clean :
2006-12-14 10:59:51 +00:00
rm -rf build
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-14 01:20:35 +00:00
rm -rf support
2007-09-15 02:23:55 +00:00
rm -rf setuptools*.egg ez_setup.pyc
2006-12-14 10:59:51 +00:00
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-07-11 19:45:00 +00:00
# we know how to handle the following debian architectures
2007-07-11 21:31:04 +00:00
KNOWN_DEBIAN_ARCHES := sid feisty edgy etch
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)
/bin/false
e l s e
is-known-debian-arch :
/bin/true
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-07-11 19:45:00 +00:00
echo
2007-05-01 19:41:35 +00:00
echo "The newly built .deb packages are in the parent directory from here."
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