[Python-checkins] python/nondist/sandbox/Lib bdist_dpkg.py, NONE,
1.1
akuchling at users.sourceforge.net
akuchling at users.sourceforge.net
Sun Sep 21 15:56:17 EDT 2003
Update of /cvsroot/python/python/nondist/sandbox/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv3263
Added Files:
bdist_dpkg.py
Log Message:
Stab at bdist_dpkg -- still needs a lot of work
--- NEW FILE: bdist_dpkg.py ---
"""distutils.command.bdist_dpkg
Implements the Distutils 'bdist_dpkg' command (create a Debian packaging).
"""
# This module should be kept compatible with Python 1.5.2.
__revision__ = "$Id: bdist_dpkg.py,v 1.1 2003/09/21 19:56:14 akuchling Exp $"
import sys, os, string
import glob
from types import *
from distutils.core import Command
from distutils.debug import DEBUG
from distutils.util import get_platform
from distutils.file_util import write_file
from distutils.errors import *
from distutils import log
MARKER_STRING = "GENERATED BY BDIST_DPKG"
class bdist_dpkg (Command):
description = "create a DPKG distribution"
user_options = [
]
boolean_options = []
def initialize_options (self):
pass
# initialize_options()
def finalize_options (self):
if os.name != 'posix':
raise DistutilsPlatformError, \
("don't know how to create DPKG "
"distributions on platform %s" % os.name)
# finalize_options()
def run (self):
if DEBUG:
print "before _get_package_data():"
self._create_dpkg_files()
# build package
log.info("building DPKG")
#self.spawn(["dpkg-buildpackage", "-rfakeroot"])
# run()
def _create_dpkg_files (self):
# Files to create:
# changelog, control,
# Optional: docs, copyright
#
log.info("creating debian control files")
if not os.path.exists('debian'):
log.info("creating debian/ subdirectory")
os.mkdir('debian')
dirlist = ""
for i in self.distribution.packages:
dir = i
dirlist += ' ' + dir
dist = self.distribution
package_name = dist.get_name().lower()
d = {'name':dist.get_name(),
'package_name':package_name,
'pyversion': '%i.%i' % sys.version_info[0:2],
'dirlist':dirlist,
'marker':MARKER_STRING,
}
if not self._is_user_file('changelog') or True:
log.info('writing changelog file')
output = self._write_file('changelog')
output.write("""%s (%s-%i) unstable; urgency=low
* Dummy changelog line
-- %s <%s> Wed, 11 Jun 2003 14:44:11 -0400
""" % (package_name, dist.get_version(), 1, # XXX build version
dist.get_maintainer(), dist.get_maintainer_email()))
output.close()
if not self._is_user_file('control') or True:
dist = self.distribution
log.info('writing control file')
output = self._write_file('control')
#output.write('XXX-Dummy-Field: %s\n' % MARKER_STRING)
output.write("Source: %s\n" % package_name)
output.write("Priority: optional\n")
output.write("Maintainer: %s <%s>\n"
% (dist.get_maintainer(), dist.get_maintainer_email()))
output.write("""Build-Depends: debhelper (>> 3.0.0)
Standards-Version: 3.5.8
Section: libs
""")
output.write('\n') # Separator line
output.write("Package: %s\n" % package_name)
output.write("""Section: libs
Architecture: all\n""")
output.write("Depends: python%(pyversion)s\n" % d)
output.write("Description: %s\n" % dist.get_description())
s = dist.get_long_description()
s = string.replace(s, '\n', '\n ')
output.write(' ' + s)
output.close()
if not self._is_user_file('postinst'):
log.info('writing postinst file')
output = self._write_file('postinst')
output.write(POSTINST_FILE % d)
output.close()
if not self._is_user_file('prerm'):
log.info('writing prerm file')
output = self._write_file('prerm')
output.write(PRERM_FILE % d)
output.close()
if not self._is_user_file('rules'):
log.info('writing rules file')
output = self._write_file('rules')
output.write(RULES_FILE % d)
output.close()
os.chmod('debian/rules', 0755)
def _write_file (self, filename):
path = os.path.join('debian', filename)
assert not self._is_user_file(path)
output = open(path, 'w')
return output
def _is_user_file (self, filename):
path = os.path.join('debian', filename)
if not os.path.exists(path):
return False
input = open(path, 'r')
while 1:
L = input.readline()
if L == "": break
elif L.find(MARKER_STRING) != -1:
return False
return True
# class bdist_dpkg
PRERM_FILE = """#! /bin/sh
# %(marker)s -- remove this line if you edit this file
# prerm script for %(name)s
set -e
PACKAGE=%(name)s
VERSION=%(pyversion)s
LIB="/usr/lib/python$VERSION"
DIRLIST="%(dirlist)s"
case "$1" in
remove|upgrade|failed-upgrade)
for i in $DIRLIST ; do
find $LIB/site-packages/$i -name '*.py[co]' -exec rm \{\} \;
done
;;
*)
echo "prerm called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0
"""
POSTINST_FILE = """#! /bin/sh
# %(marker)s -- remove this line if you edit this file
# postinst script for %(name)s
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
#
# quoting from the policy:
# Any necessary prompting should almost always be confined to the
# post-installation script, and should be protected with a conditional
# so that unnecessary prompting doesn't happen if a package's
# installation fails and the `postinst' is called with `abort-upgrade',
# `abort-remove' or `abort-deconfigure'.
PACKAGE=%(name)s
VERSION=%(pyversion)s
LIB="/usr/lib/python$VERSION"
DIRLIST="%(dirlist)s"
case "$1" in
configure|abort-upgrade|abort-remove|abort-deconfigure)
for i in $DIRLIST ; do
/usr/bin/python$VERSION -O $LIB/compileall.py -q $LIB/site-packages/$i
/usr/bin/python$VERSION $LIB/compileall.py -q $LIB/site-packages/$i
done
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0
"""
RULES_FILE = """#!/usr/bin/make -f
# %(marker)s -- remove this line if you edit this file
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
# This is the debhelper compatibility version to use.
export DH_COMPAT=4
build: build-stamp
/usr/bin/python2.2 setup.py build
build-stamp:
touch build-stamp
configure:
# Do nothing
clean:
dh_testdir
dh_testroot
rm -f build-stamp
-rm -rf build
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
/usr/bin/python%(pyversion)s setup.py install --no-compile --prefix=$(CURDIR)/debian/%(package_name)s/usr
# Build architecture-independent files here.
binary-indep: install
dh_testdir
dh_testroot
dh_installdocs
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
# We have nothing to do by default.
binary: binary-indep
.PHONY: build clean binary-indep binary install
"""
More information about the Python-checkins
mailing list