Should there be a test for this functionality? Somewhere in oe-selftest perhaps where various package manager features are tested?

Alex

On Fri, 22 May 2020 at 17:13, Paulo Neve <ptsneves@gmail.com> wrote:
Up to now the user defined metadata was set recipe wide,
meaning all the packages generated in a recipe where the
variable was set would get the same metadata. That is not
always ideal and is counter to the per package control that
is usually available.

Keep support for package agnostic metadata but also add option
to add it to a specific option like:
PACKAGE_ADD_METADATA_${PN}_IPK = "mymeta: myvalue"

Signed-off-by: Paulo Neves <ptsneves@gmail.com>
---
 meta/classes/package.bbclass     | 4 ++--
 meta/classes/package_deb.bbclass | 2 +-
 meta/classes/package_ipk.bbclass | 2 +-
 meta/classes/package_rpm.bbclass | 5 +++--
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 0b5cf47749..1678e0d794 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -637,9 +637,9 @@ def get_package_mapping (pkg, basepkg, d, depversions=None):

     return pkg

-def get_package_additional_metadata (pkg_type, d):
+def get_package_additional_metadata (pkg_type, pkg_name, d):
     base_key = "PACKAGE_ADD_METADATA"
-    for key in ("%s_%s" % (base_key, pkg_type.upper()), base_key):
+    for key in ("%s_%s" % (base_key, pkg_type.upper()), "%s_%s_%s" % (base_key, pkg_name, pkg_type.upper()), base_key):
         if d.getVar(key, False) is None:
             continue
         d.setVarFlag(key, "type", "list")
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass
index 790b26aef2..6ef9c8cb3a 100644
--- a/meta/classes/package_deb.bbclass
+++ b/meta/classes/package_deb.bbclass
@@ -167,7 +167,7 @@ def deb_write_pkg(pkg, d):

         # more fields

-        custom_fields_chunk = get_package_additional_metadata("deb", localdata)
+        custom_fields_chunk = get_package_additional_metadata("deb", pkgname, localdata)
         if custom_fields_chunk:
             ctrlfile.write(custom_fields_chunk)
             ctrlfile.write("\n")
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass
index c008559e4a..f78cec7a70 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes/package_ipk.bbclass
@@ -155,7 +155,7 @@ def ipk_write_pkg(pkg, d):
             else:
                 ctrlfile.write(c % tuple(pullData(fs, localdata)))

-        custom_fields_chunk = get_package_additional_metadata("ipk", localdata)
+        custom_fields_chunk = get_package_additional_metadata("ipk", pkgname, localdata)
         if custom_fields_chunk is not None:
             ctrlfile.write(custom_fields_chunk)
             ctrlfile.write("\n")
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 9145717f98..ab019192da 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -295,7 +295,6 @@ python write_specfile () {
     srcmaintainer  = d.getVar('MAINTAINER')
     srchomepage    = d.getVar('HOMEPAGE')
     srcdescription = d.getVar('DESCRIPTION') or "."
-    srccustomtagschunk = get_package_additional_metadata("rpm", d)

     srcdepends     = d.getVar('DEPENDS')
     srcrdepends    = []
@@ -333,6 +332,8 @@ python write_specfile () {
         pkgname = localdata.getVar('PKG_%s' % pkg)
         if not pkgname:
             pkgname = pkg
+
+        srccustomtagschunk = get_package_additional_metadata("rpm", pkgname, d)
         localdata.setVar('PKG', pkgname)

         localdata.setVar('OVERRIDES', d.getVar("OVERRIDES", False) + ":" + pkg)
@@ -351,7 +352,7 @@ python write_specfile () {
         splitlicense = (localdata.getVar('LICENSE') or "")
         splitsection = (localdata.getVar('SECTION') or "")
         splitdescription = (localdata.getVar('DESCRIPTION') or ".")
-        splitcustomtagschunk = get_package_additional_metadata("rpm", localdata)
+        splitcustomtagschunk = get_package_additional_metadata("rpm", pkgname, localdata)

         translate_vers('RDEPENDS', localdata)
         translate_vers('RRECOMMENDS', localdata)
--
2.20.1