@@ -285,7 +285,20 @@ def get_bb_vars(variables=None, target=None, postconfig=None):
return values
def get_bb_var(var, target=None, postconfig=None):
- return get_bb_vars([var], target, postconfig)[var]
+ if postconfig:
+ return bitbake("-e %s" % target or "", postconfig=postconfig).output
+ else:
+ # Fast-path for the non-postconfig case
+ cmd = ["bitbake-getvar", "--quiet", "--value", var]
+ if target:
+ cmd.extend(["--recipe", target])
+ try:
+ return subprocess.run(cmd, check=True, text=True, stdout=subprocess.PIPE).stdout.strip()
+ except subprocess.CalledProcessError as e:
+ # We need to return None not the empty string if the variable hasn't been set.
+ if e.returncode == 1:
+ return None
+ raise
def get_test_layer(bblayers=None):
if bblayers is None:
get_bb_var() currently end up calling 'bitbake -e' and parsing the whole output. However if postconfig isn't set then we can speed this up by just calling bitbake-getvar. The complication with failing bitbake-getvar calls is because we need to be careful to return None instead of the empty string when the variable doesn't exist. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/lib/oeqa/utils/commands.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)