diff options
Diffstat (limited to 'scripts/lib/wic/utils/oe/misc.py')
-rw-r--r-- | scripts/lib/wic/utils/oe/misc.py | 82 |
1 files changed, 30 insertions, 52 deletions
diff --git a/scripts/lib/wic/utils/oe/misc.py b/scripts/lib/wic/utils/oe/misc.py index 2f916ddf45..1de6f46a38 100644 --- a/scripts/lib/wic/utils/oe/misc.py +++ b/scripts/lib/wic/utils/oe/misc.py @@ -25,6 +25,8 @@ # Tom Zanussi <tom.zanussi (at] linux.intel.com> # +from collections import defaultdict + from wic import msger from wic.utils import runner @@ -108,62 +110,38 @@ def add_wks_var(key, val): BOOTDD_EXTRA_SPACE = 16384 -__bitbake_env_lines = "" - -def set_bitbake_env_lines(bitbake_env_lines): - global __bitbake_env_lines - __bitbake_env_lines = bitbake_env_lines +_BITBAKE_VARS = defaultdict(dict) -def get_bitbake_env_lines(): - return __bitbake_env_lines - -def find_bitbake_env_lines(image_name): - """ - If image_name is empty, plugins might still be able to use the - environment, so set it regardless. +def get_bitbake_var(var, image=None): """ - if image_name: - bitbake_env_cmd = "bitbake -e %s" % image_name - else: - bitbake_env_cmd = "bitbake -e" - rc, bitbake_env_lines = __exec_cmd(bitbake_env_cmd) - if rc != 0: - print "Couldn't get '%s' output." % bitbake_env_cmd - print "Bitbake failed with error:\n%s\n" % bitbake_env_lines - return None - - return bitbake_env_lines - -def find_artifact(bitbake_env_lines, variable): + Get bitbake variable value lazy way, i.e. run + 'bitbake -e' only when variable is requested. """ - Gather the build artifact for the current image (the image_name - e.g. core-image-minimal) for the current MACHINE set in local.conf - """ - retval = "" - - for line in bitbake_env_lines.split('\n'): - if get_line_val(line, variable): - retval = get_line_val(line, variable) - break - - return retval + if image not in _BITBAKE_VARS: + # Get bitbake -e output + cmd = "bitbake -e" + if image: + cmd += " %s" % image + rc, lines = __exec_cmd(cmd) + if rc: + print "Couldn't get '%s' output." % cmd + print "Bitbake failed with error:\n%s\n" % lines + return + + # Parse bitbake -e output + for line in lines.split('\n'): + if "=" not in line: + continue + try: + key, val = line.split("=") + except ValueError: + continue + key = key.strip() + val = val.strip() + if key.replace('_', '').isalnum(): + _BITBAKE_VARS[image][key] = val.strip('"') -def get_line_val(line, key): - """ - Extract the value from the VAR="val" string - """ - if line.startswith(key + "="): - stripped_line = line.split('=')[1] - stripped_line = stripped_line.replace('\"', '') - return stripped_line - return None - -def get_bitbake_var(key): - for line in __bitbake_env_lines.split('\n'): - if get_line_val(line, key): - val = get_line_val(line, key) - return val - return None + return _BITBAKE_VARS[image].get(var) def parse_sourceparams(sourceparams): """ |