debianize: add support for DEBIAN_BUILT_USING

Message ID 20251010082723.4143284-1-srinuvasan.a@siemens.com
State New
Headers show
Series debianize: add support for DEBIAN_BUILT_USING | expand

Commit Message

srinuvasan.a Oct. 10, 2025, 8:27 a.m. UTC
From: srinuvasan <srinuvasan.a@siemens.com>

Introduce the DEBIAN_BUILT_USING variable to allow setting the Built-Using field in auto-generated Debian control files.

This field declares that a binary package was built using parts of another source package or binaries. With this change,
user can now configure Built-Using directly in debian/control via the DEBIAN_BUILT_USING variable.

Examples:

A package using the source code from the gcc-4.6-source package:
Built-Using: gcc-4.6 (= 4.6.0-11)

A package including binaries from grub2 and loadlin:
Built-Using: grub2 (= 1.99-9), loadlin (= 1.6e-1)

Recipes can now simply define DEBIAN_BUILT_USING to populate this field automatically.

Note: Several upstream packages define this field, for example shim-signed, fwupd, and grub-efi-amd64-bin.

Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
---
 doc/user_manual.md             | 2 ++
 meta/classes/debianize.bbclass | 3 +++
 2 files changed, 5 insertions(+)

Comments

Felix Moessbauer Oct. 10, 2025, 9 a.m. UTC | #1
On Fri, 2025-10-10 at 13:57 +0530, srinuvasan.a@siemens.com wrote:
> From: srinuvasan <srinuvasan.a@siemens.com>
> 
> Introduce the DEBIAN_BUILT_USING variable to allow setting the Built-Using field in auto-generated Debian control files.

Hi, thanks for adding this.
This field is especially important when building a derived version of
an upstream package. Then, the SBOM tooling (like the proposed debsbom)
can pick this up and add the dependency to the original package.

> 
> This field declares that a binary package was built using parts of another source package or binaries. With this change,
> user can now configure Built-Using directly in debian/control via the DEBIAN_BUILT_USING variable.
> 
> Examples:
> 
> A package using the source code from the gcc-4.6-source package:
> Built-Using: gcc-4.6 (= 4.6.0-11)

This example should also go into the documentation.

> 
> A package including binaries from grub2 and loadlin:
> Built-Using: grub2 (= 1.99-9), loadlin (= 1.6e-1)
> 
> Recipes can now simply define DEBIAN_BUILT_USING to populate this field automatically.
> 
> Note: Several upstream packages define this field, for example shim-signed, fwupd, and grub-efi-amd64-bin.
> 
> Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
> ---
>  doc/user_manual.md             | 2 ++
>  meta/classes/debianize.bbclass | 3 +++
>  2 files changed, 5 insertions(+)
> 
> diff --git a/doc/user_manual.md b/doc/user_manual.md
> index 67f91973..313b9a63 100644
> --- a/doc/user_manual.md
> +++ b/doc/user_manual.md
> @@ -1006,6 +1006,8 @@ Other (optional) customization variables include:
>   - `DEBIAN_PROVIDES` - declare a virtual package to satisfy dependencies
>   - `DEBIAN_REPLACES` - to replace a package with another
>   - `DEBIAN_BREAKS` - Packages which break other packages
> + - `DEBIAN_BUILT_USING` - Used when a binary package includes parts of other source packages, f.e: by statically linking their libraries or embedding their
> +    code or data during the build.

Please also add the example (as above) and state the format
"<name> (= <version>)".

