diff mbox series

[5/9] UBUNTU: [Packaging] parameterise ancillary packages

Message ID 20220914135455.2685644-6-apw@canonical.com
State New
Headers show
Series [1/9] UBUNTU: [Packaging] fix our dh_clean override | expand

Commit Message

Andy Whitcroft Sept. 14, 2022, 1:54 p.m. UTC
Now that our ancillaries are "direct" ancillaries we need to ensure they
are full source packages at our version.  Copy in anything common at
clean time.  Generate an appropriate changelog with matching versions.

Signed-off-by: Andy Whitcroft <apw@canonical.com>
---
 debian/rules.in                         |  1 +
 debian/scripts/gen-rules.lrm            |  4 ++
 debian/scripts/parameterise-ancillaries | 54 +++++++++++++++++++++++++
 3 files changed, 59 insertions(+)
 create mode 100755 debian/scripts/parameterise-ancillaries

Comments

Stefan Bader Sept. 23, 2022, 1:20 p.m. UTC | #1
On 14.09.22 15:54, Andy Whitcroft wrote:
> Now that our ancillaries are "direct" ancillaries we need to ensure they
> are full source packages at our version.  Copy in anything common at
> clean time.  Generate an appropriate changelog with matching versions.
> 
> Signed-off-by: Andy Whitcroft <apw@canonical.com>
> ---
>   debian/rules.in                         |  1 +
>   debian/scripts/gen-rules.lrm            |  4 ++
>   debian/scripts/parameterise-ancillaries | 54 +++++++++++++++++++++++++
>   3 files changed, 59 insertions(+)
>   create mode 100755 debian/scripts/parameterise-ancillaries
> 
> diff --git a/debian/rules.in b/debian/rules.in
> index ef03657..7888a14 100755
> --- a/debian/rules.in
> +++ b/debian/rules.in
> @@ -67,6 +67,7 @@ debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
>   clean:: pre-clean
>   	rm -f debian/scripts/fix-filenames
>   	rm -rf $(dkms_dir)
> +	./debian/scripts/parameterise-ancillaries $(src_genr_package) $(src_sigs_package)
>   	dh_clean
>   
>   %:
> diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm
> index 60be0a8..f9f5eca 100755
> --- a/debian/scripts/gen-rules.lrm
> +++ b/debian/scripts/gen-rules.lrm
> @@ -23,6 +23,8 @@ src_main_package=$(echo "${src_package}" | sed -e 's/-restricted-modules//')
>   src_main_version=$(echo ${src_version} | sed -e 's/+[0-9][0-9\.]*$//')
>   
>   # linux-restricted-generate/5.8.0-41.46[+1]
> +src_genr_package=$(echo "${src_package}" | sed -e 's/-restricted-modules/-restricted-generate/')
> +src_genr_version=${src_version}
>   
>   # linux-restricted-signatures/5.8.0-41.46[+1]
>   src_sigs_package=$(echo "${src_package}" | sed -e 's/-restricted-modules/-restricted-signatures/')
> @@ -47,6 +49,8 @@ src_abi = ${src_abi}
>   src_series = ${src_series}
>   src_main_package = ${src_main_package}
>   src_main_version = ${src_main_version}
> +src_genr_package = ${src_genr_package}
> +src_genr_version = ${src_genr_version}
>   src_sigs_package = ${src_sigs_package}
>   src_sigs_version = ${src_sigs_version}
>   
> diff --git a/debian/scripts/parameterise-ancillaries b/debian/scripts/parameterise-ancillaries
> new file mode 100755
> index 0000000..7175688
> --- /dev/null
> +++ b/debian/scripts/parameterise-ancillaries
> @@ -0,0 +1,54 @@
> +#!/usr/bin/python3
> +
> +import os
> +import sys
> +import json
> +from shutil import copy
> +from textwrap import dedent, indent
> +
> +
> +def build_changelog(outd, source_name):
> +    # Convert debian/changelog: fix the package name in the first stanza.
> +    in_changelog = os.path.join("debian", "changelog")
> +    out_changelog = os.path.join(outd, "debian", "changelog")
> +    with open(in_changelog) as ifd, open(out_changelog, "w") as ofd:
> +        first = True
> +        stanza = 0
> +        for line in ifd:
> +            if line[0] not in (" ", "\n"):
> +                stanza += 1
> +                first = True
> +                if stanza == 3:
> +                    break

To me this reads as if not converting the changelog but stopping after the first 
section. So the target changelog consists only of one section.

-Stefan

