summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/cooker.py2
-rw-r--r--lib/bb/parse/__init__.py15
-rw-r--r--lib/bb/parse/ast.py8
-rw-r--r--lib/bb/parse/parse_py/BBHandler.py6
-rw-r--r--lib/bb/parse/parse_py/ConfHandler.py11
5 files changed, 26 insertions, 16 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 308805a71..bf25a8320 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -1398,7 +1398,7 @@ def _parse(fn, data, include=True):
@catch_parse_error
def _inherit(bbclass, data):
- bb.parse.BBHandler.inherit([bbclass], data)
+ bb.parse.BBHandler.inherit([bbclass], "configuration INHERITs", 0, data)
return data
class ParsingFailure(Exception):
diff --git a/lib/bb/parse/__init__.py b/lib/bb/parse/__init__.py
index c5005aec9..8b7ec73c5 100644
--- a/lib/bb/parse/__init__.py
+++ b/lib/bb/parse/__init__.py
@@ -37,6 +37,17 @@ logger = logging.getLogger("BitBake.Parsing")
class ParseError(Exception):
"""Exception raised when parsing fails"""
+ def __init__(self, msg, filename, lineno=0):
+ self.msg = msg
+ self.filename = filename
+ self.lineno = lineno
+ Exception.__init__(self, msg, filename, lineno)
+
+ def __str__(self):
+ if self.lineno:
+ return "ParseError at %s:%d: %s" % (self.filename, self.lineno, self.msg)
+ else:
+ return "ParseError in %s: %s" % (self.filename, self.msg)
class SkipPackage(Exception):
"""Exception raised to skip this package"""
@@ -78,7 +89,7 @@ def handle(fn, data, include = 0):
for h in handlers:
if h['supports'](fn, data):
return h['handle'](fn, data, include)
- raise ParseError("%s is not a BitBake file" % fn)
+ raise ParseError("not a BitBake file", fn)
def init(fn, data):
for h in handlers:
@@ -111,7 +122,7 @@ def vars_from_file(mypkg, d):
parts = myfile[0].split('_')
__pkgsplit_cache__[mypkg] = parts
if len(parts) > 3:
- raise ParseError("Unable to generate default variables from the filename: %s (too many underscores)" % mypkg)
+ raise ParseError("Unable to generate default variables from filename (too many underscores)", mypkg)
exp = 3 - len(parts)
tmplist = []
while exp != 0:
diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py
index 31c930d9c..94fa175bb 100644
--- a/lib/bb/parse/ast.py
+++ b/lib/bb/parse/ast.py
@@ -59,9 +59,9 @@ class IncludeNode(AstNode):
# TODO: Cache those includes... maybe not here though
if self.force:
- bb.parse.ConfHandler.include(self.filename, s, data, "include required")
+ bb.parse.ConfHandler.include(self.filename, s, self.lineno, data, "include required")
else:
- bb.parse.ConfHandler.include(self.filename, s, data, False)
+ bb.parse.ConfHandler.include(self.filename, s, self.lineno, data, False)
class ExportNode(AstNode):
def __init__(self, filename, lineno, var):
@@ -267,7 +267,7 @@ class InheritNode(AstNode):
self.classes = classes
def eval(self, data):
- bb.parse.BBHandler.inherit(self.classes, data)
+ bb.parse.BBHandler.inherit(self.classes, self.filename, self.lineno, data)
def handleInclude(statements, filename, lineno, m, force):
statements.append(IncludeNode(filename, lineno, m.group(1), force))
@@ -450,7 +450,7 @@ def multi_finalize(fn, d):
d.setVar("BBEXTENDVARIANT", variantmap[name])
else:
d.setVar("PN", "%s-%s" % (pn, name))
- bb.parse.BBHandler.inherit([extendedmap[name]], d)
+ bb.parse.BBHandler.inherit([extendedmap[name]], fn, 0, d)
safe_d.setVar("BBCLASSEXTEND", extended)
_create_variants(datastores, extendedmap.keys(), extendfunc)
diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py
index 2d6e331a1..125f458de 100644
--- a/lib/bb/parse/parse_py/BBHandler.py
+++ b/lib/bb/parse/parse_py/BBHandler.py
@@ -68,10 +68,8 @@ def supports(fn, d):
"""Return True if fn has a supported extension"""
return os.path.splitext(fn)[-1] in [".bb", ".bbclass", ".inc"]
-def inherit(files, d):
+def inherit(files, fn, lineno, d):
__inherit_cache = data.getVar('__inherit_cache', d) or []
- fn = ""
- lineno = 0
for file in files:
file = data.expand(file, d)
if not os.path.isabs(file) and not file.endswith(".bbclass"):
@@ -81,7 +79,7 @@ def inherit(files, d):
logger.log(logging.DEBUG -1, "BB %s:%d: inheriting %s", fn, lineno, file)
__inherit_cache.append( file )
data.setVar('__inherit_cache', __inherit_cache, d)
- include(fn, file, d, "inherit")
+ include(fn, file, lineno, d, "inherit")
__inherit_cache = data.getVar('__inherit_cache', d) or []
def get_statements(filename, absolute_filename, base_name):
diff --git a/lib/bb/parse/parse_py/ConfHandler.py b/lib/bb/parse/parse_py/ConfHandler.py
index 6ae9d973e..9242632c5 100644
--- a/lib/bb/parse/parse_py/ConfHandler.py
+++ b/lib/bb/parse/parse_py/ConfHandler.py
@@ -44,10 +44,11 @@ def init(data):
def supports(fn, d):
return fn[-5:] == ".conf"
-def include(oldfn, fn, data, error_out):
+def include(oldfn, fn, lineno, data, error_out):
"""
- error_out If True a ParseError will be raised if the to be included
- config-files could not be included.
+ error_out: A string indicating the verb (e.g. "include", "inherit") to be
+ used in a ParseError that will be raised if the file to be included could
+ not be included. Specify False to avoid raising an error in this case.
"""
if oldfn == fn: # prevent infinite recursion
return None
@@ -68,7 +69,7 @@ def include(oldfn, fn, data, error_out):
ret = handle(fn, data, True)
except IOError:
if error_out:
- raise ParseError("Could not %(error_out)s file %(fn)s" % vars() )
+ raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), oldfn, lineno)
logger.debug(2, "CONF file '%s' not found", fn)
def handle(fn, data, include):
@@ -131,7 +132,7 @@ def feeder(lineno, s, fn, statements):
ast.handleExport(statements, fn, lineno, m)
return
- raise ParseError("%s:%d: unparsed line: '%s'" % (fn, lineno, s));
+ raise ParseError("unparsed line: '%s'" % s, fn, lineno);
# Add us to the handlers list
from bb.parse import handlers