diff options
author | Robert Yang <liezhi.yang@windriver.com> | 2017-04-12 02:26:31 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-13 10:54:09 +0100 |
commit | 9dc4707035e50381d70e5b63f0371534b4faa81c (patch) | |
tree | 76a0cddd59f777418a0e198ed9f4973d5011c6b9 /meta/classes | |
parent | 94467d5087ca3b13e7baac670af107550701b333 (diff) | |
download | poky-9dc4707035e50381d70e5b63f0371534b4faa81c.tar.gz |
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>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/blacklist.bbclass | 25 | ||||
-rw-r--r-- | meta/classes/multilib.bbclass | 6 |
2 files changed, 6 insertions, 25 deletions
diff --git a/meta/classes/blacklist.bbclass b/meta/classes/blacklist.bbclass index 3413a5b0aa..e58564c34e 100644 --- a/meta/classes/blacklist.bbclass +++ b/meta/classes/blacklist.bbclass | |||
@@ -12,31 +12,6 @@ | |||
12 | # PNBLACKLIST[pn] = "message" | 12 | # PNBLACKLIST[pn] = "message" |
13 | # | 13 | # |
14 | 14 | ||
15 | # Cope with PNBLACKLIST flags for multilib case | ||
16 | addhandler blacklist_multilib_eventhandler | ||
17 | blacklist_multilib_eventhandler[eventmask] = "bb.event.ConfigParsed" | ||
18 | python blacklist_multilib_eventhandler() { | ||
19 | multilibs = e.data.getVar('MULTILIBS') | ||
20 | if not multilibs: | ||
21 | return | ||
22 | |||
23 | # this block has been copied from base.bbclass so keep it in sync | ||
24 | prefixes = [] | ||
25 | for ext in multilibs.split(): | ||
26 | eext = ext.split(':') | ||
27 | if len(eext) > 1 and eext[0] == 'multilib': | ||
28 | prefixes.append(eext[1]) | ||
29 | |||
30 | blacklists = e.data.getVarFlags('PNBLACKLIST') or {} | ||
31 | for pkg, reason in blacklists.items(): | ||
32 | if pkg.endswith(("-native", "-crosssdk")) or pkg.startswith(("nativesdk-", "virtual/nativesdk-")) or 'cross-canadian' in pkg: | ||
33 | continue | ||
34 | for p in prefixes: | ||
35 | newpkg = p + "-" + pkg | ||
36 | if not e.data.getVarFlag('PNBLACKLIST', newpkg): | ||
37 | e.data.setVarFlag('PNBLACKLIST', newpkg, reason) | ||
38 | } | ||
39 | |||
40 | python () { | 15 | python () { |
41 | blacklist = d.getVarFlag('PNBLACKLIST', d.getVar('PN')) | 16 | blacklist = d.getVarFlag('PNBLACKLIST', d.getVar('PN')) |
42 | 17 | ||
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass index 401e0c2cc0..ab04597f93 100644 --- a/meta/classes/multilib.bbclass +++ b/meta/classes/multilib.bbclass | |||
@@ -53,6 +53,12 @@ python multilib_virtclass_handler () { | |||
53 | 53 | ||
54 | override = ":virtclass-multilib-" + variant | 54 | override = ":virtclass-multilib-" + variant |
55 | 55 | ||
56 | blacklist = e.data.getVarFlag('PNBLACKLIST', e.data.getVar('PN')) | ||
57 | if blacklist: | ||
58 | pn_new = variant + "-" + e.data.getVar('PN') | ||
59 | if not e.data.getVarFlag('PNBLACKLIST', pn_new): | ||
60 | e.data.setVarFlag('PNBLACKLIST', pn_new, blacklist) | ||
61 | |||
56 | e.data.setVar("MLPREFIX", variant + "-") | 62 | e.data.setVar("MLPREFIX", variant + "-") |
57 | e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) | 63 | e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) |
58 | e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) | 64 | e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) |