diff options
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 63 | ||||
-rw-r--r-- | bitbake/lib/bb/parse/parse_py/BBHandler.py | 15 |
2 files changed, 32 insertions, 46 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 4caa93e044..79e9f7e170 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -179,44 +179,35 @@ class MethodFlagsNode(AstNode): | |||
179 | data.delVarFlag(self.key, "fakeroot") | 179 | data.delVarFlag(self.key, "fakeroot") |
180 | 180 | ||
181 | class ExportFuncsNode(AstNode): | 181 | class ExportFuncsNode(AstNode): |
182 | def __init__(self, filename, lineno, fns, classes): | 182 | def __init__(self, filename, lineno, fns, classname): |
183 | AstNode.__init__(self, filename, lineno) | 183 | AstNode.__init__(self, filename, lineno) |
184 | self.n = fns.split() | 184 | self.n = fns.split() |
185 | self.classes = classes | 185 | self.classname = classname |
186 | 186 | ||
187 | def eval(self, data): | 187 | def eval(self, data): |
188 | for f in self.n: | 188 | |
189 | allvars = [] | 189 | for func in self.n: |
190 | allvars.append(f) | 190 | calledfunc = self.classname + "_" + func |
191 | allvars.append(self.classes[-1] + "_" + f) | 191 | |
192 | 192 | if data.getVar(func) and not data.getVarFlag(func, 'export_func'): | |
193 | vars = [[ allvars[0], allvars[1] ]] | 193 | continue |
194 | if len(self.classes) > 1 and self.classes[-2] is not None: | 194 | |
195 | allvars.append(self.classes[-2] + "_" + f) | 195 | if data.getVar(func): |
196 | vars = [] | 196 | data.setVarFlag(func, 'python', None) |
197 | vars.append([allvars[2], allvars[1]]) | 197 | data.setVarFlag(func, 'func', None) |
198 | vars.append([allvars[0], allvars[2]]) | 198 | |
199 | 199 | for flag in [ "func", "python" ]: | |
200 | for (var, calledvar) in vars: | 200 | if data.getVarFlag(calledfunc, flag): |
201 | if data.getVar(var) and not data.getVarFlag(var, 'export_func'): | 201 | data.setVarFlag(func, flag, data.getVarFlag(calledfunc, flag)) |
202 | continue | 202 | for flag in [ "dirs" ]: |
203 | 203 | if data.getVarFlag(func, flag): | |
204 | if data.getVar(var): | 204 | data.setVarFlag(calledfunc, flag, data.getVarFlag(func, flag)) |
205 | data.setVarFlag(var, 'python', None) | 205 | |
206 | data.setVarFlag(var, 'func', None) | 206 | if data.getVarFlag(calledfunc, "python"): |
207 | 207 | data.setVar(func, " bb.build.exec_func('" + calledfunc + "', d)\n") | |
208 | for flag in [ "func", "python" ]: | 208 | else: |
209 | if data.getVarFlag(calledvar, flag): | 209 | data.setVar(func, " " + calledfunc + "\n") |
210 | data.setVarFlag(var, flag, data.getVarFlag(calledvar, flag)) | 210 | data.setVarFlag(func, 'export_func', '1') |
211 | for flag in [ "dirs" ]: | ||
212 | if data.getVarFlag(var, flag): | ||
213 | data.setVarFlag(calledvar, flag, data.getVarFlag(var, flag)) | ||
214 | |||
215 | if data.getVarFlag(calledvar, "python"): | ||
216 | data.setVar(var, " bb.build.exec_func('" + calledvar + "', d)\n") | ||
217 | else: | ||
218 | data.setVar(var, " " + calledvar + "\n") | ||
219 | data.setVarFlag(var, 'export_func', '1') | ||
220 | 211 | ||
221 | class AddTaskNode(AstNode): | 212 | class AddTaskNode(AstNode): |
222 | def __init__(self, filename, lineno, func, before, after): | 213 | def __init__(self, filename, lineno, func, before, after): |
@@ -288,8 +279,8 @@ def handlePythonMethod(statements, filename, lineno, funcname, modulename, body) | |||
288 | def handleMethodFlags(statements, filename, lineno, key, m): | 279 | def handleMethodFlags(statements, filename, lineno, key, m): |
289 | statements.append(MethodFlagsNode(filename, lineno, key, m)) | 280 | statements.append(MethodFlagsNode(filename, lineno, key, m)) |
290 | 281 | ||
291 | def handleExportFuncs(statements, filename, lineno, m, classes): | 282 | def handleExportFuncs(statements, filename, lineno, m, classname): |
292 | statements.append(ExportFuncsNode(filename, lineno, m.group(1), classes)) | 283 | statements.append(ExportFuncsNode(filename, lineno, m.group(1), classname)) |
293 | 284 | ||
294 | def handleAddTask(statements, filename, lineno, m): | 285 | def handleAddTask(statements, filename, lineno, m): |
295 | func = m.group("func") | 286 | func = m.group("func") |
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 2e0647b5df..92c55f531a 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
@@ -51,7 +51,6 @@ __infunc__ = "" | |||
51 | __inpython__ = False | 51 | __inpython__ = False |
52 | __body__ = [] | 52 | __body__ = [] |
53 | __classname__ = "" | 53 | __classname__ = "" |
54 | classes = [ None, ] | ||
55 | 54 | ||
56 | cached_statements = {} | 55 | cached_statements = {} |
57 | 56 | ||
@@ -107,7 +106,7 @@ def get_statements(filename, absolute_filename, base_name): | |||
107 | return statements | 106 | return statements |
108 | 107 | ||
109 | def handle(fn, d, include): | 108 | def handle(fn, d, include): |
110 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__ | 109 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__, __classname__ |
111 | __body__ = [] | 110 | __body__ = [] |
112 | __infunc__ = "" | 111 | __infunc__ = "" |
113 | __classname__ = "" | 112 | __classname__ = "" |
@@ -125,7 +124,6 @@ def handle(fn, d, include): | |||
125 | 124 | ||
126 | if ext == ".bbclass": | 125 | if ext == ".bbclass": |
127 | __classname__ = root | 126 | __classname__ = root |
128 | classes.append(__classname__) | ||
129 | __inherit_cache = d.getVar('__inherit_cache') or [] | 127 | __inherit_cache = d.getVar('__inherit_cache') or [] |
130 | if not fn in __inherit_cache: | 128 | if not fn in __inherit_cache: |
131 | __inherit_cache.append(fn) | 129 | __inherit_cache.append(fn) |
@@ -150,11 +148,8 @@ def handle(fn, d, include): | |||
150 | 148 | ||
151 | statements.eval(d) | 149 | statements.eval(d) |
152 | 150 | ||
153 | if ext == ".bbclass": | 151 | if ext != ".bbclass" and include == 0: |
154 | classes.remove(__classname__) | 152 | return ast.multi_finalize(fn, d) |
155 | else: | ||
156 | if include == 0: | ||
157 | return ast.multi_finalize(fn, d) | ||
158 | 153 | ||
159 | if oldfile: | 154 | if oldfile: |
160 | d.setVar("FILE", oldfile) | 155 | d.setVar("FILE", oldfile) |
@@ -166,7 +161,7 @@ def handle(fn, d, include): | |||
166 | return d | 161 | return d |
167 | 162 | ||
168 | def feeder(lineno, s, fn, root, statements): | 163 | def feeder(lineno, s, fn, root, statements): |
169 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__, __infunc__, __body__, classes, bb, __residue__ | 164 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__, __infunc__, __body__, bb, __residue__, __classname__ |
170 | if __infunc__: | 165 | if __infunc__: |
171 | if s == '}': | 166 | if s == '}': |
172 | __body__.append('') | 167 | __body__.append('') |
@@ -225,7 +220,7 @@ def feeder(lineno, s, fn, root, statements): | |||
225 | 220 | ||
226 | m = __export_func_regexp__.match(s) | 221 | m = __export_func_regexp__.match(s) |
227 | if m: | 222 | if m: |
228 | ast.handleExportFuncs(statements, fn, lineno, m, classes) | 223 | ast.handleExportFuncs(statements, fn, lineno, m, __classname__) |
229 | return | 224 | return |
230 | 225 | ||
231 | m = __addtask_regexp__.match(s) | 226 | m = __addtask_regexp__.match(s) |