> +            if first:
> +                bits = line.split()
> +                bits[0] = source_name
> +                print(" ".join(bits), file=ofd)
> +                first = False
> +            else:
> +                print(line, end="", file=ofd)
> +
> +# Build one of the ancillaries.
> +def build_ancillary(package):
> +    outd = os.path.join("debian", "ancillary", package)
> +
> +    os.makedirs(os.path.join(outd, "debian"), exist_ok=True)
> +    build_changelog(outd, package)
> +    for file in (
> +        os.path.join("debian", "rules"),
> +        os.path.join("debian", "compat"),
> +        os.path.join("debian", "control.common"),
> +        os.path.join("debian", "copyright"),
> +        os.path.join("debian", "source", "format"),
> +        os.path.join("debian", "source", "options"),
> +        os.path.join("debian", "dkms-versions"),
> +        os.path.join("debian", "package.config"),
> +    ):
> +        os.makedirs(os.path.dirname(os.path.join(outd, file)), exist_ok=True)
> +        copy(file, os.path.join(outd, file))
> +
> +
> +(gen_pkg, sig_pkg) = sys.argv[1:]
> +
> +build_ancillary(gen_pkg)
> +build_ancillary(sig_pkg)
Cory Todd Sept. 27, 2022, 2:18 p.m. UTC | #2
On Wed, Sep 14, 2022 at 02:54:51PM +0100, Andy Whitcroft wrote:
> Now that our ancillaries are "direct" ancillaries we need to ensure they
> are full source packages at our version.  Copy in anything common at
> clean time.  Generate an appropriate changelog with matching versions.
> 
> Signed-off-by: Andy Whitcroft <apw@canonical.com>
> ---
>  debian/rules.in                         |  1 +
>  debian/scripts/gen-rules.lrm            |  4 ++
>  debian/scripts/parameterise-ancillaries | 54 +++++++++++++++++++++++++
>  3 files changed, 59 insertions(+)
>  create mode 100755 debian/scripts/parameterise-ancillaries
> 
> diff --git a/debian/rules.in b/debian/rules.in
> index ef03657..7888a14 100755
> --- a/debian/rules.in
> +++ b/debian/rules.in
> @@ -67,6 +67,7 @@ debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
>  clean:: pre-clean
>  	rm -f debian/scripts/fix-filenames
>  	rm -rf $(dkms_dir)
> +	./debian/scripts/parameterise-ancillaries $(src_genr_package) $(src_sigs_package)
>  	dh_clean

Generating files during a clean stage feels unusual to me. I understand
that we want them be fully formed and intact packages but maybe I'm not
grasping why that must be done at this specific step. Would
dh_auto_configure or dh_auto_build be too late in the process to useful?

- corytodd
diff mbox series

Patch

diff --git a/debian/rules.in b/debian/rules.in
index ef03657..7888a14 100755
--- a/debian/rules.in
+++ b/debian/rules.in
@@ -67,6 +67,7 @@  debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
 clean:: pre-clean
 	rm -f debian/scripts/fix-filenames
 	rm -rf $(dkms_dir)
+	./debian/scripts/parameterise-ancillaries $(src_genr_package) $(src_sigs_package)
 	dh_clean
 
 %:
diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm
index 60be0a8..f9f5eca 100755
--- a/debian/scripts/gen-rules.lrm
+++ b/debian/scripts/gen-rules.lrm
@@ -23,6 +23,8 @@  src_main_package=$(echo "${src_package}" | sed -e 's/-restricted-modules//')
 src_main_version=$(echo ${src_version} | sed -e 's/+[0-9][0-9\.]*$//')
 
 # linux-restricted-generate/5.8.0-41.46[+1]
+src_genr_package=$(echo "${src_package}" | sed -e 's/-restricted-modules/-restricted-generate/')
+src_genr_version=${src_version}
 
 # linux-restricted-signatures/5.8.0-41.46[+1]
 src_sigs_package=$(echo "${src_package}" | sed -e 's/-restricted-modules/-restricted-signatures/')
@@ -47,6 +49,8 @@  src_abi = ${src_abi}
 src_series = ${src_series}
 src_main_package = ${src_main_package}
 src_main_version = ${src_main_version}
+src_genr_package = ${src_genr_package}
+src_genr_version = ${src_genr_version}
 src_sigs_package = ${src_sigs_package}
 src_sigs_version = ${src_sigs_version}
 
diff --git a/debian/scripts/parameterise-ancillaries b/debian/scripts/parameterise-ancillaries
new file mode 100755
index 0000000..7175688
--- /dev/null
+++ b/debian/scripts/parameterise-ancillaries
@@ -0,0 +1,54 @@ 
+#!/usr/bin/python3
+
+import os
+import sys
+import json
+from shutil import copy
+from textwrap import dedent, indent
+
+
+def build_changelog(outd, source_name):
+    # Convert debian/changelog: fix the package name in the first stanza.
+    in_changelog = os.path.join("debian", "changelog")
+    out_changelog = os.path.join(outd, "debian", "changelog")
+    with open(in_changelog) as ifd, open(out_changelog, "w") as ofd:
+        first = True
+        stanza = 0
+        for line in ifd:
+            if line[0] not in (" ", "\n"):
+                stanza += 1
+                first = True
+                if stanza == 3:
+                    break
+            if first:
+                bits = line.split()
+                bits[0] = source_name
+                print(" ".join(bits), file=ofd)
+                first = False
+            else:
+                print(line, end="", file=ofd)
+
+# Build one of the ancillaries.
+def build_ancillary(package):
+    outd = os.path.join("debian", "ancillary", package)
+
+    os.makedirs(os.path.join(outd, "debian"), exist_ok=True)
+    build_changelog(outd, package)
+    for file in (
+        os.path.join("debian", "rules"),
+        os.path.join("debian", "compat"),
+        os.path.join("debian", "control.common"),
+        os.path.join("debian", "copyright"),
+        os.path.join("debian", "source", "format"),
+        os.path.join("debian", "source", "options"),
+        os.path.join("debian", "dkms-versions"),
+        os.path.join("debian", "package.config"),
+    ):
+        os.makedirs(os.path.dirname(os.path.join(outd, file)), exist_ok=True)
+        copy(file, os.path.join(outd, file))
+
+
+(gen_pkg, sig_pkg) = sys.argv[1:]
+
+build_ancillary(gen_pkg)
+build_ancillary(sig_pkg)