diff options
| -rwxr-xr-x | bitbake/bin/bitbake-worker | 1 | ||||
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 1 | ||||
| -rw-r--r-- | bitbake/lib/bb/cookerdata.py | 1 | ||||
| -rw-r--r-- | bitbake/lib/bb/data.py | 2 | ||||
| -rw-r--r-- | bitbake/lib/bb/parse/parse_py/BBHandler.py | 29 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/parse.py | 1 | ||||
| -rw-r--r-- | bitbake/lib/bblayers/query.py | 26 |
7 files changed, 39 insertions, 22 deletions
diff --git a/bitbake/bin/bitbake-worker b/bitbake/bin/bitbake-worker index 2f3e9f72f9..7be39370b3 100755 --- a/bitbake/bin/bitbake-worker +++ b/bitbake/bin/bitbake-worker | |||
| @@ -457,6 +457,7 @@ class BitbakeWorker(object): | |||
| 457 | for mc in self.databuilder.mcdata: | 457 | for mc in self.databuilder.mcdata: |
| 458 | self.databuilder.mcdata[mc].setVar("PRSERV_HOST", self.workerdata["prhost"]) | 458 | self.databuilder.mcdata[mc].setVar("PRSERV_HOST", self.workerdata["prhost"]) |
| 459 | self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.workerdata["hashservaddr"]) | 459 | self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.workerdata["hashservaddr"]) |
| 460 | self.databuilder.mcdata[mc].setVar("__bbclasstype", "recipe") | ||
| 460 | 461 | ||
| 461 | def handle_newtaskhashes(self, data): | 462 | def handle_newtaskhashes(self, data): |
| 462 | self.workerdata["newhashes"] = pickle.loads(data) | 463 | self.workerdata["newhashes"] = pickle.loads(data) |
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 2adf4d297d..1b6ee3032c 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -402,6 +402,7 @@ class BBCooker: | |||
| 402 | for mc in self.databuilder.mcdata.values(): | 402 | for mc in self.databuilder.mcdata.values(): |
| 403 | mc.renameVar("__depends", "__base_depends") | 403 | mc.renameVar("__depends", "__base_depends") |
| 404 | self.add_filewatch(mc.getVar("__base_depends", False), self.configwatcher) | 404 | self.add_filewatch(mc.getVar("__base_depends", False), self.configwatcher) |
| 405 | mc.setVar("__bbclasstype", "recipe") | ||
| 405 | 406 | ||
| 406 | self.baseconfig_valid = True | 407 | self.baseconfig_valid = True |
| 407 | self.parsecache_valid = False | 408 | self.parsecache_valid = False |
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index d54ac932e5..9706948ab3 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
| @@ -254,6 +254,7 @@ class CookerDataBuilder(object): | |||
| 254 | filtered_keys = bb.utils.approved_variables() | 254 | filtered_keys = bb.utils.approved_variables() |
| 255 | bb.data.inheritFromOS(self.basedata, self.savedenv, filtered_keys) | 255 | bb.data.inheritFromOS(self.basedata, self.savedenv, filtered_keys) |
| 256 | self.basedata.setVar("BB_ORIGENV", self.savedenv) | 256 | self.basedata.setVar("BB_ORIGENV", self.savedenv) |
| 257 | self.basedata.setVar("__bbclasstype", "global") | ||
| 257 | 258 | ||
| 258 | if worker: | 259 | if worker: |
| 259 | self.basedata.setVar("BB_WORKERCONTEXT", "1") | 260 | self.basedata.setVar("BB_WORKERCONTEXT", "1") |
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index c09d9b04bb..53fe34825d 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
| @@ -441,7 +441,7 @@ def generate_dependency_hash(tasklist, gendeps, lookupcache, ignored_vars, fn): | |||
| 441 | 441 | ||
| 442 | def inherits_class(klass, d): | 442 | def inherits_class(klass, d): |
| 443 | val = d.getVar('__inherit_cache', False) or [] | 443 | val = d.getVar('__inherit_cache', False) or [] |
| 444 | needle = os.path.join('classes', '%s.bbclass' % klass) | 444 | needle = '/%s.bbclass' % klass |
| 445 | for v in val: | 445 | for v in val: |
| 446 | if v.endswith(needle): | 446 | if v.endswith(needle): |
| 447 | return True | 447 | return True |
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 1189114341..18e6868387 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
| @@ -44,17 +44,24 @@ def inherit(files, fn, lineno, d): | |||
| 44 | __inherit_cache = d.getVar('__inherit_cache', False) or [] | 44 | __inherit_cache = d.getVar('__inherit_cache', False) or [] |
| 45 | files = d.expand(files).split() | 45 | files = d.expand(files).split() |
| 46 | for file in files: | 46 | for file in files: |
| 47 | if not os.path.isabs(file) and not file.endswith(".bbclass"): | 47 | classtype = d.getVar("__bbclasstype", False) |
| 48 | file = os.path.join('classes', '%s.bbclass' % file) | 48 | origfile = file |
| 49 | 49 | for t in ["classes-" + classtype, "classes"]: | |
| 50 | if not os.path.isabs(file): | 50 | file = origfile |
| 51 | bbpath = d.getVar("BBPATH") | 51 | if not os.path.isabs(file) and not file.endswith(".bbclass"): |
| 52 | abs_fn, attempts = bb.utils.which(bbpath, file, history=True) | 52 | file = os.path.join(t, '%s.bbclass' % file) |
| 53 | for af in attempts: | 53 | |
| 54 | if af != abs_fn: | 54 | if not os.path.isabs(file): |
| 55 | bb.parse.mark_dependency(d, af) | 55 | bbpath = d.getVar("BBPATH") |
| 56 | if abs_fn: | 56 | abs_fn, attempts = bb.utils.which(bbpath, file, history=True) |
| 57 | file = abs_fn | 57 | for af in attempts: |
| 58 | if af != abs_fn: | ||
| 59 | bb.parse.mark_dependency(d, af) | ||
| 60 | if abs_fn: | ||
| 61 | file = abs_fn | ||
| 62 | |||
| 63 | if os.path.exists(file): | ||
| 64 | break | ||
| 58 | 65 | ||
| 59 | if not os.path.exists(file): | 66 | if not os.path.exists(file): |
| 60 | raise ParseError("Could not inherit file %s" % (file), fn, lineno) | 67 | raise ParseError("Could not inherit file %s" % (file), fn, lineno) |
diff --git a/bitbake/lib/bb/tests/parse.py b/bitbake/lib/bb/tests/parse.py index 1a3b74934d..ee7f2534f1 100644 --- a/bitbake/lib/bb/tests/parse.py +++ b/bitbake/lib/bb/tests/parse.py | |||
| @@ -164,6 +164,7 @@ python () { | |||
| 164 | # become unset/disappear. | 164 | # become unset/disappear. |
| 165 | # | 165 | # |
| 166 | def test_parse_classextend_contamination(self): | 166 | def test_parse_classextend_contamination(self): |
| 167 | self.d.setVar("__bbclasstype", "recipe") | ||
| 167 | cls = self.parsehelper(self.classextend_bbclass, suffix=".bbclass") | 168 | cls = self.parsehelper(self.classextend_bbclass, suffix=".bbclass") |
| 168 | #clsname = os.path.basename(cls.name).replace(".bbclass", "") | 169 | #clsname = os.path.basename(cls.name).replace(".bbclass", "") |
| 169 | self.classextend = self.classextend.replace("###CLASS###", cls.name) | 170 | self.classextend = self.classextend.replace("###CLASS###", cls.name) |
diff --git a/bitbake/lib/bblayers/query.py b/bitbake/lib/bblayers/query.py index 9142ec4474..afd39518e5 100644 --- a/bitbake/lib/bblayers/query.py +++ b/bitbake/lib/bblayers/query.py | |||
| @@ -57,11 +57,12 @@ are overlayed will also be listed, with a " (skipped)" suffix. | |||
| 57 | # Check for overlayed .bbclass files | 57 | # Check for overlayed .bbclass files |
| 58 | classes = collections.defaultdict(list) | 58 | classes = collections.defaultdict(list) |
| 59 | for layerdir in self.bblayers: | 59 | for layerdir in self.bblayers: |
| 60 | classdir = os.path.join(layerdir, 'classes') | 60 | for c in ["classes-global", "classes-recipe", "classes"]: |
| 61 | if os.path.exists(classdir): | 61 | classdir = os.path.join(layerdir, c) |
| 62 | for classfile in os.listdir(classdir): | 62 | if os.path.exists(classdir): |
| 63 | if os.path.splitext(classfile)[1] == '.bbclass': | 63 | for classfile in os.listdir(classdir): |
| 64 | classes[classfile].append(classdir) | 64 | if os.path.splitext(classfile)[1] == '.bbclass': |
| 65 | classes[classfile].append(classdir) | ||
| 65 | 66 | ||
| 66 | # Locating classes and other files is a bit more complicated than recipes - | 67 | # Locating classes and other files is a bit more complicated than recipes - |
| 67 | # layer priority is not a factor; instead BitBake uses the first matching | 68 | # layer priority is not a factor; instead BitBake uses the first matching |
| @@ -124,9 +125,14 @@ skipped recipes will also be listed, with a " (skipped)" suffix. | |||
| 124 | if inherits: | 125 | if inherits: |
| 125 | bbpath = str(self.tinfoil.config_data.getVar('BBPATH')) | 126 | bbpath = str(self.tinfoil.config_data.getVar('BBPATH')) |
| 126 | for classname in inherits: | 127 | for classname in inherits: |
| 127 | classfile = 'classes/%s.bbclass' % classname | 128 | found = False |
| 128 | if not bb.utils.which(bbpath, classfile, history=False): | 129 | for c in ["classes-global", "classes-recipe", "classes"]: |
| 129 | logger.error('No class named %s found in BBPATH', classfile) | 130 | cfile = c + '/%s.bbclass' % classname |
| 131 | if bb.utils.which(bbpath, cfile, history=False): | ||
| 132 | found = True | ||
| 133 | break | ||
| 134 | if not found: | ||
| 135 | logger.error('No class named %s found in BBPATH', classname) | ||
| 130 | sys.exit(1) | 136 | sys.exit(1) |
| 131 | 137 | ||
| 132 | pkg_pn = self.tinfoil.cooker.recipecaches[mc].pkg_pn | 138 | pkg_pn = self.tinfoil.cooker.recipecaches[mc].pkg_pn |
| @@ -174,7 +180,7 @@ skipped recipes will also be listed, with a " (skipped)" suffix. | |||
| 174 | logger.plain(" %s %s%s", layer.ljust(20), ver, skipped) | 180 | logger.plain(" %s %s%s", layer.ljust(20), ver, skipped) |
| 175 | 181 | ||
| 176 | global_inherit = (self.tinfoil.config_data.getVar('INHERIT') or "").split() | 182 | global_inherit = (self.tinfoil.config_data.getVar('INHERIT') or "").split() |
| 177 | cls_re = re.compile('classes/') | 183 | cls_re = re.compile('classes.*/') |
| 178 | 184 | ||
| 179 | preffiles = [] | 185 | preffiles = [] |
| 180 | show_unique_pn = [] | 186 | show_unique_pn = [] |
| @@ -407,7 +413,7 @@ NOTE: .bbappend files can impact the dependencies. | |||
| 407 | self.check_cross_depends("RRECOMMENDS", layername, f, best, args.filenames, ignore_layers) | 413 | self.check_cross_depends("RRECOMMENDS", layername, f, best, args.filenames, ignore_layers) |
| 408 | 414 | ||
| 409 | # The inherit class | 415 | # The inherit class |
| 410 | cls_re = re.compile('classes/') | 416 | cls_re = re.compile('classes.*/') |
| 411 | if f in self.tinfoil.cooker_data.inherits: | 417 | if f in self.tinfoil.cooker_data.inherits: |
| 412 | inherits = self.tinfoil.cooker_data.inherits[f] | 418 | inherits = self.tinfoil.cooker_data.inherits[f] |
| 413 | for cls in inherits: | 419 | for cls in inherits: |
