From c9e95d3363d28ae92eb9ed1ed560ad3769482f8a Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Fri, 24 Feb 2012 18:36:42 +0000 Subject: bitbake/cooker: terminate when errors found in layer configuration 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). (Bitbake rev: c7486a09310fe63b1aa1b7b0bb9450f306b6093b) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- bitbake/lib/bb/cooker.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index d645454c7c..12b526b40c 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): """ -- cgit v1.2.3-54-g00ecf