diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index daf37ebd45..eed489f5d4 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -1454,6 +1454,7 @@ class Parser(multiprocessing.Process): self.quit = quit self.init = init multiprocessing.Process.__init__(self) + self.context = bb.utils._context.copy() def run(self): if self.init: @@ -1488,6 +1489,7 @@ class Parser(multiprocessing.Process): def parse(self, filename, appends, caches_array): try: + bb.utils._context = self.context.copy() return True, bb.cache.Cache.parse(filename, appends, self.cfg, caches_array) except Exception as exc: tb = sys.exc_info()[2] diff --git a/bitbake/lib/bb/methodpool.py b/bitbake/lib/bb/methodpool.py index 8ad23c650b..bf2e9f5542 100644 --- a/bitbake/lib/bb/methodpool.py +++ b/bitbake/lib/bb/methodpool.py @@ -17,24 +17,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -""" - What is a method pool? - - BitBake has a global method scope where .bb, .inc and .bbclass - files can install methods. These methods are parsed from strings. - To avoid recompiling and executing these string we introduce - a method pool to do this task. - - This pool will be used to compile and execute the functions. It - will be smart enough to -""" - from bb.utils import better_compile, better_exec -from bb import error - -# A dict of function names we have seen -_parsed_fns = { } def insert_method(modulename, code, fn): """ @@ -44,28 +27,3 @@ def insert_method(modulename, code, fn): comp = better_compile(code, modulename, fn ) better_exec(comp, None, code, fn) - # now some instrumentation - code = comp.co_names - for name in code: - if name in ['None', 'False']: - continue - elif name in _parsed_fns and not _parsed_fns[name] == modulename: - bb.fatal("The function %s defined in %s was already declared in %s. BitBake has a global python function namespace so shared functions should be declared in a common include file rather than being duplicated, or if the functions are different, please use different function names." % (name, modulename, _parsed_fns[name])) - else: - _parsed_fns[name] = modulename - -# A dict of modules the parser has finished with -_parsed_methods = {} - -def parsed_module(modulename): - """ - Has module been parsed? - """ - return modulename in _parsed_methods - -def set_parsed_module(modulename): - """ - Set module as parsed - """ - _parsed_methods[modulename] = True - diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index b2657f8044..713bef1cc2 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py @@ -148,9 +148,8 @@ class MethodNode(AstNode): text = '\n'.join(self.body) if self.func_name == "__anonymous": funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(string.maketrans('/.+-', '____')))) - if not funcname in bb.methodpool._parsed_fns: - text = "def %s(d):\n" % (funcname) + text - bb.methodpool.insert_method(funcname, text, self.filename) + text = "def %s(d):\n" % (funcname) + text + bb.methodpool.insert_method(funcname, text, self.filename) anonfuncs = data.getVar('__BBANONFUNCS') or [] anonfuncs.append(funcname) data.setVar('__BBANONFUNCS', anonfuncs) @@ -171,8 +170,7 @@ class PythonMethodNode(AstNode): # 'this' file. This means we will not parse methods from # bb classes twice text = '\n'.join(self.body) - if not bb.methodpool.parsed_module(self.modulename): - bb.methodpool.insert_method(self.modulename, text, self.filename) + bb.methodpool.insert_method(self.modulename, text, self.filename) data.setVarFlag(self.function, "func", 1) data.setVarFlag(self.function, "python", 1) data.setVar(self.function, text) diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 87a1530cb5..01f22d3b24 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py @@ -167,10 +167,6 @@ def handle(fn, d, include): if oldfile: d.setVar("FILE", oldfile) - # we have parsed the bb class now - if ext == ".bbclass" or ext == ".inc": - bb.methodpool.set_parsed_module(base_name) - return d def feeder(lineno, s, fn, root, statements):