diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index ad9af7b7d0..b66d0038ac 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -33,6 +33,7 @@ import sre_constants | |||
33 | import threading | 33 | import threading |
34 | from cStringIO import StringIO | 34 | from cStringIO import StringIO |
35 | from contextlib import closing | 35 | from contextlib import closing |
36 | from functools import wraps | ||
36 | import bb, bb.exceptions | 37 | import bb, bb.exceptions |
37 | from bb import utils, data, parse, event, cache, providers, taskdata, command, runqueue | 38 | from bb import utils, data, parse, event, cache, providers, taskdata, command, runqueue |
38 | 39 | ||
@@ -637,13 +638,6 @@ class BBCooker: | |||
637 | path, _ = os.path.split(path) | 638 | path, _ = os.path.split(path) |
638 | 639 | ||
639 | def parseConfigurationFiles(self, files): | 640 | def parseConfigurationFiles(self, files): |
640 | def _parse(f, data, include=False): | ||
641 | try: | ||
642 | return bb.parse.handle(f, data, include) | ||
643 | except (IOError, bb.parse.ParseError) as exc: | ||
644 | parselog.critical("Unable to parse %s: %s" % (f, exc)) | ||
645 | sys.exit(1) | ||
646 | |||
647 | data = self.configuration.data | 641 | data = self.configuration.data |
648 | bb.parse.init_parser(data) | 642 | bb.parse.init_parser(data) |
649 | for f in files: | 643 | for f in files: |
@@ -671,9 +665,9 @@ class BBCooker: | |||
671 | data = _parse(os.path.join("conf", "bitbake.conf"), data) | 665 | data = _parse(os.path.join("conf", "bitbake.conf"), data) |
672 | 666 | ||
673 | # Handle any INHERITs and inherit the base class | 667 | # Handle any INHERITs and inherit the base class |
674 | inherits = ["base"] + (data.getVar('INHERIT', True) or "").split() | 668 | bbclasses = ["base"] + (data.getVar('INHERIT', True) or "").split() |
675 | for inherit in inherits: | 669 | for bbclass in bbclasses: |
676 | data = _parse(os.path.join('classes', '%s.bbclass' % inherit), data, True) | 670 | data = _inherit(bbclass, data) |
677 | 671 | ||
678 | # Nomally we only register event handlers at the end of parsing .bb files | 672 | # Nomally we only register event handlers at the end of parsing .bb files |
679 | # We register any handlers we've found so far here... | 673 | # We register any handlers we've found so far here... |
@@ -1123,6 +1117,26 @@ class CookerExit(bb.event.Event): | |||
1123 | def __init__(self): | 1117 | def __init__(self): |
1124 | bb.event.Event.__init__(self) | 1118 | bb.event.Event.__init__(self) |
1125 | 1119 | ||
1120 | def catch_parse_error(func): | ||
1121 | """Exception handling bits for our parsing""" | ||
1122 | @wraps(func) | ||
1123 | def wrapped(fn, *args): | ||
1124 | try: | ||
1125 | return func(fn, *args) | ||
1126 | except (IOError, bb.parse.ParseError, bb.data_smart.ExpansionError) as exc: | ||
1127 | parselog.critical("Unable to parse %s: %s" % (fn, exc)) | ||
1128 | sys.exit(1) | ||
1129 | return wrapped | ||
1130 | |||
1131 | @catch_parse_error | ||
1132 | def _parse(fn, data, include=False): | ||
1133 | return bb.parse.handle(fn, data, include) | ||
1134 | |||
1135 | @catch_parse_error | ||
1136 | def _inherit(bbclass, data): | ||
1137 | bb.parse.BBHandler.inherit([bbclass], data) | ||
1138 | return data | ||
1139 | |||
1126 | class ParsingFailure(Exception): | 1140 | class ParsingFailure(Exception): |
1127 | def __init__(self, realexception, recipe): | 1141 | def __init__(self, realexception, recipe): |
1128 | self.realexception = realexception | 1142 | self.realexception = realexception |