From patchwork Fri Feb 24 18:36:42 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel, 1/1] bitbake/cooker: terminate when errors found in layer configuration Date: Fri, 24 Feb 2012 18:36:42 -0000 From: Paul Eggleton X-Patchwork-Id: 21955 Message-Id: <5cf92eae9327e2f345888f87faea2e10aa1a672e.1330108168.git.paul.eggleton@linux.intel.com> To: bitbake-devel@lists.openembedded.org If we find an error in the layer configuration (such as an unsatisfied item in LAYERDEPENDS) then exit by raising an exception at the end of handleCollections() (without producing a backtrace). Signed-off-by: Paul Eggleton --- bitbake/lib/bb/cooker.py | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index d645454..12b526b 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -55,6 +55,11 @@ class NothingToBuild(Exception): Exception raised when there is nothing to build """ +class CollectionError(bb.BBHandledException): + """ + Exception raised when layer configuration is incorrect + """ + class state: initial, parsing, running, shutdown, stop = range(5) @@ -893,6 +898,7 @@ class BBCooker: def handleCollections( self, collections ): """Handle collections""" + errors = False self.status.bbfile_config_priorities = [] if collections: collection_priorities = {} @@ -907,6 +913,7 @@ class BBCooker: prio = int(priority) except ValueError: parselog.error("invalid value for BBFILE_PRIORITY_%s: \"%s\"", c, priority) + errors = True if min_prio == 0 or prio < min_prio: min_prio = prio collection_priorities[c] = prio @@ -925,6 +932,7 @@ class BBCooker: depver = int(depsplit[1]) except ValueError: parselog.error("invalid version value in LAYERDEPENDS_%s: \"%s\"", c, dep) + errors = True continue else: depver = None @@ -939,13 +947,17 @@ class BBCooker: lver = int(layerver) except ValueError: parselog.error("invalid value for LAYERVERSION_%s: \"%s\"", c, layerver) + errors = True continue if lver <> depver: parselog.error("Layer dependency %s of layer %s is at version %d, expected %d", dep, c, lver, depver) + errors = True else: parselog.error("Layer dependency %s of layer %s has no version, expected %d", dep, c, depver) + errors = True else: parselog.error("Layer dependency %s of layer %s not found", dep, c) + errors = True collection_depends[c] = depnamelist else: collection_depends[c] = [] @@ -969,13 +981,18 @@ class BBCooker: regex = self.configuration.data.getVar("BBFILE_PATTERN_%s" % c, 1) if regex == None: parselog.error("BBFILE_PATTERN_%s not defined" % c) + errors = True continue try: cre = re.compile(regex) except re.error: parselog.error("BBFILE_PATTERN_%s \"%s\" is not a valid regular expression", c, regex) + errors = True continue self.status.bbfile_config_priorities.append((c, regex, cre, collection_priorities[c])) + if errors: + # We've already printed the actual error(s) + raise CollectionError("Errors during parsing layer configuration") def buildSetVars(self): """