mirror of
https://git.yoctoproject.org/poky
synced 2026-03-06 15:29:40 +01:00
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. (From OE-Core rev: f520a3039540b1183b1b2bdaaf8b9195995c0187) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -566,61 +566,6 @@ def copydebugsources(debugsrcdir, sources, d):
|
||||
if os.path.exists(p) and not os.listdir(p):
|
||||
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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
@@ -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)))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user