diff options
author | Chen Qi <Qi.Chen@windriver.com> | 2025-02-24 22:48:53 -0800 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2025-03-08 06:22:56 -0800 |
commit | 3646348c982f2dbb0d1a47896ca82142e208bdb9 (patch) | |
tree | 59d75f7811a4885a93ee7f5c9586a1153f49cb6e | |
parent | 133ac79e70478bc086363042278f99b26700af23 (diff) | |
download | poky-3646348c982f2dbb0d1a47896ca82142e208bdb9.tar.gz |
bitbake: data_smart.py: clear expand_cache in _setvar_update_overridevars
At the end of this function, self.overrides is cleared, which means we'll
construct a new self.overrides after this call. And a new self.overrides
will give out different expand_cache, so the old expand_cache should also
be cleared to avoid any wrong value.
Currently, there's a problem revealed by recent recipe specific virtual
provider patch. If we enable multilib and set "OVERRIDES:prepend" in local.conf,
things don't work.
Here's the error message:
ERROR: Nothing PROVIDES 'lib32-gcc-cross-x86_64'
Below are reproduce steps:
1. Add in local.conf the following lines:
MACHINE ?= "qemux86-64"
require conf/multilib.conf
MULTILIBS ?= "multilib:lib32"
DEFAULTTUNE:virtclass-multilib-lib32 ?= "core2-32"
OVERRIDES:prepend = "some-override:"
(Note that using :append and :remove also reproduces the issue.)
2. bitbake -n lib32-sysstat
(bitbake -n core-image-minimal also reproduces the issue)
The expandWithRefs calls getVar, which fills expand_cache. So when setting
OVERRIDES:prepend, this will fill the expand_cache. When overridevars are updated,
if we don't clear expand_cache, we'll retrieve wrong values.
Previously, things happened to work because there's a call to expand
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc, which in turn expands
TARGET_VENDOR. Now what we expand is PREFERRED_PROVIDER_ virtual/cross-cc,
so the problem is revealed.
(Bitbake rev: 7375d32e8c1af20c51abec4eb3b072b4ca58b239)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 5975884ec4..7b67127c06 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -635,6 +635,7 @@ class DataSmart(MutableMapping): | |||
635 | nextnew.update(vardata.contains.keys()) | 635 | nextnew.update(vardata.contains.keys()) |
636 | new = nextnew | 636 | new = nextnew |
637 | self.overrides = None | 637 | self.overrides = None |
638 | self.expand_cache = {} | ||
638 | 639 | ||
639 | def _setvar_update_overrides(self, var, **loginfo): | 640 | def _setvar_update_overrides(self, var, **loginfo): |
640 | # aka pay the cookie monster | 641 | # aka pay the cookie monster |