diff options
| author | Ed Bartosh <ed.bartosh@linux.intel.com> | 2015-08-30 20:47:00 +0300 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-30 21:38:21 +0100 |
| commit | 58c393022f624213f686a716d87cca60a289e08e (patch) | |
| tree | e451ab1cc916c8ab100cb5ce7e51151d01dd0eec /scripts/lib | |
| parent | 92c3f03b790bdb92d5b81ad00c4815d330a4f832 (diff) | |
| download | poky-58c393022f624213f686a716d87cca60a289e08e.tar.gz | |
wic: add BitbakeVars class
Moved code of getting bitbake variables into separate class.
Created singleton object of this class in the module namespace.
Preserved existing API get_bitbake_var.
(From OE-Core rev: 3229d37993e315c9ca1902849746b9f50f35845c)
Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib')
| -rw-r--r-- | scripts/lib/wic/utils/oe/misc.py | 91 |
1 files changed, 53 insertions, 38 deletions
diff --git a/scripts/lib/wic/utils/oe/misc.py b/scripts/lib/wic/utils/oe/misc.py index 9c8f52dd0d..3537a2e711 100644 --- a/scripts/lib/wic/utils/oe/misc.py +++ b/scripts/lib/wic/utils/oe/misc.py | |||
| @@ -124,48 +124,63 @@ def exec_native_cmd(cmd_and_args, native_sysroot, catch=3): | |||
| 124 | 124 | ||
| 125 | BOOTDD_EXTRA_SPACE = 16384 | 125 | BOOTDD_EXTRA_SPACE = 16384 |
| 126 | 126 | ||
| 127 | _BITBAKE_VARS = defaultdict(dict) | 127 | class BitbakeVars(defaultdict): |
| 128 | """ | ||
| 129 | Container for Bitbake variables. | ||
| 130 | """ | ||
| 131 | def __init__(self): | ||
| 132 | defaultdict.__init__(self, dict) | ||
| 133 | |||
| 134 | def get_var(self, var, image=None): | ||
| 135 | """ | ||
| 136 | Get bitbake variable value lazy way, i.e. run | ||
| 137 | 'bitbake -e' only when variable is requested. | ||
| 138 | """ | ||
| 139 | if image not in self: | ||
| 140 | # Get bitbake -e output | ||
| 141 | cmd = "bitbake -e" | ||
| 142 | if image: | ||
| 143 | cmd += " %s" % image | ||
| 144 | |||
| 145 | log_level = msger.get_loglevel() | ||
| 146 | msger.set_loglevel('normal') | ||
| 147 | ret, lines = _exec_cmd(cmd) | ||
| 148 | msger.set_loglevel(log_level) | ||
| 149 | |||
| 150 | if ret: | ||
| 151 | print "Couldn't get '%s' output." % cmd | ||
| 152 | print "Bitbake failed with error:\n%s\n" % lines | ||
| 153 | return | ||
| 154 | |||
| 155 | # Parse bitbake -e output | ||
| 156 | for line in lines.split('\n'): | ||
| 157 | if "=" not in line: | ||
| 158 | continue | ||
| 159 | try: | ||
| 160 | key, val = line.split("=") | ||
| 161 | except ValueError: | ||
| 162 | continue | ||
| 163 | key = key.strip() | ||
| 164 | val = val.strip() | ||
| 165 | if key.replace('_', '').isalnum(): | ||
| 166 | self[image][key] = val.strip('"') | ||
| 167 | |||
| 168 | # Make first image a default set of variables | ||
| 169 | images = [key for key in self if key] | ||
| 170 | if len(images) == 1: | ||
| 171 | self[None] = self[image] | ||
| 172 | |||
| 173 | return self[image].get(var) | ||
| 174 | |||
| 175 | # Create BB_VARS singleton | ||
| 176 | BB_VARS = BitbakeVars() | ||
| 128 | 177 | ||
| 129 | def get_bitbake_var(var, image=None): | 178 | def get_bitbake_var(var, image=None): |
| 130 | """ | 179 | """ |
| 131 | Get bitbake variable value lazy way, i.e. run | 180 | Provide old get_bitbake_var API by wrapping |
| 132 | 'bitbake -e' only when variable is requested. | 181 | get_var method of BB_VARS singleton. |
| 133 | """ | 182 | """ |
| 134 | if image not in _BITBAKE_VARS: | 183 | return BB_VARS.get_var(var, image) |
| 135 | # Get bitbake -e output | ||
| 136 | cmd = "bitbake -e" | ||
| 137 | if image: | ||
| 138 | cmd += " %s" % image | ||
| 139 | |||
| 140 | log_level = msger.get_loglevel() | ||
| 141 | msger.set_loglevel('normal') | ||
| 142 | ret, lines = _exec_cmd(cmd) | ||
| 143 | msger.set_loglevel(log_level) | ||
| 144 | |||
| 145 | if ret: | ||
| 146 | print "Couldn't get '%s' output." % cmd | ||
| 147 | print "Bitbake failed with error:\n%s\n" % lines | ||
| 148 | return | ||
| 149 | |||
| 150 | # Parse bitbake -e output | ||
| 151 | for line in lines.split('\n'): | ||
| 152 | if "=" not in line: | ||
| 153 | continue | ||
| 154 | try: | ||
| 155 | key, val = line.split("=") | ||
| 156 | except ValueError: | ||
| 157 | continue | ||
| 158 | key = key.strip() | ||
| 159 | val = val.strip() | ||
| 160 | if key.replace('_', '').isalnum(): | ||
| 161 | _BITBAKE_VARS[image][key] = val.strip('"') | ||
| 162 | |||
| 163 | # Make first image a default set of variables | ||
| 164 | images = [key for key in _BITBAKE_VARS if key] | ||
| 165 | if len(images) == 1: | ||
| 166 | _BITBAKE_VARS[None] = _BITBAKE_VARS[image] | ||
| 167 | |||
| 168 | return _BITBAKE_VARS[image].get(var) | ||
| 169 | 184 | ||
| 170 | def parse_sourceparams(sourceparams): | 185 | def parse_sourceparams(sourceparams): |
| 171 | """ | 186 | """ |
