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-modes

  Note 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.

(From OE-Core rev: c8749ed1edcbb544f6656ee5da80f2cf647c405a)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Robert Yang 2017-04-12 02:26:31 -07:00 committed by Richard Purdie
parent 94467d5087
commit 9dc4707035
2 changed files with 6 additions and 25 deletions

View File

@ -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'))

View File

@ -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)