allow to define additional packaging metadata
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
PATCH 2/2 package_{ipk, deb, rpm}.bbclass: support additional user-defined metadata
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
@@ -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
@@ -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
@@ -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
PATCH 1/2 package.bbclass: add getter of additional metadata
In reply to Martin JansaFrom: 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
@@ -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