blacklist.bbclass: fix for multilib
cover blacklist.bbclass: fix for multilib
The following changes since commit 210c518ba8f8d6ec6e9d34e0df8b963a3b2e0593:
ptest-runner: Upgrade to minor version 2.0.2 (2017-04-11 18:09:21 +0100)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib rbt/blacklist
http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/blacklist
Robert Yang (1):
blacklist.bbclass: fix for multilib
meta/classes/blacklist.bbclass | 25 ------------------------- meta/classes/multilib.bbclass | 6 ++++++ 2 files changed, 6 insertions(+), 25 deletions(-)
Signature · 1 line
2.11.0.rc2.dirty
PATCH 1/1 blacklist.bbclass: fix for multilib
* Fixed:
The netmap has been blacklisted in meta-networking/recipes-kernel/netmap/netmap_git.bb, but lib32-netmap still can be built (suppose it doesn't depend on another broken recipe netmap-modules, it is a little complicated, will talk below):
$ bitbake lib32-netmap
This is because of the old code masks on bb.event.ConfigParsed which can only handle global blacklist, netmap sets blacklist in the recipe, so it can't be handled, and lib32-netmap can be built. which was incorrect:
blacklist_multilib_eventhandler[eventmask] = "bb.event.ConfigParsed"
Move multilib code into multilib.bbclass can fix the problem easily:
$ bitbake lib32-netmap
ERROR: Nothing PROVIDES 'lib32-netmap'
ERROR: lib32-netmap was skipped: Recipe is blacklisted: BROKEN: <foo>* Not fixed
Another problem is netmap-modules has also been blacklisted in the recipe, and the recipe inherits module.bbclass, so multilib.bbclass doesn't handle it as the code shows:
# There should only be one kernel in multilib configs
# We also skip multilib setup for module packages.
provides = (e.data.getVar("PROVIDES") or "").split()
if "virtual/kernel" in provides or bb.data.inherits_class('module-base', e.data):
raise bb.parse.SkipPackage("We shouldn't have multilib variants for the kernel")
And netmap-modules provides lib32-netmap-modules which is handled in multilib_global.bbclass, so bitbake lib32-netmap-modules can't show the blacklist message:
$ bitbake netmap-modules ERROR: Nothing PROVIDES 'netmap-modules' ERROR: netmap-modules was skipped: Recipe is blacklisted: BROKEN: <foo> ERROR: netmap-modules was skipped: We shouldn't have multilib variants for the kernel
$ bitbake lib32-netmap-modules
ERROR: Nothing PROVIDES 'lib32-netmap-modules'. Close matches:
netmap-modules
netmap-modules
lib32-fbset-modesNote the different messages between netmap-modules and lib32-netmap-modules. This is because multilib.bbclass doesn't handle the "module" recipe so there is no PN called lib32-netmap-modules, therefore blacklist.bbclass can't handle it.
Note, there are two "netmap-modules" which needs to be fixed later.
--- meta/classes/blacklist.bbclass | 25 ------------------------- meta/classes/multilib.bbclass | 6 ++++++ 2 files changed, 6 insertions(+), 25 deletions(-)
meta/classes/blacklist.bbclass +0 -25
@@ -12,31 +12,6 @@ # PNBLACKLIST[pn] = "message" # -# Cope with PNBLACKLIST flags for multilib case -addhandler blacklist_multilib_eventhandler -blacklist_multilib_eventhandler[eventmask] = "bb.event.ConfigParsed" -python blacklist_multilib_eventhandler() { - multilibs = e.data.getVar('MULTILIBS') - if not multilibs: - return - - # this block has been copied from base.bbclass so keep it in sync - prefixes = [] - for ext in multilibs.split(): - eext = ext.split(':') - if len(eext) > 1 and eext[0] == 'multilib': - prefixes.append(eext[1]) - - blacklists = e.data.getVarFlags('PNBLACKLIST') or {} - for pkg, reason in blacklists.items(): - if pkg.endswith(("-native", "-crosssdk")) or pkg.startswith(("nativesdk-", "virtual/nativesdk-")) or 'cross-canadian' in pkg: - continue - for p in prefixes: - newpkg = p + "-" + pkg - if not e.data.getVarFlag('PNBLACKLIST', newpkg): - e.data.setVarFlag('PNBLACKLIST', newpkg, reason) -} - python () { blacklist = d.getVarFlag('PNBLACKLIST', d.getVar('PN'))
meta/classes/multilib.bbclass +6 -0
@@ -53,6 +53,12 @@ python multilib_virtclass_handler () { override = ":virtclass-multilib-" + variant + blacklist = e.data.getVarFlag('PNBLACKLIST', e.data.getVar('PN')) + if blacklist: + pn_new = variant + "-" + e.data.getVar('PN') + if not e.data.getVarFlag('PNBLACKLIST', pn_new): + e.data.setVarFlag('PNBLACKLIST', pn_new, blacklist) + e.data.setVar("MLPREFIX", variant + "-") e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
Signature · 1 line
2.11.0.rc2.dirty