diff options
author | Chris Laplante <chris.laplante@agilent.com> | 2025-01-07 16:54:03 -0500 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2025-01-24 07:59:38 -0800 |
commit | 7aa8128bf1744dc0dd4c68065d19e12c86443c46 (patch) | |
tree | 13a67d6420ee51cfbb759accbc5f6d745fcfa66a /bitbake/lib/bb/cooker.py | |
parent | c1ed07ecde3eea6dee3f7f0c7862ca85858e840d (diff) | |
download | poky-7aa8128bf1744dc0dd4c68065d19e12c86443c46.tar.gz |
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: 7dde14582bfd104c6da26e3f5ecf2ef37a1494ce)
Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 1cb3e189f4..6fce19b464 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -134,7 +134,8 @@ class BBCooker: | |||
134 | self.baseconfig_valid = False | 134 | self.baseconfig_valid = False |
135 | self.parsecache_valid = False | 135 | self.parsecache_valid = False |
136 | self.eventlog = None | 136 | self.eventlog = None |
137 | self.skiplist = {} | 137 | # The skiplists, one per multiconfig |
138 | self.skiplist_by_mc = defaultdict(dict) | ||
138 | self.featureset = CookerFeatures() | 139 | self.featureset = CookerFeatures() |
139 | if featureSet: | 140 | if featureSet: |
140 | for f in featureSet: | 141 | for f in featureSet: |
@@ -612,8 +613,8 @@ class BBCooker: | |||
612 | localdata = {} | 613 | localdata = {} |
613 | 614 | ||
614 | for mc in self.multiconfigs: | 615 | for mc in self.multiconfigs: |
615 | taskdata[mc] = bb.taskdata.TaskData(halt, skiplist=self.skiplist, allowincomplete=allowincomplete) | 616 | taskdata[mc] = bb.taskdata.TaskData(halt, skiplist=self.skiplist_by_mc[mc], allowincomplete=allowincomplete) |
616 | localdata[mc] = data.createCopy(self.databuilder.mcdata[mc]) | 617 | localdata[mc] = bb.data.createCopy(self.databuilder.mcdata[mc]) |
617 | bb.data.expandKeys(localdata[mc]) | 618 | bb.data.expandKeys(localdata[mc]) |
618 | 619 | ||
619 | current = 0 | 620 | current = 0 |
@@ -933,7 +934,7 @@ class BBCooker: | |||
933 | for mc in self.multiconfigs: | 934 | for mc in self.multiconfigs: |
934 | # First get list of recipes, including skipped | 935 | # First get list of recipes, including skipped |
935 | recipefns = list(self.recipecaches[mc].pkg_fn.keys()) | 936 | recipefns = list(self.recipecaches[mc].pkg_fn.keys()) |
936 | recipefns.extend(self.skiplist.keys()) | 937 | recipefns.extend(self.skiplist_by_mc[mc].keys()) |
937 | 938 | ||
938 | # Work out list of bbappends that have been applied | 939 | # Work out list of bbappends that have been applied |
939 | applied_appends = [] | 940 | applied_appends = [] |
@@ -2358,7 +2359,7 @@ class CookerParser(object): | |||
2358 | for virtualfn, info_array in result: | 2359 | for virtualfn, info_array in result: |
2359 | if info_array[0].skipped: | 2360 | if info_array[0].skipped: |
2360 | self.skipped += 1 | 2361 | self.skipped += 1 |
2361 | self.cooker.skiplist[virtualfn] = SkippedPackage(info_array[0]) | 2362 | self.cooker.skiplist_by_mc[mc][virtualfn] = SkippedPackage(info_array[0]) |
2362 | self.bb_caches[mc].add_info(virtualfn, info_array, self.cooker.recipecaches[mc], | 2363 | self.bb_caches[mc].add_info(virtualfn, info_array, self.cooker.recipecaches[mc], |
2363 | parsed=parsed, watcher = self.cooker.add_filewatch) | 2364 | parsed=parsed, watcher = self.cooker.add_filewatch) |
2364 | return True | 2365 | return True |