--- /dev/null
+# invoke this with a specific python
+
+import sys, shutil, os.path
+from subprocess import Popen, PIPE
+
+PYTHON = sys.executable
+ARCH = sys.argv[1]
+
+class SubprocessError(Exception):
+ pass
+
+def get_output(*cmd, **kwargs):
+ tolerate_stderr = kwargs.get("tolerate_stderr", False)
+ print " " + " ".join(cmd)
+ p = Popen(cmd, stdout=PIPE)
+ (out,err) = p.communicate()
+ rc = p.returncode
+ if rc != 0:
+ print >>sys.stderr, err
+ raise SubprocessError("command %s exited with rc=%s", (cmd, rc))
+ if err and not tolerate_stderr:
+ print >>sys.stderr, "stderr:", err
+ raise SubprocessError("command emitted unexpected stderr")
+ print " =>", out,
+ return out
+
+def run(*cmd, **kwargs):
+ print " " + " ".join(cmd)
+# if "stdin" in kwargs:
+# stdin = kwargs.pop("stdin")
+# p = Popen(cmd, stdin=PIPE, **kwargs)
+# p.stdin.write(stdin)
+# p.stdin.close()
+# else:
+# p = Popen(cmd, **kwargs)
+ p = Popen(cmd, **kwargs)
+ rc = p.wait()
+ if rc != 0:
+ raise SubprocessError("command %s exited with rc=%s", (cmd, rc))
+
+# the very first time you run setup.py, it will download+build darcsver and
+# whatnot, emitting noise to stdout. Run it once (and throw away that junk)
+# to avoid treating that noise as the package name.
+run(PYTHON, "setup.py", "--name")
+
+NAME = get_output(PYTHON, "setup.py", "--name").strip()
+VERSION = get_output(PYTHON, "setup.py", "--version").strip()
+
+TARBALL = "%s-%s.tar.gz" % (NAME, VERSION)
+DEBIAN_TARBALL = "%s_%s.orig.tar.gz" % (NAME, VERSION)
+BUILDDIR = "build/debian/%s-%s" % (NAME, VERSION)
+
+run(PYTHON, "setup.py", "sdist", "--formats=gztar")
+if os.path.exists("build/debian"):
+ shutil.rmtree("build/debian")
+os.makedirs("build/debian")
+shutil.copyfile("dist/%s" % TARBALL, "build/debian/%s" % DEBIAN_TARBALL)
+run("tar", "xf", DEBIAN_TARBALL, cwd="build/debian")
+
+# now modify the tree for debian packaging. This is an algorithmic way of
+# applying the debian .diff, which factors out some of the similarities
+# between various debian/ubuntu releases. Everything we do after this point
+# will show up in the generated .diff, and thus form the debian-specific part
+# of the source package.
+DEBDIR = os.path.join(BUILDDIR, "debian")
+os.makedirs(DEBDIR)
+
+# The 'aliases' section in setup.cfg causes problems, so get rid of it. We
+# could get rid of the whole file, but 1: find_links is still sort of useful,
+# and 2: dpkg-buildpackage prefers to ignore file removal (as opposed to
+# file-modification)
+
+#os.unlink(os.path.join(BUILDDIR, "setup.cfg"))
+SETUPCFG = os.path.join(BUILDDIR, "setup.cfg")
+lines = open(SETUPCFG, "r").readlines()
+f = open(SETUPCFG, "w")
+for l in lines:
+ if l.startswith("[aliases]"):
+ break
+ f.write(l)
+f.close()
+
+for n in ["compat", "control", "copyright", "pycompat", "rules"]:
+ fn = "misc/debian/%s.%s" % (n, ARCH)
+ if not os.path.exists(fn):
+ fn = "misc/debian/%s" % n
+ assert os.path.exists(fn)
+
+ shutil.copyfile(fn, os.path.join(DEBDIR, n))
+ if n == "rules":
+ os.chmod(os.path.join(DEBDIR, n), 0755) # +x
+
+# We put "local package" on the first line of the changelog entry to suppress
+# the lintian NMU warnings (since debchange's new entry's "author" will
+# probably be different than the what the debian/control Maintainer: field
+# says)
+
+DISTRIBUTION_MAP = {"sid": "unstable"}
+
+run("debchange", "--create",
+ "--package", NAME,
+ "--newversion", VERSION+"-1",
+ "--distribution", DISTRIBUTION_MAP.get(ARCH, ARCH),
+ "local package: 'make deb' build", cwd=BUILDDIR)
+
+# the package is ready to build. 'debuild' will produce the source package
+# (.dsc+.diff.gz), then build the .deb and produce a .changes file ready for
+# upload to an APT archive. The build log will go into a .build file.
+
+run("debuild", "-uc", "-us", cwd=BUILDDIR)
+++ /dev/null
-#!/bin/bash
-set -e
-
-# $PYTHON and $ARCH must be set
-
-if [ -z "$PYTHON" ]; then
- PYTHON=python
-fi
-if [ -z "$ARCH" ]; then
- echo "must set ARCH= before running this script"
- exit 1
-fi
-
-NAME=$($PYTHON setup.py --name)
-VERSION=$($PYTHON setup.py --version)
-
-# actually, it's the debchange using a different author than the
-# debian/control Maintainer: entry that makes lintian think this is an NMU.
-# Put "local package" on the first line of the changelog entry to supress
-# this warning.
-TARBALL=${NAME}-${VERSION}.tar.gz
-DEBTARBALL=${NAME}_${VERSION}.orig.tar.gz
-DEBDIR=build/debian/${NAME}-${VERSION}
-$PYTHON setup.py sdist --formats=gztar
-rm -rf build/debian
-mkdir -p build/debian
-cp dist/$TARBALL build/debian/$DEBTARBALL
-(cd build/debian && tar xf $DEBTARBALL)
-zcat misc/debian/$ARCH.diff.gz | (cd $DEBDIR && patch -p1)
-chmod +x $DEBDIR/debian/rules
-# We put "local package" on the first line of the changelog entry to suppress
-# the lintian NMU warnings (since debchange's new entry's "author" will
-# probably be different than the what the debian/control Maintainer: field
-# says)
-echo "updating version to $VERSION-1"
-(cd $DEBDIR && debchange --newversion $VERSION-1 "local package: 'make deb' build")
-(cd $DEBDIR && debuild -uc -us)
-
--- /dev/null
+Source: allmydata-tahoe
+Section: python
+Priority: optional
+Maintainer: Brian Warner <warner@allmydata.com>
+Homepage: http://allmydata.org/trac/tahoe
+Build-Depends: debhelper (>= 5.0.37.2), cdbs (>= 0.4.43), python-central (>= 0.5), python-setuptools, python, python-dev, debhelper (>= 7)
+Build-Depends-Indep: python-twisted-core
+XS-Python-Version: 2.4,2.5,2.6
+Standards-Version: 3.8.3
+
+Package: allmydata-tahoe
+Architecture: all
+Depends: ${python:Depends}, python-twisted-core, python-twisted-names, python-twisted-web, python-foolscap (>= 0.4.1), python-openssl, python-nevow, python-simplejson (>= 1.4), python-zfec (>= 1.1), python-pycryptopp (>= 0.5.15), python-setuptools, ${misc:Depends}
+Recommends:
+XB-Python-Version: 2.4,2.5,2.6
+Description: A secure distributed filesystem
+ Allmydata Tahoe
--- /dev/null
+This package was debianized by Brian Warner <warner@allmydata.com>
+
+The upstream source of this project is http://allmydata.org .
+
+Copyright (c) 2006-2009
+AllMyData, Inc.
+
+You may use this package under the GNU General Public License, version 2 or, at
+your option, any later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+This licence also comes with the added permission that you may link this
+program with the OpenSSL library and distribute executables, as long as you
+follow the requirements of this licence in regard to all of the software in
+the executable aside from OpenSSL.
+
+You may use this package under the Transitive Grace Period Public Licence,
+version 1 or, at your option, any later version. The Transitive Grace Period
+Public Licence has requirements similar to the GPL except that it allows you to
+wait for up to twelve months after you redistribute a derived work before
+releasing the source code of your derived work. See the file COPYING.TGPPL.html
+for the terms of the Transitive Grace Period Public Licence, version 1.
+
+(You may choose to use this package under the terms of either licence, at your
+option.)
--- /dev/null
+#! /usr/bin/make -f
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+DEB_PYTHON_SYSTEM=pycentral
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/python-distutils.mk
+
+# this ought to be the name of the package that we're building, which is
+# different on each tahoe branch. debian/control is the master: whatever
+# package is listed in there will be built.
+DEBNAME := $(firstword $(DEB_PACKAGES))
+
+STAGING_DIR := $(CURDIR)/debian/$(DEBNAME)
+
+DEB_INSTALL_DOCS_ALL := COPYING.TGPPL.html CREDITS NEWS README relnotes.txt \
+ docs misc/spacetime misc/cpu-watcher.tac
+DEB_COMPRESS_EXCLUDE := .tac
+
+install/$(DEBNAME)::
+ dh_install misc/munin/* usr/share/$(DEBNAME)/munin
+ chmod +x $(STAGING_DIR)/usr/share/$(DEBNAME)/munin/*
+ chmod -x $(STAGING_DIR)/usr/share/$(DEBNAME)/munin/*-conf
+
+# the base rules do "python setup.py clean", which spuriously downloads and
+# builds several setuptools-extensions eggs. The tahoe 'setup.py clean'
+# leaves those and many other files in place, but its "make clean" does the
+# right thing. Putting this double-colon rule after the 'include' statements
+# above should ensure that it runs after the base rules.
+
+clean::
+ $(MAKE) clean
+