bitbake: build/ast: Create strong task add/del API in bb.build

Currently its near impossible to control task addition/deletion from
metadata context. This adds stong add/deltask API to bb.build
which is traditionally where it resided. The rather broken
remove_tasks function was removed, it didn't appear to do anything
useful or have any users.

This allows us to clean up hacks currently in use in metadata and use
standard API for it instead.

(Bitbake rev: bf7138dd38fc1f8efca80891198e3422fef64093)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2013-12-18 10:45:02 +00:00
parent 8a82a3835c
commit ba82035412
2 changed files with 33 additions and 35 deletions

View File

@ -668,9 +668,36 @@ def add_tasks(tasklist, deltasklist, d):
# don't assume holding a reference
d.setVar('_task_deps', task_deps)
def remove_task(task, kill, d):
"""Remove an BB 'task'.
def addtask(task, before, after, d):
if task[:3] != "do_":
task = "do_" + task
If kill is 1, also remove tasks that depend on this task."""
d.setVarFlag(task, "task", 1)
bbtasks = d.getVar('__BBTASKS') or []
if not task in bbtasks:
bbtasks.append(task)
d.setVar('__BBTASKS', bbtasks)
existing = d.getVarFlag(task, "deps") or []
if after is not None:
# set up deps for function
for entry in after.split():
if entry not in existing:
existing.append(entry)
d.setVarFlag(task, "deps", existing)
if before is not None:
# set up things that depend on this func
for entry in before.split():
existing = d.getVarFlag(entry, "deps") or []
if task not in existing:
d.setVarFlag(entry, "deps", [task] + existing)
def deltask(task, d):
if task[:3] != "do_":
task = "do_" + task
bbtasks = d.getVar('__BBDELTASKS') or []
if not task in bbtasks:
bbtasks.append(task)
d.setVar('__BBDELTASKS', bbtasks)
d.delVarFlag(task, 'task')

View File

@ -235,29 +235,7 @@ class AddTaskNode(AstNode):
self.after = after
def eval(self, data):
var = self.func
if self.func[:3] != "do_":
var = "do_" + self.func
data.setVarFlag(var, "task", 1)
bbtasks = data.getVar('__BBTASKS') or []
if not var in bbtasks:
bbtasks.append(var)
data.setVar('__BBTASKS', bbtasks)
existing = data.getVarFlag(var, "deps") or []
if self.after is not None:
# set up deps for function
for entry in self.after.split():
if entry not in existing:
existing.append(entry)
data.setVarFlag(var, "deps", existing)
if self.before is not None:
# set up things that depend on this func
for entry in self.before.split():
existing = data.getVarFlag(entry, "deps") or []
if var not in existing:
data.setVarFlag(entry, "deps", [var] + existing)
bb.build.addtask(self.func, self.before, self.after, data)
class DelTaskNode(AstNode):
def __init__(self, filename, lineno, func):
@ -265,14 +243,7 @@ class DelTaskNode(AstNode):
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)
bb.build.deltask(self.func, data)
class BBHandlerNode(AstNode):
def __init__(self, filename, lineno, fns):