>  
>  ### Prebuilt .deb packages from somewhere
>  
> diff --git a/meta/classes/debianize.bbclass b/meta/classes/debianize.bbclass
> index 4989c601..9197bc25 100644
> --- a/meta/classes/debianize.bbclass
> +++ b/meta/classes/debianize.bbclass
> @@ -13,6 +13,7 @@ DEBIAN_PROVIDES ??= ""
>  DEBIAN_REPLACES ??= ""
>  DEBIAN_CONFLICTS ??= ""
>  DEBIAN_BREAKS ??= ""
> +DEBIAN_BUILT_USING ??= ""
>  DEBIAN_MULTI_ARCH ??= "no"
>  DEBIAN_COMPAT ??= "10"
>  DEBIAN_CHANGELOG_TIMESTAMP ??= "3600"
> @@ -74,6 +75,7 @@ deb_create_control[vardeps] += "DEBIANIZE_BUILD_DEPENDS \
>                                  DEBIAN_PROVIDES \
>                                  DEBIAN_REPLACES \
>                                  DEBIAN_BREAKS \
> +                                DEBIAN_BUILT_USING \
>                                  DEBIAN_CONFLICTS"
>  deb_create_control() {
>  	cat << EOF > ${S}/debian/control
> @@ -90,6 +92,7 @@ Depends: ${@ deb_list_beautify(d, 'DEBIAN_DEPENDS')}
>  Provides: ${@ deb_list_beautify(d, 'DEBIAN_PROVIDES')}
>  Replaces: ${@ deb_list_beautify(d, 'DEBIAN_REPLACES')}
>  Breaks: ${@ deb_list_beautify(d, 'DEBIAN_BREAKS')}
> +Built-Using: ${@ deb_list_beautify(d, 'DEBIAN_BUILT_USING')}

We probably want to validate the values, as I'm certainly sure people
will fill in incorrect data. By validating, we ensure (syntactical)
correctness, as well as help people with meaningful error messages.

Felix

>  Conflicts: ${@ deb_list_beautify(d, 'DEBIAN_CONFLICTS')}
>  Multi-Arch: ${DEBIAN_MULTI_ARCH}
>  Description: ${DESCRIPTION}
> -- 
> 2.39.5

Patch

diff --git a/doc/user_manual.md b/doc/user_manual.md
index 67f91973..313b9a63 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -1006,6 +1006,8 @@  Other (optional) customization variables include:
  - `DEBIAN_PROVIDES` - declare a virtual package to satisfy dependencies
  - `DEBIAN_REPLACES` - to replace a package with another
  - `DEBIAN_BREAKS` - Packages which break other packages
+ - `DEBIAN_BUILT_USING` - Used when a binary package includes parts of other source packages, f.e: by statically linking their libraries or embedding their
+    code or data during the build.
 
 ### Prebuilt .deb packages from somewhere
 
diff --git a/meta/classes/debianize.bbclass b/meta/classes/debianize.bbclass
index 4989c601..9197bc25 100644
--- a/meta/classes/debianize.bbclass
+++ b/meta/classes/debianize.bbclass
@@ -13,6 +13,7 @@  DEBIAN_PROVIDES ??= ""
 DEBIAN_REPLACES ??= ""
 DEBIAN_CONFLICTS ??= ""
 DEBIAN_BREAKS ??= ""
+DEBIAN_BUILT_USING ??= ""
 DEBIAN_MULTI_ARCH ??= "no"
 DEBIAN_COMPAT ??= "10"
 DEBIAN_CHANGELOG_TIMESTAMP ??= "3600"
@@ -74,6 +75,7 @@  deb_create_control[vardeps] += "DEBIANIZE_BUILD_DEPENDS \
                                 DEBIAN_PROVIDES \
                                 DEBIAN_REPLACES \
                                 DEBIAN_BREAKS \
+                                DEBIAN_BUILT_USING \
                                 DEBIAN_CONFLICTS"
 deb_create_control() {
 	cat << EOF > ${S}/debian/control
@@ -90,6 +92,7 @@  Depends: ${@ deb_list_beautify(d, 'DEBIAN_DEPENDS')}
 Provides: ${@ deb_list_beautify(d, 'DEBIAN_PROVIDES')}
 Replaces: ${@ deb_list_beautify(d, 'DEBIAN_REPLACES')}
 Breaks: ${@ deb_list_beautify(d, 'DEBIAN_BREAKS')}
+Built-Using: ${@ deb_list_beautify(d, 'DEBIAN_BUILT_USING')}
 Conflicts: ${@ deb_list_beautify(d, 'DEBIAN_CONFLICTS')}
 Multi-Arch: ${DEBIAN_MULTI_ARCH}
 Description: ${DESCRIPTION}