summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-10 14:05:06 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-12 22:50:41 +0100
commit61fbff2cd43720037de0266b73d5460576ed07e8 (patch)
tree0e8dde7c4d9ec592f7c5f481c73cf2cf85525f5c
parent625a6bf6e813c7b753a9379151c95a4bbc6865c3 (diff)
downloadpoky-61fbff2cd43720037de0266b73d5460576ed07e8.tar.gz
bitbake: cooker/taskdata: Make NoProvider errors non-fatal to -e/-g options
If you have a situation where you are getting a "Nothing PROVIDES" error (for example when something you request to build DEPENDS on something that has been skipped or doesn't exist) it would be useful to be able to use bitbake -g or bitbake -e to debug it, but currently both of those are blocked by the error. This patch adds an "allowincomplete" option to taskdata and uses this for the -e/-g bitbake options. The NoProvider errors are still printed and bitbake does return an error exist code but the environment and task graph files are generated. [YOCTO #7623] (Bitbake rev: 2ca36a9f088438a8d1db44119c704f9480b04298) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/cooker.py8
-rw-r--r--bitbake/lib/bb/taskdata.py8
2 files changed, 9 insertions, 7 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 58137f6d62..46e5560e83 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -581,7 +581,7 @@ class BBCooker:
581 if pkgs_to_build[0] in set(ignore.split()): 581 if pkgs_to_build[0] in set(ignore.split()):
582 bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0]) 582 bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0])
583 583
584 taskdata, runlist, pkgs_to_build = self.buildTaskData(pkgs_to_build, None, self.configuration.abort) 584 taskdata, runlist, pkgs_to_build = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True)
585 585
586 targetid = taskdata.getbuild_id(pkgs_to_build[0]) 586 targetid = taskdata.getbuild_id(pkgs_to_build[0])
587 fnid = taskdata.build_targets[targetid][0] 587 fnid = taskdata.build_targets[targetid][0]
@@ -614,7 +614,7 @@ class BBCooker:
614 logger.plain("\npython %s () {\n%s}\n", e, envdata.getVar(e, True)) 614 logger.plain("\npython %s () {\n%s}\n", e, envdata.getVar(e, True))
615 615
616 616
617 def buildTaskData(self, pkgs_to_build, task, abort): 617 def buildTaskData(self, pkgs_to_build, task, abort, allowincomplete=False):
618 """ 618 """
619 Prepare a runqueue and taskdata object for iteration over pkgs_to_build 619 Prepare a runqueue and taskdata object for iteration over pkgs_to_build
620 """ 620 """
@@ -629,7 +629,7 @@ class BBCooker:
629 localdata = data.createCopy(self.data) 629 localdata = data.createCopy(self.data)
630 bb.data.update_data(localdata) 630 bb.data.update_data(localdata)
631 bb.data.expandKeys(localdata) 631 bb.data.expandKeys(localdata)
632 taskdata = bb.taskdata.TaskData(abort, skiplist=self.skiplist) 632 taskdata = bb.taskdata.TaskData(abort, skiplist=self.skiplist, allowincomplete=allowincomplete)
633 633
634 current = 0 634 current = 0
635 runlist = [] 635 runlist = []
@@ -654,7 +654,7 @@ class BBCooker:
654 654
655 # We set abort to False here to prevent unbuildable targets raising 655 # We set abort to False here to prevent unbuildable targets raising
656 # an exception when we're just generating data 656 # an exception when we're just generating data
657 taskdata, runlist, pkgs_to_build = self.buildTaskData(pkgs_to_build, task, False) 657 taskdata, runlist, pkgs_to_build = self.buildTaskData(pkgs_to_build, task, False, allowincomplete=True)
658 658
659 return runlist, taskdata 659 return runlist, taskdata
660 660
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index af72a1fb09..ca58e17922 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/lib/bb/taskdata.py
@@ -41,7 +41,7 @@ class TaskData:
41 """ 41 """
42 BitBake Task Data implementation 42 BitBake Task Data implementation
43 """ 43 """
44 def __init__(self, abort = True, tryaltconfigs = False, skiplist = None): 44 def __init__(self, abort = True, tryaltconfigs = False, skiplist = None, allowincomplete = False):
45 self.build_names_index = [] 45 self.build_names_index = []
46 self.run_names_index = [] 46 self.run_names_index = []
47 self.fn_index = [] 47 self.fn_index = []
@@ -70,6 +70,7 @@ class TaskData:
70 70
71 self.abort = abort 71 self.abort = abort
72 self.tryaltconfigs = tryaltconfigs 72 self.tryaltconfigs = tryaltconfigs
73 self.allowincomplete = allowincomplete
73 74
74 self.skiplist = skiplist 75 self.skiplist = skiplist
75 76
@@ -594,9 +595,10 @@ class TaskData:
594 added = added + 1 595 added = added + 1
595 except bb.providers.NoProvider: 596 except bb.providers.NoProvider:
596 targetid = self.getbuild_id(target) 597 targetid = self.getbuild_id(target)
597 if self.abort and targetid in self.external_targets: 598 if self.abort and targetid in self.external_targets and not self.allowincomplete:
598 raise 599 raise
599 self.remove_buildtarget(targetid) 600 if not self.allowincomplete:
601 self.remove_buildtarget(targetid)
600 for target in self.get_unresolved_run_targets(dataCache): 602 for target in self.get_unresolved_run_targets(dataCache):
601 try: 603 try:
602 self.add_rprovider(cfgData, dataCache, target) 604 self.add_rprovider(cfgData, dataCache, target)