mirror of
https://git.yoctoproject.org/poky
synced 2026-07-16 15:57:04 +00:00
classes/lib: Switch classextend to use new filter API
Currently, class extensions are implmented using shadow variables and
access indirection which is horribly ineffient and ugly.
Switch to using the new bitbake filter API, which allows a translation
of the variable before the expanded value is returned. This allows us
to drop the shadow variable accesses. It also avoids the need to iterate
PACKAGES and make many variable changes since a filter against RDEPENDS
applies to RDEPENDS:${PN} and all of it's other overridden values.
Since data expansion happens at access, it also avoids many of the race
conditions this code has tranditionally been plagued with.
(From OE-Core rev: 24a9858a8927e91d499ee342ed93a0dbb44d83bc)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -112,11 +112,11 @@ python __anonymous () {
|
||||
variant = d.getVar("BBEXTENDVARIANT")
|
||||
import oe.classextend
|
||||
|
||||
clsextend = oe.classextend.ClassExtender(variant, d)
|
||||
|
||||
clsextend.map_depends_variable("PACKAGE_INSTALL")
|
||||
clsextend.map_depends_variable("LINGUAS_INSTALL")
|
||||
clsextend.map_depends_variable("RDEPENDS")
|
||||
prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
|
||||
clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
|
||||
clsextend.set_filter("PACKAGE_INSTALL", deps=False)
|
||||
clsextend.set_filter("LINGUAS_INSTALL", deps=False)
|
||||
clsextend.set_filter("RDEPENDS", deps=True)
|
||||
pinstall = d.getVar("LINGUAS_INSTALL") + " " + d.getVar("PACKAGE_INSTALL")
|
||||
d.setVar("PACKAGE_INSTALL", pinstall)
|
||||
d.setVar("LINGUAS_INSTALL", "")
|
||||
@@ -136,27 +136,28 @@ python multilib_virtclass_handler_postkeyexp () {
|
||||
|
||||
import oe.classextend
|
||||
|
||||
clsextend = oe.classextend.ClassExtender(variant, d)
|
||||
|
||||
if bb.data.inherits_class('image', d):
|
||||
return
|
||||
|
||||
clsextend.map_depends_variable("DEPENDS")
|
||||
clsextend.map_depends_variable("PACKAGE_WRITE_DEPS")
|
||||
clsextend.map_variable("PROVIDES")
|
||||
prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
|
||||
clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
|
||||
|
||||
clsextend.set_filter("DEPENDS", deps=True)
|
||||
clsextend.set_filter("PACKAGE_WRITE_DEPS", deps=False)
|
||||
|
||||
clsextend.set_filter("PROVIDES", deps=False)
|
||||
|
||||
if bb.data.inherits_class('cross-canadian', d):
|
||||
return
|
||||
|
||||
clsextend.rename_packages()
|
||||
clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split())
|
||||
|
||||
clsextend.map_packagevars()
|
||||
clsextend.map_regexp_variable("PACKAGES_DYNAMIC")
|
||||
clsextend.map_variable("INITSCRIPT_PACKAGES")
|
||||
clsextend.map_variable("USERADD_PACKAGES")
|
||||
clsextend.map_variable("SYSTEMD_PACKAGES")
|
||||
clsextend.map_variable("UPDATERCPN")
|
||||
|
||||
clsextend.set_filter("INITSCRIPT_PACKAGES", deps=False)
|
||||
clsextend.set_filter("USERADD_PACKAGES", deps=False)
|
||||
clsextend.set_filter("SYSTEMD_PACKAGES", deps=False)
|
||||
clsextend.set_filter("UPDATERCPN", deps=False)
|
||||
|
||||
reset_alternative_priority(d)
|
||||
}
|
||||
|
||||
@@ -207,30 +207,25 @@ python multilib_virtclass_handler_global () {
|
||||
|
||||
variants = (d.getVar("MULTILIB_VARIANTS") or "").split()
|
||||
|
||||
import oe.classextend
|
||||
clsextends = []
|
||||
for variant in variants:
|
||||
clsextends.append(oe.classextend.ClassExtender(variant, localdata))
|
||||
|
||||
# Process PROVIDES
|
||||
origprovs = provs = localdata.getVar("PROVIDES") or ""
|
||||
for clsextend in clsextends:
|
||||
provs = provs + " " + clsextend.map_variable("PROVIDES", setvar=False)
|
||||
for variant in variants:
|
||||
provs = provs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("PROVIDES") or "", variant, variants)
|
||||
d.setVar("PROVIDES", provs)
|
||||
|
||||
# Process RPROVIDES
|
||||
origrprovs = rprovs = localdata.getVar("RPROVIDES") or ""
|
||||
for clsextend in clsextends:
|
||||
rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES", setvar=False)
|
||||
for variant in variants:
|
||||
rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES") or "", variant, variants)
|
||||
if rprovs.strip():
|
||||
d.setVar("RPROVIDES", rprovs)
|
||||
|
||||
# Process RPROVIDES:${PN}...
|
||||
for pkg in (d.getVar("PACKAGES") or "").split():
|
||||
origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or ""
|
||||
for clsextend in clsextends:
|
||||
rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES:%s" % pkg, setvar=False)
|
||||
rprovs = rprovs + " " + clsextend.extname + "-" + pkg
|
||||
for variant in variants:
|
||||
rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES:%s" % pkg) or "", variant, variants)
|
||||
rprovs = rprovs + " " + variant + "-" + pkg
|
||||
d.setVar("RPROVIDES:%s" % pkg, rprovs)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user