summaryrefslogtreecommitdiffstats
path: root/meta/classes/multilib_global.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2025-06-10 15:53:27 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-08-12 10:05:11 +0100
commitbdb5e99854c76f31d5463f55a657d40098a0743a (patch)
tree1b77d9e688cc1ab0002695b84a50e80ceda37494 /meta/classes/multilib_global.bbclass
parent7c9a1f20f1f07d8a946f300878e680103d70ac84 (diff)
downloadpoky-bdb5e99854c76f31d5463f55a657d40098a0743a.tar.gz
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>
Diffstat (limited to 'meta/classes/multilib_global.bbclass')
-rw-r--r--meta/classes/multilib_global.bbclass19
1 files changed, 7 insertions, 12 deletions
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index c1d6de100c..d9372d9ed1 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -207,30 +207,25 @@ python multilib_virtclass_handler_global () {
207 207
208 variants = (d.getVar("MULTILIB_VARIANTS") or "").split() 208 variants = (d.getVar("MULTILIB_VARIANTS") or "").split()
209 209
210 import oe.classextend
211 clsextends = []
212 for variant in variants:
213 clsextends.append(oe.classextend.ClassExtender(variant, localdata))
214
215 # Process PROVIDES 210 # Process PROVIDES
216 origprovs = provs = localdata.getVar("PROVIDES") or "" 211 origprovs = provs = localdata.getVar("PROVIDES") or ""
217 for clsextend in clsextends: 212 for variant in variants:
218 provs = provs + " " + clsextend.map_variable("PROVIDES", setvar=False) 213 provs = provs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("PROVIDES") or "", variant, variants)
219 d.setVar("PROVIDES", provs) 214 d.setVar("PROVIDES", provs)
220 215
221 # Process RPROVIDES 216 # Process RPROVIDES
222 origrprovs = rprovs = localdata.getVar("RPROVIDES") or "" 217 origrprovs = rprovs = localdata.getVar("RPROVIDES") or ""
223 for clsextend in clsextends: 218 for variant in variants:
224 rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES", setvar=False) 219 rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES") or "", variant, variants)
225 if rprovs.strip(): 220 if rprovs.strip():
226 d.setVar("RPROVIDES", rprovs) 221 d.setVar("RPROVIDES", rprovs)
227 222
228 # Process RPROVIDES:${PN}... 223 # Process RPROVIDES:${PN}...
229 for pkg in (d.getVar("PACKAGES") or "").split(): 224 for pkg in (d.getVar("PACKAGES") or "").split():
230 origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or "" 225 origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or ""
231 for clsextend in clsextends: 226 for variant in variants:
232 rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES:%s" % pkg, setvar=False) 227 rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES:%s" % pkg) or "", variant, variants)
233 rprovs = rprovs + " " + clsextend.extname + "-" + pkg 228 rprovs = rprovs + " " + variant + "-" + pkg
234 d.setVar("RPROVIDES:%s" % pkg, rprovs) 229 d.setVar("RPROVIDES:%s" % pkg, rprovs)
235} 230}
236 231