mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-20 17:52:50 +00:00
new approach for debian packaging, sharing pieces across distributions. Still experimental, still only works for sid.
This commit is contained in:
parent
24b1805ca0
commit
7dc17aa078
2
Makefile
2
Makefile
@ -404,7 +404,7 @@ deb-jaunty-head:
|
||||
# new experimental debian-packaging-building target
|
||||
.PHONY: EXPERIMENTAL-deb
|
||||
EXPERIMENTAL-deb: is-known-debian-arch
|
||||
misc/build-deb.sh
|
||||
$(PYTHON) misc/build-deb.py $(ARCH)
|
||||
|
||||
|
||||
# These targets provide for windows native builds
|
||||
|
110
misc/build-deb.py
Normal file
110
misc/build-deb.py
Normal file
@ -0,0 +1,110 @@
|
||||
# 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)
|
@ -1,38 +0,0 @@
|
||||
#!/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)
|
||||
|
1
misc/debian/compat
Normal file
1
misc/debian/compat
Normal file
@ -0,0 +1 @@
|
||||
4
|
1
misc/debian/compat.sid
Normal file
1
misc/debian/compat.sid
Normal file
@ -0,0 +1 @@
|
||||
7
|
17
misc/debian/control.sid
Normal file
17
misc/debian/control.sid
Normal file
@ -0,0 +1,17 @@
|
||||
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
|
27
misc/debian/copyright
Normal file
27
misc/debian/copyright
Normal file
@ -0,0 +1,27 @@
|
||||
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.)
|
1
misc/debian/pycompat
Normal file
1
misc/debian/pycompat
Normal file
@ -0,0 +1 @@
|
||||
2
|
34
misc/debian/rules.sid
Normal file
34
misc/debian/rules.sid
Normal file
@ -0,0 +1,34 @@
|
||||
#! /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
|
||||
|
Loading…
x
Reference in New Issue
Block a user