1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-02 01:19:52 +00:00

bitbake: cooker: Make cooker 'skiplist' per-multiconfig/mc

Previously, the cooker skiplist was shared across multiconfigs
(including default ''). If you had a recipe that was incompatible with
several multiconfigs for different reasons, then the displayed reason
(i.e. the "ERROR: Nothing PROVIDES" and "* was skipped" messages) might
vary across invocations of bitbake. This was caused by the random order
in which recipes are parsed under different multiconfig contexts, with
each skip reason overwriting the previously assigned reason.

I hit this specificially when using COMPATIBLE_MACHINE, but
COMPATIBLE_HOST (or anything using bb.parse.SkipRecipe) would have done it too.

(Bitbake rev: a8578d12dfe5a3c92119bfee224595a392d6b0dd)

Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit c51f01a35ed9a928402eab0899598b5c59602eef)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
Chris Laplante
2024-12-11 12:41:27 -05:00
committed by Steve Sakoman
parent 6b2ad54a43
commit c621ccd93b
4 changed files with 43 additions and 19 deletions
+7 -7
View File
@@ -142,10 +142,10 @@ skipped recipes will also be listed, with a " (skipped)" suffix.
# Ensure we list skipped recipes
# We are largely guessing about PN, PV and the preferred version here,
# but we have no choice since skipped recipes are not fully parsed
skiplist = list(self.tinfoil.cooker.skiplist.keys())
mcspec = 'mc:%s:' % mc
skiplist = list(self.tinfoil.cooker.skiplist_by_mc[mc].keys())
if mc:
skiplist = [s[len(mcspec):] for s in skiplist if s.startswith(mcspec)]
skiplist = [s.removeprefix(f'mc:{mc}:') for s in skiplist]
for fn in skiplist:
recipe_parts = os.path.splitext(os.path.basename(fn))[0].split('_')
@@ -162,7 +162,7 @@ skipped recipes will also be listed, with a " (skipped)" suffix.
def print_item(f, pn, ver, layer, ispref):
if not selected_layer or layer == selected_layer:
if not bare and f in skiplist:
skipped = ' (skipped: %s)' % self.tinfoil.cooker.skiplist[f].skipreason
skipped = ' (skipped: %s)' % self.tinfoil.cooker.skiplist_by_mc[mc][f].skipreason
else:
skipped = ''
if show_filenames:
@@ -301,7 +301,7 @@ Lists recipes with the bbappends that apply to them as subitems.
if self.show_appends_for_pn(pn, cooker_data, args.mc):
appends = True
if not args.pnspec and self.show_appends_for_skipped():
if not args.pnspec and self.show_appends_for_skipped(args.mc):
appends = True
if not appends:
@@ -317,9 +317,9 @@ Lists recipes with the bbappends that apply to them as subitems.
return self.show_appends_output(filenames, best_filename)
def show_appends_for_skipped(self):
def show_appends_for_skipped(self, mc):
filenames = [os.path.basename(f)
for f in self.tinfoil.cooker.skiplist.keys()]
for f in self.tinfoil.cooker.skiplist_by_mc[mc].keys()]
return self.show_appends_output(filenames, None, " (skipped)")
def show_appends_output(self, filenames, best_filename, name_suffix = ''):