diff options
Diffstat (limited to 'bitbake/lib/bb/codeparser.py')
| -rw-r--r-- | bitbake/lib/bb/codeparser.py | 41 | 
1 files changed, 20 insertions, 21 deletions
diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py index 2590e5cae7..04a34f944a 100644 --- a/bitbake/lib/bb/codeparser.py +++ b/bitbake/lib/bb/codeparser.py  | |||
| @@ -34,6 +34,9 @@ def check_indent(codestr): | |||
| 34 | 34 | ||
| 35 | pythonparsecache = {} | 35 | pythonparsecache = {} | 
| 36 | shellparsecache = {} | 36 | shellparsecache = {} | 
| 37 | pythonparsecacheextras = {} | ||
| 38 | shellparsecacheextras = {} | ||
| 39 | |||
| 37 | 40 | ||
| 38 | def parser_cachefile(d): | 41 | def parser_cachefile(d): | 
| 39 | cachedir = (d.getVar("PERSISTENT_DIR", True) or | 42 | cachedir = (d.getVar("PERSISTENT_DIR", True) or | 
| @@ -86,22 +89,8 @@ def parser_cache_save(d): | |||
| 86 | i = i + 1 | 89 | i = i + 1 | 
| 87 | continue | 90 | continue | 
| 88 | 91 | ||
| 89 | try: | 92 | shellcache = shellparsecacheextras | 
| 90 | p = pickle.Unpickler(file(cachefile, "rb")) | 93 | pythoncache = pythonparsecacheextras | 
| 91 | data, version = p.load() | ||
| 92 | except (IOError, EOFError, ValueError): | ||
| 93 | data, version = None, None | ||
| 94 | |||
| 95 | if version != PARSERCACHE_VERSION: | ||
| 96 | shellcache = shellparsecache | ||
| 97 | pythoncache = pythonparsecache | ||
| 98 | else: | ||
| 99 | for h in pythonparsecache: | ||
| 100 | if h not in data[0]: | ||
| 101 | pythoncache[h] = pythonparsecache[h] | ||
| 102 | for h in shellparsecache: | ||
| 103 | if h not in data[1]: | ||
| 104 | shellcache[h] = shellparsecache[h] | ||
| 105 | 94 | ||
| 106 | p = pickle.Pickler(file(cachefile + "-" + str(i), "wb"), -1) | 95 | p = pickle.Pickler(file(cachefile + "-" + str(i), "wb"), -1) | 
| 107 | p.dump([[pythoncache, shellcache], PARSERCACHE_VERSION]) | 96 | p.dump([[pythoncache, shellcache], PARSERCACHE_VERSION]) | 
| @@ -230,6 +219,12 @@ class PythonParser(): | |||
| 230 | self.execs = pythonparsecache[h]["execs"] | 219 | self.execs = pythonparsecache[h]["execs"] | 
| 231 | return | 220 | return | 
| 232 | 221 | ||
| 222 | if h in pythonparsecacheextras: | ||
| 223 | self.references = pythonparsecacheextras[h]["refs"] | ||
| 224 | self.execs = pythonparsecacheextras[h]["execs"] | ||
| 225 | return | ||
| 226 | |||
| 227 | |||
| 233 | code = compile(check_indent(str(node)), "<string>", "exec", | 228 | code = compile(check_indent(str(node)), "<string>", "exec", | 
| 234 | ast.PyCF_ONLY_AST) | 229 | ast.PyCF_ONLY_AST) | 
| 235 | 230 | ||
| @@ -240,9 +235,9 @@ class PythonParser(): | |||
| 240 | self.references.update(self.var_references) | 235 | self.references.update(self.var_references) | 
| 241 | self.references.update(self.var_execs) | 236 | self.references.update(self.var_execs) | 
| 242 | 237 | ||
| 243 | pythonparsecache[h] = {} | 238 | pythonparsecacheextras[h] = {} | 
| 244 | pythonparsecache[h]["refs"] = self.references | 239 | pythonparsecacheextras[h]["refs"] = self.references | 
| 245 | pythonparsecache[h]["execs"] = self.execs | 240 | pythonparsecacheextras[h]["execs"] = self.execs | 
| 246 | 241 | ||
| 247 | class ShellParser(): | 242 | class ShellParser(): | 
| 248 | def __init__(self, name, log): | 243 | def __init__(self, name, log): | 
| @@ -264,6 +259,10 @@ class ShellParser(): | |||
| 264 | self.execs = shellparsecache[h]["execs"] | 259 | self.execs = shellparsecache[h]["execs"] | 
| 265 | return self.execs | 260 | return self.execs | 
| 266 | 261 | ||
| 262 | if h in shellparsecacheextras: | ||
| 263 | self.execs = shellparsecacheextras[h]["execs"] | ||
| 264 | return self.execs | ||
| 265 | |||
| 267 | try: | 266 | try: | 
| 268 | tokens, _ = pyshyacc.parse(value, eof=True, debug=False) | 267 | tokens, _ = pyshyacc.parse(value, eof=True, debug=False) | 
| 269 | except pyshlex.NeedMore: | 268 | except pyshlex.NeedMore: | 
| @@ -273,8 +272,8 @@ class ShellParser(): | |||
| 273 | self.process_tokens(token) | 272 | self.process_tokens(token) | 
| 274 | self.execs = set(cmd for cmd in self.allexecs if cmd not in self.funcdefs) | 273 | self.execs = set(cmd for cmd in self.allexecs if cmd not in self.funcdefs) | 
| 275 | 274 | ||
| 276 | shellparsecache[h] = {} | 275 | shellparsecacheextras[h] = {} | 
| 277 | shellparsecache[h]["execs"] = self.execs | 276 | shellparsecacheextras[h]["execs"] = self.execs | 
| 278 | 277 | ||
| 279 | return self.execs | 278 | return self.execs | 
| 280 | 279 | ||
