[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