diff options
-rw-r--r-- | lib/bb/build.py | 6 | ||||
-rw-r--r-- | lib/bb/parse/ast.py | 25 | ||||
-rw-r--r-- | lib/bb/parse/parse_py/BBHandler.py | 6 |
3 files changed, 35 insertions, 2 deletions
diff --git a/lib/bb/build.py b/lib/bb/build.py index 92c45a38c..6b395264b 100644 --- a/lib/bb/build.py +++ b/lib/bb/build.py @@ -622,7 +622,7 @@ def stampfile(taskname, d, file_name = None): """ return stamp_internal(taskname, d, file_name) -def add_tasks(tasklist, d): +def add_tasks(tasklist, deltasklist, d): task_deps = d.getVar('_task_deps') if not task_deps: task_deps = {} @@ -633,6 +633,10 @@ def add_tasks(tasklist, d): for task in tasklist: task = d.expand(task) + + if task in deltasklist: + continue + d.setVarFlag(task, 'task', 1) if not task in task_deps['tasks']: diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py index d4b8b0954..2036cd43f 100644 --- a/lib/bb/parse/ast.py +++ b/lib/bb/parse/ast.py @@ -259,6 +259,21 @@ class AddTaskNode(AstNode): if var not in existing: data.setVarFlag(entry, "deps", [var] + existing) +class DelTaskNode(AstNode): + def __init__(self, filename, lineno, func): + AstNode.__init__(self, filename, lineno) + self.func = func + + def eval(self, data): + var = self.func + if self.func[:3] != "do_": + var = "do_" + self.func + + bbtasks = data.getVar('__BBDELTASKS') or [] + if not var in bbtasks: + bbtasks.append(var) + data.setVar('__BBDELTASKS', bbtasks) + class BBHandlerNode(AstNode): def __init__(self, filename, lineno, fns): AstNode.__init__(self, filename, lineno) @@ -309,6 +324,13 @@ def handleAddTask(statements, filename, lineno, m): statements.append(AddTaskNode(filename, lineno, func, before, after)) +def handleDelTask(statements, filename, lineno, m): + func = m.group("func") + if func is None: + return + + statements.append(DelTaskNode(filename, lineno, func)) + def handleBBHandlers(statements, filename, lineno, m): statements.append(BBHandlerNode(filename, lineno, m.group(1))) @@ -333,7 +355,8 @@ def finalize(fn, d, variant = None): bb.data.update_data(d) tasklist = d.getVar('__BBTASKS') or [] - bb.build.add_tasks(tasklist, d) + deltasklist = d.getVar('__BBDELTASKS') or [] + bb.build.add_tasks(tasklist, deltasklist, d) bb.parse.siggen.finalise(fn, d, variant) diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py index 7cba64959..408890e48 100644 --- a/lib/bb/parse/parse_py/BBHandler.py +++ b/lib/bb/parse/parse_py/BBHandler.py @@ -42,6 +42,7 @@ __func_start_regexp__ = re.compile( r"(((?P<py>python)|(?P<fr>fakeroot))\s*)* __inherit_regexp__ = re.compile( r"inherit\s+(.+)" ) __export_func_regexp__ = re.compile( r"EXPORT_FUNCTIONS\s+(.+)" ) __addtask_regexp__ = re.compile("addtask\s+(?P<func>\w+)\s*((before\s*(?P<before>((.*(?=after))|(.*))))|(after\s*(?P<after>((.*(?=before))|(.*)))))*") +__deltask_regexp__ = re.compile("deltask\s+(?P<func>\w+)") __addhandler_regexp__ = re.compile( r"addhandler\s+(.+)" ) __def_regexp__ = re.compile( r"def\s+(\w+).*:" ) __python_func_regexp__ = re.compile( r"(\s+.*)|(^$)" ) @@ -243,6 +244,11 @@ def feeder(lineno, s, fn, root, statements): ast.handleAddTask(statements, fn, lineno, m) return + m = __deltask_regexp__.match(s) + if m: + ast.handleDelTask(statements, fn, lineno, m) + return + m = __addhandler_regexp__.match(s) if m: ast.handleBBHandlers(statements, fn, lineno, m) |