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: |