Skip to contentSkip to conversation

allow to define additional packaging metadata

PATCH New Martin Jansa 1 participant 3 messages Jan 18, 2014

lore
Share & tools
lore
#0 lore raw

cover allow to define additional packaging metadata

There is older patchset from Leonid which didn't get any response on list, but is useful and still working.

It's good for extra packaging metadata like flag that device should be restarted after package upgrade and it's packagemanager job to respect them or not.

The following changes since commit 8163854adf87ac42a8f08ee25685d0ce1efb4724:

oe-selftest: separated the SStateBase and SStateTests in different modules (2014-01-16 12:18:44 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib jansa/package-additional
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=jansa/package-additional

Leonid Borisenko (2):
package.bbclass: add getter of additional metadata package_{ipk, deb, rpm}.bbclass: support additional user-defined
metadata

 meta/classes/package.bbclass     | 11 +++++++++++
 meta/classes/package_deb.bbclass |  5 +++++
 meta/classes/package_ipk.bbclass |  5 +++++
 meta/classes/package_rpm.bbclass |  7 +++++++
 4 files changed, 28 insertions(+)
Signature · 1 line
1.8.5.2
#1 lore raw

PATCH 1/2 package.bbclass: add getter of additional metadata

From: Leonid Borisenko <[email protected]>

Two variables are searched for value of additional package metadata:

* PACKAGE_ADD_METADATA_<PKGTYPE>
* PACKAGE_ADD_METADATA

First found variable with defined value wins.

<PKGTYPE> is a parameter of getter and expected to be a distinct name of specific package type. For example: 'DEB' or 'RPM'.

Variable can contain multiple [one-line] metadata fields, separated by literal sequence '\n'. Separator can be redefined through variable flag 'separator'. Getter returns found value with separator replaced with newline character.

As side-effect, searched variables acquired flags 'type' (equals to 'list') and 'separator'.

---
 meta/classes/package.bbclass | 11 +++++++++++
 1 file changed, 11 insertions(+)
meta/classes/package.bbclass +11 -0
index 768047c..561800a 100644
@@ -363,6 +363,17 @@ def get_package_mapping (pkg, basepkg, d):
 
     return pkg
 
+def get_package_additional_metadata (pkg_type, d):
+    base_key = "PACKAGE_ADD_METADATA"
+    for key in ("%s_%s" % (base_key, pkg_type.upper()), base_key):
+        if d.getVar(key) is None:
+            continue
+        d.setVarFlag(key, "type", "list")
+        if d.getVarFlag(key, "separator") is None:
+            d.setVarFlag(key, "separator", "\\n")
+        metadata_fields = [field.strip() for field in oe.data.typed_value(key, d)]
+        return "\n".join(metadata_fields).strip()
+
 def runtime_mapping_rename (varname, pkg, d):
     #bb.note("%s before: %s" % (varname, d.getVar(varname, True)))
 
Signature · 1 line
1.8.5.2
#2 lore raw

PATCH 2/2 package_{ipk, deb, rpm}.bbclass: support additional user-defined metadata

In reply to Martin Jansa

From: Leonid Borisenko <[email protected]>

Additional metadata from user-defined variable is written into control/spec file of binary package.

Three variables are searched for adiitional package metadata:

* PACKAGE_ADD_METADATA_<PKGTYPE>_<PN>
* PACKAGE_ADD_METADATA_<PKGTYPE>
* PACKAGE_ADD_METADATA

First found variable with defined value wins.

<PN> is a package name. <PKGTYPE> is a distinct name of specific package type:

* IPK for .ipk packages
* DEB for .deb packages
* RPM for .rpm packages

Variable can contain multiple [one-line] metadata fields separated by literal sequence '\n'. Separator can be redefined through variable flag 'separator'. In package control/spec file separator is replaced by newline character.

---
 meta/classes/package_deb.bbclass | 5 +++++
 meta/classes/package_ipk.bbclass | 5 +++++
 meta/classes/package_rpm.bbclass | 7 +++++++
 3 files changed, 17 insertions(+)
meta/classes/package_deb.bbclass +5 -0
index 82ff432..5d316aa 100644
@@ -318,6 +318,11 @@ python do_package_deb () {
             raise bb.build.FuncFailed("Missing field for deb generation: %s" % value)
         # more fields
 
+        custom_fields_chunk = get_package_additional_metadata("deb", localdata)
+        if custom_fields_chunk is not None:
+            ctrlfile.write(unicode(custom_fields_chunk))
+            ctrlfile.write("\n")
+
         mapping_rename_hook(localdata)
 
         def debian_cmp_remap(var):
meta/classes/package_ipk.bbclass +5 -0
index e7b2755..2d8e459 100644
@@ -331,6 +331,11 @@ python do_package_ipk () {
             raise bb.build.FuncFailed("Missing field for ipk generation: %s" % value)
         # more fields
 
+        custom_fields_chunk = get_package_additional_metadata("ipk", localdata)
+        if custom_fields_chunk is not None:
+            ctrlfile.write(custom_fields_chunk)
+            ctrlfile.write("\n")
+
         mapping_rename_hook(localdata)
 
         def debian_cmp_remap(var):
meta/classes/package_rpm.bbclass +7 -0
index acbb18d..2d193b7 100644
@@ -737,6 +737,7 @@ python write_specfile () {
     srcmaintainer  = d.getVar('MAINTAINER', True)
     srchomepage    = d.getVar('HOMEPAGE', True)
     srcdescription = d.getVar('DESCRIPTION', True) or "."
+    srccustomtagschunk = get_package_additional_metadata("rpm", d)
 
     srcdepends     = strip_multilib_deps(d.getVar('DEPENDS', True), d)
     srcrdepends    = []
@@ -790,6 +791,7 @@ python write_specfile () {
         splitlicense = (localdata.getVar('LICENSE', True) or "")
         splitsection = (localdata.getVar('SECTION', True) or "")
         splitdescription = (localdata.getVar('DESCRIPTION', True) or ".")
+        splitcustomtagschunk = get_package_additional_metadata("rpm", localdata)
 
         translate_vers('RDEPENDS', localdata)
         translate_vers('RRECOMMENDS', localdata)
@@ -863,6 +865,9 @@ python write_specfile () {
             spec_preamble_bottom.append('License: %s' % splitlicense)
         spec_preamble_bottom.append('Group: %s' % splitsection)
 
+        if srccustomtagschunk != splitcustomtagschunk:
+            spec_preamble_bottom.append(splitcustomtagschunk)
+
         # Replaces == Obsoletes && Provides
         robsoletes = bb.utils.explode_dep_versions2(splitrobsoletes or "")
         rprovides = bb.utils.explode_dep_versions2(splitrprovides or "")
@@ -965,6 +970,8 @@ python write_specfile () {
     spec_preamble_top.append('Group: %s' % srcsection)
     spec_preamble_top.append('Packager: %s' % srcmaintainer)
     spec_preamble_top.append('URL: %s' % srchomepage)
+    if srccustomtagschunk:
+        spec_preamble_top.append(srccustomtagschunk)
     tail_source(d)
 
     # Replaces == Obsoletes && Provides
Signature · 1 line
1.8.5.2