diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-01-04 13:18:03 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-01-05 11:52:15 +0000 |
commit | f520a3039540b1183b1b2bdaaf8b9195995c0187 (patch) | |
tree | b861c7857e09b833fab4c1ef3a7a8b3c9d65e6d2 /meta | |
parent | 424e65627c018b3119050f515b0c7cfb43be5573 (diff) | |
download | openembedded-core-f520a3039540b1183b1b2bdaaf8b9195995c0187.tar.gz |
package: Move pkgdata handling functions to oe.packagedata
To avoid reparsing the bbclass code all the time, move the functions
to the packagedata python function library code which is more efficient.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes-global/package.bbclass | 61 | ||||
-rw-r--r-- | meta/classes-global/package_deb.bbclass | 2 | ||||
-rw-r--r-- | meta/classes-global/package_ipk.bbclass | 2 | ||||
-rw-r--r-- | meta/classes-global/package_rpm.bbclass | 4 | ||||
-rw-r--r-- | meta/classes-recipe/image.bbclass | 7 | ||||
-rw-r--r-- | meta/classes-recipe/populate_sdk_base.bbclass | 9 | ||||
-rw-r--r-- | meta/lib/oe/packagedata.py | 53 |
7 files changed, 69 insertions, 69 deletions
diff --git a/meta/classes-global/package.bbclass b/meta/classes-global/package.bbclass index a31224f243..72e39f6914 100644 --- a/meta/classes-global/package.bbclass +++ b/meta/classes-global/package.bbclass @@ -567,61 +567,6 @@ def copydebugsources(debugsrcdir, sources, d): os.rmdir(p) # -# Package data handling routines -# - -def get_package_mapping (pkg, basepkg, d, depversions=None): - import oe.packagedata - - data = oe.packagedata.read_subpkgdata(pkg, d) - key = "PKG:%s" % pkg - - if key in data: - if bb.data.inherits_class('allarch', d) and bb.data.inherits_class('packagegroup', d) and pkg != data[key]: - bb.error("An allarch packagegroup shouldn't depend on packages which are dynamically renamed (%s to %s)" % (pkg, data[key])) - # Have to avoid undoing the write_extra_pkgs(global_variants...) - if bb.data.inherits_class('allarch', d) and not d.getVar('MULTILIB_VARIANTS') \ - and data[key] == basepkg: - return pkg - if depversions == []: - # Avoid returning a mapping if the renamed package rprovides its original name - rprovkey = "RPROVIDES:%s" % pkg - if rprovkey in data: - if pkg in bb.utils.explode_dep_versions2(data[rprovkey]): - bb.note("%s rprovides %s, not replacing the latter" % (data[key], pkg)) - return pkg - # Do map to rewritten package name - return data[key] - - 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, False) 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))) - - new_depends = {} - deps = bb.utils.explode_dep_versions2(d.getVar(varname) or "") - for depend, depversions in deps.items(): - new_depend = get_package_mapping(depend, pkg, d, depversions) - if depend != new_depend: - bb.note("package name mapping done: %s -> %s" % (depend, new_depend)) - new_depends[new_depend] = deps[depend] - - d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False)) - - #bb.note("%s after: %s" % (varname, d.getVar(varname))) - -# # Used by do_packagedata (and possibly other routines post do_package) # @@ -2244,6 +2189,6 @@ def mapping_rename_hook(d): like debian.bbclass or manual PKG variable name changes """ pkg = d.getVar("PKG") - runtime_mapping_rename("RDEPENDS", pkg, d) - runtime_mapping_rename("RRECOMMENDS", pkg, d) - runtime_mapping_rename("RSUGGESTS", pkg, d) + oe.packagedata.runtime_mapping_rename("RDEPENDS", pkg, d) + oe.packagedata.runtime_mapping_rename("RRECOMMENDS", pkg, d) + oe.packagedata.runtime_mapping_rename("RSUGGESTS", pkg, d) diff --git a/meta/classes-global/package_deb.bbclass b/meta/classes-global/package_deb.bbclass index c3ae7d574d..99e377b455 100644 --- a/meta/classes-global/package_deb.bbclass +++ b/meta/classes-global/package_deb.bbclass @@ -169,7 +169,7 @@ def deb_write_pkg(pkg, d): # more fields - custom_fields_chunk = get_package_additional_metadata("deb", localdata) + custom_fields_chunk = oe.packagedata.get_package_additional_metadata("deb", localdata) if custom_fields_chunk: ctrlfile.write(custom_fields_chunk) ctrlfile.write("\n") diff --git a/meta/classes-global/package_ipk.bbclass b/meta/classes-global/package_ipk.bbclass index 0207ea874b..9b75f5cf1c 100644 --- a/meta/classes-global/package_ipk.bbclass +++ b/meta/classes-global/package_ipk.bbclass @@ -162,7 +162,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 = oe.packagedata.get_package_additional_metadata("ipk", localdata) if custom_fields_chunk is not None: ctrlfile.write(custom_fields_chunk) ctrlfile.write("\n") diff --git a/meta/classes-global/package_rpm.bbclass b/meta/classes-global/package_rpm.bbclass index 7ba73f48e7..16631688b1 100644 --- a/meta/classes-global/package_rpm.bbclass +++ b/meta/classes-global/package_rpm.bbclass @@ -299,7 +299,7 @@ python write_specfile () { srcmaintainer = localdata.getVar('MAINTAINER') srchomepage = localdata.getVar('HOMEPAGE') srcdescription = localdata.getVar('DESCRIPTION') or "." - srccustomtagschunk = get_package_additional_metadata("rpm", localdata) + srccustomtagschunk = oe.packagedata.get_package_additional_metadata("rpm", localdata) srcdepends = d.getVar('DEPENDS') srcrdepends = "" @@ -355,7 +355,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 = oe.packagedata.get_package_additional_metadata("rpm", localdata) translate_vers('RDEPENDS', localdata) translate_vers('RRECOMMENDS', localdata) diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-recipe/image.bbclass index e387645503..a06c9f544d 100644 --- a/meta/classes-recipe/image.bbclass +++ b/meta/classes-recipe/image.bbclass @@ -203,6 +203,7 @@ fakeroot python do_rootfs () { from oe.rootfs import create_rootfs from oe.manifest import create_manifest import logging + import oe.packagedata logger = d.getVar('BB_TASK_LOGGER', False) if logger: @@ -247,9 +248,9 @@ fakeroot python do_rootfs () { # otherwise, the multilib renaming could step in and squash any fixups that # may have occurred. pn = d.getVar('PN') - runtime_mapping_rename("PACKAGE_INSTALL", pn, d) - runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", pn, d) - runtime_mapping_rename("BAD_RECOMMENDATIONS", pn, d) + oe.packagedata.runtime_mapping_rename("PACKAGE_INSTALL", pn, d) + oe.packagedata.runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", pn, d) + oe.packagedata.runtime_mapping_rename("BAD_RECOMMENDATIONS", pn, d) # Generate the initial manifest create_manifest(d) diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass index 917619962c..7cc9535356 100644 --- a/meta/classes-recipe/populate_sdk_base.bbclass +++ b/meta/classes-recipe/populate_sdk_base.bbclass @@ -162,6 +162,7 @@ SDK_POSTPROCESS_COMMAND = " create_sdk_files; check_sdk_sysroots; archive_sdk; $ def populate_sdk_common(d): from oe.sdk import populate_sdk from oe.manifest import create_manifest, Manifest + import oe.packagedata # Handle package exclusions excl_pkgs = (d.getVar("PACKAGE_EXCLUDE") or "").split() @@ -184,13 +185,13 @@ def populate_sdk_common(d): d.setVar("PACKAGE_INSTALL_ATTEMPTONLY", ' '.join(inst_attempt_pkgs)) pn = d.getVar('PN') - runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d) - runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d) + oe.packagedata.runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d) + oe.packagedata.runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d) ld = bb.data.createCopy(d) ld.setVar("PKGDATA_DIR", "${STAGING_DIR}/${SDK_ARCH}-${SDKPKGSUFFIX}${SDK_VENDOR}-${SDK_OS}/pkgdata") - runtime_mapping_rename("TOOLCHAIN_HOST_TASK", pn, ld) - runtime_mapping_rename("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", pn, ld) + oe.packagedata.runtime_mapping_rename("TOOLCHAIN_HOST_TASK", pn, ld) + oe.packagedata.runtime_mapping_rename("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", pn, ld) d.setVar("TOOLCHAIN_HOST_TASK", ld.getVar("TOOLCHAIN_HOST_TASK")) d.setVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", ld.getVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY")) diff --git a/meta/lib/oe/packagedata.py b/meta/lib/oe/packagedata.py index b2ed8b5a3d..ff260f405c 100644 --- a/meta/lib/oe/packagedata.py +++ b/meta/lib/oe/packagedata.py @@ -110,3 +110,56 @@ def recipename(pkg, d): """Return the recipe name for the given binary package name.""" return pkgmap(d).get(pkg) + +def get_package_mapping(pkg, basepkg, d, depversions=None): + import oe.packagedata + + data = oe.packagedata.read_subpkgdata(pkg, d) + key = "PKG:%s" % pkg + + if key in data: + if bb.data.inherits_class('allarch', d) and bb.data.inherits_class('packagegroup', d) and pkg != data[key]: + bb.error("An allarch packagegroup shouldn't depend on packages which are dynamically renamed (%s to %s)" % (pkg, data[key])) + # Have to avoid undoing the write_extra_pkgs(global_variants...) + if bb.data.inherits_class('allarch', d) and not d.getVar('MULTILIB_VARIANTS') \ + and data[key] == basepkg: + return pkg + if depversions == []: + # Avoid returning a mapping if the renamed package rprovides its original name + rprovkey = "RPROVIDES:%s" % pkg + if rprovkey in data: + if pkg in bb.utils.explode_dep_versions2(data[rprovkey]): + bb.note("%s rprovides %s, not replacing the latter" % (data[key], pkg)) + return pkg + # Do map to rewritten package name + return data[key] + + 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, False) 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))) + + new_depends = {} + deps = bb.utils.explode_dep_versions2(d.getVar(varname) or "") + for depend, depversions in deps.items(): + new_depend = get_package_mapping(depend, pkg, d, depversions) + if depend != new_depend: + bb.note("package name mapping done: %s -> %s" % (depend, new_depend)) + new_depends[new_depend] = deps[depend] + + d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False)) + + #bb.note("%s after: %s" % (varname, d.getVar(varname))) + + |