diff mbox series

[06/13] UBUNTU: [Packaging] generate: add -di package support

Message ID 20220916114642.2953019-7-apw@canonical.com
State New
Headers show
Series [01/13] UBUNTU: [Packaging] generate-depends: relocate to debian/scripts | expand

Commit Message

Andy Whitcroft Sept. 16, 2022, 11:46 a.m. UTC
Signed-off-by: Andy Whitcroft <apw@canonical.com>
---
 debian/scripts/config.py        | 21 ++++++++++++++++-----
 debian/scripts/generate-control | 18 ++++++++++++++++--
 2 files changed, 32 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/debian/scripts/config.py b/debian/scripts/config.py
index e964e64..34bd08d 100644
--- a/debian/scripts/config.py
+++ b/debian/scripts/config.py
@@ -2,22 +2,30 @@  class Signing:
 
     def __init__(self):
         self._flavour_to_arch = {}
+        self._package_to_flavour_to_arch = {}
         self._arch_flavour_data = {}
 
-    def add(self, arch, stype, binary, flavours):
+    def add(self, arch, stype, binary, flavours, options):
         for flavour in flavours:
-            self._flavour_to_arch.setdefault(flavour, []).append(arch)
             self._arch_flavour_data[(arch, flavour)] = (stype, binary)
+            self._flavour_to_arch.setdefault(flavour, set()).add(arch)
+            self._package_to_flavour_to_arch.setdefault("image", {}).setdefault(flavour, set()).add(arch)
+            if "di" in options:
+                self._package_to_flavour_to_arch.setdefault("di", {}).setdefault(flavour, set()).add(arch)
 
     @property
     def flavour_archs(self):
-        return sorted(self._flavour_to_arch.items())
+        for flavour, archs in sorted(self._flavour_to_arch.items()):
+            yield flavour, sorted(list(archs))
+
+    def package_flavour_archs(self, package):
+        for flavour, archs in sorted(self._package_to_flavour_to_arch.get(package, {}).items()):
+            yield flavour, sorted(list(archs))
 
     @property
     def arch_flavour_data(self):
         return sorted(self._arch_flavour_data.items())
 
-
     @classmethod
     def load(cls, config):
         signing = Signing()
@@ -26,5 +34,8 @@  class Signing:
                 cmd, *args = line.strip().split()
                 if cmd == "sign":
                     arch, stype, binary, *flavours = args
-                    signing.add(arch, stype, binary, flavours)
+                    options = []
+                    while flavours[-1].startswith("--"):
+                        options.append(flavours.pop()[2:])
+                    signing.add(arch, stype, binary, flavours, options)
         return signing
diff --git a/debian/scripts/generate-control b/debian/scripts/generate-control
index 6fd68f6..b9b2f48 100755
--- a/debian/scripts/generate-control
+++ b/debian/scripts/generate-control
@@ -20,7 +20,7 @@  with open("debian/control.stub") as tfd, open("debian/control", "w") as cfd:
         else:
             print(line, end='', file=cfd)
 
-    for flavour, archs in signing.flavour_archs:
+    for flavour, archs in signing.package_flavour_archs("image"):
         print(dedent(f"""\
 
             Package: linux-image-{abi_version}-{flavour}
@@ -35,10 +35,24 @@  with open("debian/control.stub") as tfd, open("debian/control", "w") as cfd:
              A kernel image for {flavour}.  This version of it is signed with
              Canonical's signing key.
             """).rstrip(), file=cfd)
+    for flavour, archs in signing.package_flavour_archs("di"):
+        print(dedent(f"""\
 
+            Package: kernel-signed-image-{abi_version}-{flavour}-di
+            Package-Type: udeb
+            Section: debian-installer
+            Priority: extra
+            Provides: kernel-signed-image
+            Architecture: {" ".join(archs)}
+            Built-Using: {unsigned_name} (= {unsigned_version})
+            Description: Signed kernel image generic for the Debian installer
+             A kernel image for {flavour}.  This version of it is signed with
+             Canonical's UEFI signing key.  It is intended for the Debian installer,
+             it does _not_ provide a usable kernel for your full Debian system.
+        """).rstrip(), file=cfd)
     # XXX: all dbgsym packages _must_ be at the end of debian/control else the
     # build will hang forever on the builder.
-    for flavour, archs in signing.flavour_archs:
+    for flavour, archs in signing.package_flavour_archs("image"):
         print(dedent(f"""\
 
             Package: linux-image-{abi_version}-{flavour}-dbgsym