summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/parse/ast.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r--bitbake/lib/bb/parse/ast.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index 30ede008d7..290ed45048 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -440,6 +440,30 @@ def runAnonFuncs(d):
440 code.append("%s(d)" % funcname) 440 code.append("%s(d)" % funcname)
441 bb.utils.better_exec("\n".join(code), {"d": d}) 441 bb.utils.better_exec("\n".join(code), {"d": d})
442 442
443# Handle recipe level PREFERRED_PROVIDERs
444def handleVirtRecipeProviders(tasklist, d):
445 depends = (d.getVar("DEPENDS") or "").split()
446 virtprovs = (d.getVar("BB_RECIPE_VIRTUAL_PROVIDERS") or "").split()
447 newdeps = []
448 for dep in depends:
449 if dep in virtprovs:
450 newdep = d.getVar("PREFERRED_PROVIDER_" + dep)
451 if not newdep:
452 bb.fatal("Error, recipe virtual provider PREFERRED_PROVIDER_%s not set" % dep)
453 newdeps.append(newdep)
454 else:
455 newdeps.append(dep)
456 d.setVar("DEPENDS", " ".join(newdeps))
457 for task in tasklist:
458 taskdeps = (d.getVarFlag(task, "depends") or "").split()
459 remapped = []
460 for entry in taskdeps:
461 r, t = entry.split(":")
462 if r in virtprovs:
463 r = d.getVar("PREFERRED_PROVIDER_" + r)
464 remapped.append("%s:%s" % (r, t))
465 d.setVarFlag(task, "depends", " ".join(remapped))
466
443def finalize(fn, d, variant = None): 467def finalize(fn, d, variant = None):
444 saved_handlers = bb.event.get_handlers().copy() 468 saved_handlers = bb.event.get_handlers().copy()
445 try: 469 try:
@@ -465,6 +489,7 @@ def finalize(fn, d, variant = None):
465 489
466 tasklist = d.getVar('__BBTASKS', False) or [] 490 tasklist = d.getVar('__BBTASKS', False) or []
467 bb.event.fire(bb.event.RecipeTaskPreProcess(fn, list(tasklist)), d) 491 bb.event.fire(bb.event.RecipeTaskPreProcess(fn, list(tasklist)), d)
492 handleVirtRecipeProviders(tasklist, d)
468 bb.build.add_tasks(tasklist, d) 493 bb.build.add_tasks(tasklist, d)
469 494
470 bb.parse.siggen.finalise(fn, d, variant) 495 bb.parse.siggen.finalise(fn, d, variant)