[kernel] r12457 - in dists/trunk/firmware-nonfree/debian: . bin templates
Bastian Blank
waldi at alioth.debian.org
Fri Nov 28 11:50:43 UTC 2008
Author: waldi
Date: Fri Nov 28 11:50:42 2008
New Revision: 12457
Log:
* debian/bin/gencontrol.py
- Cleanups and updates from linux-2.6.
- Generate license acception prompt.
* debian/changelog: Update.
* debian/templates/preinst.license.in,
debian/templates/templates.license.in: Add.
Added:
dists/trunk/firmware-nonfree/debian/templates/preinst.license.in
dists/trunk/firmware-nonfree/debian/templates/templates.license.in
Modified:
dists/trunk/firmware-nonfree/debian/bin/gencontrol.py
dists/trunk/firmware-nonfree/debian/changelog
Modified: dists/trunk/firmware-nonfree/debian/bin/gencontrol.py
==============================================================================
--- dists/trunk/firmware-nonfree/debian/bin/gencontrol.py (original)
+++ dists/trunk/firmware-nonfree/debian/bin/gencontrol.py Fri Nov 28 11:50:42 2008
@@ -6,46 +6,132 @@
from debian_linux.config import ConfigParser, SchemaItemList
from debian_linux.debian import Package, PackageRelation
+from debian_linux.debian import PackageDescription as PackageDescriptionBase
from debian_linux.gencontrol import Makefile, MakeFlags, PackagesList
-from debian_linux.utils import Templates, TextWrapper
+from debian_linux.utils import SortedDict, TextWrapper
+from debian_linux.utils import Templates as TemplatesBase
-class PackageDescription(object):
- __slots__ = "short", "long"
-
- _wrap = TextWrapper(width = 74, fix_sentence_endings = True).wrap
+class PackageDescription(PackageDescriptionBase):
+ __slots__ = ()
def __init__(self, value = None):
+ self.short = []
self.long = []
if value is not None:
value = value.split("\n", 1)
- self.short = value[0]
+ self.append_short(value[0])
if len(value) > 1:
self.append(value[1])
- else:
- self.short = None
def __str__(self):
- if self.long:
- pars = []
- for t in self.long:
- if isinstance(t, basestring):
- t = self._wrap(t)
- pars.append('\n '.join(t))
- return self.short + '\n ' + '\n .\n '.join(pars)
- else:
- return self.short
-
- def append(self, str):
- str = str.strip()
- if str:
- for t in str.split("\n.\n"):
- self.long.append(t)
+ wrap = TextWrapper(width = 74, fix_sentence_endings = True).wrap
+ short = ', '.join(self.short)
+ long_pars = []
+ for t in self.long:
+ if isinstance(t, basestring):
+ t = wrap(t)
+ long_pars.append('\n '.join(t))
+ long = '\n .\n '.join(long_pars)
+ return short + '\n ' + long
def append_pre(self, l):
self.long.append(l)
+ def extend(self, desc):
+ if isinstance(desc, PackageDescription):
+ self.short.extend(desc.short)
+ self.long.extend(desc.long)
+ elif isinstance(desc, (list, tuple)):
+ for i in desc:
+ self.append(i)
+
Package._fields['Description'] = PackageDescription
+class Template(dict):
+ _fields = SortedDict((
+ ('Template', str),
+ ('Type', str),
+ ('Default', str),
+ ('Description', PackageDescription),
+ ))
+
+ def __setitem__(self, key, value):
+ try:
+ cls = self._fields[key]
+ if not isinstance(value, cls):
+ value = cls(value)
+ except KeyError: pass
+ super(Template, self).__setitem__(key, value)
+
+ def iterkeys(self):
+ keys = set(self.keys())
+ for i in self._fields.iterkeys():
+ if self.has_key(i):
+ keys.remove(i)
+ yield i
+ for i in keys:
+ yield i
+
+ def iteritems(self):
+ for i in self.iterkeys():
+ yield (i, self[i])
+
+ def itervalues(self):
+ for i in self.iterkeys():
+ yield self[i]
+
+
+class Templates(TemplatesBase):
+ # TODO
+ def _read(self, name):
+ prefix, id = name.split('.', 1)
+
+ for dir in self.dirs:
+ filename = "%s/%s.in" % (dir, name)
+ if os.path.exists(filename):
+ f = file(filename)
+ if prefix == 'control':
+ return self._read_control(f)
+ elif prefix == 'templates':
+ return self._read_templates(f)
+ return f.read()
+
+ def _read_templates(self, f):
+ entries = []
+
+ while True:
+ e = Template()
+ last = None
+ lines = []
+ while True:
+ line = f.readline()
+ if not line:
+ break
+ line = line.strip('\n')
+ if not line:
+ break
+ if line[0] in ' \t':
+ if not last:
+ raise ValueError('Continuation line seen before first header')
+ lines.append(line.lstrip())
+ continue
+ if last:
+ e[last] = '\n'.join(lines)
+ i = line.find(':')
+ if i < 0:
+ raise ValueError("Not a header, not a continuation: ``%s''" % line)
+ last = line[:i]
+ lines = [line[i+1:].lstrip()]
+ if last:
+ e[last] = '\n'.join(lines)
+ if not e:
+ break
+
+ entries.append(e)
+
+ return entries
+
+
class GenControl(object):
def __init__(self, kernelversion):
self.config = Config()
@@ -89,7 +175,7 @@
binary = self.templates["control.binary"]
copyright = self.templates["copyright.binary"]
- vars['license'] = file("%s/LICENSE" % package).read()
+ vars['license'] = license = file("%s/LICENSE" % package).read()
file("debian/firmware-%s.copyright" % package, 'w').write(self.substitute(copyright, vars))
@@ -134,6 +220,17 @@
postinst = self.templates['postinst.initramfs-tools']
file("debian/firmware-%s.postinst" % package, 'w').write(self.substitute(postinst, vars))
+ if 'license-accept' in config_entry:
+ preinst = self.templates['preinst.license']
+ preinst_filename = "debian/firmware-%s.preinst" % package
+ file(preinst_filename, 'w').write(self.substitute(preinst, vars))
+
+ templates = self.process_templates(self.templates['templates.license'], vars)
+ license_split = re.split(r'\n\s*\n', license)
+ templates[0]['Description'].extend(license_split)
+ templates_filename = "debian/firmware-%s.templates" % package
+ self.write_rfc822(file(templates_filename, 'w'), templates)
+
packages.extend(packages_binary)
makefile.add('binary-indep', cmds = ["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags])
@@ -148,13 +245,13 @@
dep.append(groups)
e[key] = dep
- def process_description(self, e, in_e, vars):
- in_desc = in_e['Description']
+ def process_description(self, in_desc, vars):
desc = in_desc.__class__()
- desc.short = self.substitute(in_desc.short, vars)
+ for i in in_desc.short:
+ desc.short.append(self.substitute(i, vars))
for i in in_desc.long:
desc.long.append(self.substitute(i, vars))
- e['Description'] = desc
+ return desc
def process_package(self, in_entry, vars):
e = Package()
@@ -162,8 +259,8 @@
if isinstance(value, PackageRelation):
e[key] = in_entry[key]
# self.process_relation(key, e, in_entry, vars)
- elif key == 'Description':
- self.process_description(e, in_entry, vars)
+ elif isinstance(value, PackageDescription):
+ e[key] = self.process_description(value, vars)
elif key[:2] == 'X-':
pass
else:
@@ -176,6 +273,23 @@
entries.append(self.process_package(i, vars))
return entries
+ def process_template(self, in_entry, vars):
+ e = Template()
+ for key, value in in_entry.iteritems():
+ if isinstance(value, PackageDescription):
+ e[key] = self.process_description(value, vars)
+ elif key[:2] == 'X-':
+ pass
+ else:
+ e[key] = self.substitute(value, vars)
+ return e
+
+ def process_templates(self, in_entries, vars):
+ entries = []
+ for i in in_entries:
+ entries.append(self.process_template(i, vars))
+ return entries
+
def substitute(self, s, vars):
if isinstance(s, (list, tuple)):
for i in xrange(len(s)):
@@ -183,7 +297,7 @@
return s
def subst(match):
return vars[match.group(1)]
- return re.sub(r'@([a-z_]+)@', subst, s)
+ return re.sub(r'@([a-z_-]+)@', subst, s)
def write(self, packages, makefile):
self.write_control(packages.itervalues())
Modified: dists/trunk/firmware-nonfree/debian/changelog
==============================================================================
--- dists/trunk/firmware-nonfree/debian/changelog (original)
+++ dists/trunk/firmware-nonfree/debian/changelog Fri Nov 28 11:50:42 2008
@@ -1,3 +1,9 @@
+firmware-nonfree (0.14) UNRELEASED; urgency=low
+
+ * Generate license acceptation prompt, based on sun-java5.
+
+ -- Bastian Blank <waldi at debian.org> Fri, 28 Nov 2008 12:13:54 +0100
+
firmware-nonfree (0.13) unstable; urgency=low
* Make firmware-bnx2 trigger update-initramfs (closes: #494936)
Added: dists/trunk/firmware-nonfree/debian/templates/preinst.license.in
==============================================================================
--- (empty file)
+++ dists/trunk/firmware-nonfree/debian/templates/preinst.license.in Fri Nov 28 11:50:42 2008
@@ -0,0 +1,71 @@
+#!/bin/sh -e
+
+. /usr/share/debconf/confmodule
+db_version 2.0
+db_capb backup
+
+#Valid values are "required" and "no-preseed"
+license_accept=@license-accept@
+
+errmsg()
+{
+ echo >&2 ''
+ echo >&2 "$@"
+ echo >&2 "try 'dpkg-reconfigure debconf' to select a frontend other than noninteractive"
+ echo >&2 ''
+}
+
+db_get firmware- at package@/license/accepted
+if [ "$RET" != "true" ]; then
+ # facilitate backup capability per debconf-devel(7)
+ STATE=1
+ while true; do
+ case "$STATE" in
+ 0) # ensure going back from license presentment is harmless
+ STATE=1
+ continue
+ ;;
+ 1) # present license
+ db_get firmware- at package@/license/accepted
+ if [ "$RET" != true -o "${license_accept}" = "no-preseed" ]; then
+ db_fset firmware- at package@/license/present seen false
+ if ! db_input critical firmware- at package@/license/present ; then
+ errmsg "firmware- at package@ license could not be presented"
+ exit 2
+ fi
+
+ db_fset firmware- at package@/license/accepted seen false
+ if ! db_input critical firmware- at package@/license/accepted ; then
+ errmsg "firmware- at package@ agree question could not be asked"
+ exit 2
+ fi
+ fi
+ ;;
+ 2) # determine users' choice
+ db_get firmware- at package@/license/accepted
+ if [ "$RET" != "true" ]; then
+ # error on decline license (give user chance to back up)
+ db_input critical firmware- at package@/license/error
+ exit 1
+ fi
+ ;;
+ 3) # user has confirmed declining license
+ echo "user did not accept the firmware- at package@ license" >&2
+ exit 1
+ ;;
+ *) # unknown state
+ echo "firmware- at package@ license state unknown: $STATE" >&2
+ exit 2
+ ;;
+ esac
+ if db_go; then
+ STATE=$(($STATE + 1))
+ else
+ STATE=$(($STATE - 1))
+ fi
+ done
+fi
+
+#DEBHELPER#
+
+exit 0
Added: dists/trunk/firmware-nonfree/debian/templates/templates.license.in
==============================================================================
--- (empty file)
+++ dists/trunk/firmware-nonfree/debian/templates/templates.license.in Fri Nov 28 11:50:42 2008
@@ -0,0 +1,20 @@
+Template: firmware- at package@/license/present
+Type: note
+Description: @license-title@
+
+Template: firmware- at package@/license/accepted
+Type: boolean
+Default: false
+Description: Do you agree with the @license-title@ license terms?
+ In order to install this package, you must agree to its license terms, the
+ "@license-title@".
+ Not accepting will cancel the installation.
+
+Template: firmware- at package@/license/error
+Type: error
+Description: Declined @license-title@
+ If you do not agree to the "@license-title@"
+ license terms you cannot install this software.
+ .
+ The installation of this package will be canceled.
+
More information about the Kernel-svn-changes
mailing list