summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorJoe Slater <jslater@windriver.com>2016-09-14 10:29:52 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-21 21:58:06 +0100
commitf1d8f1e6931f349ae701b407930506c78aaafe37 (patch)
treef478bc32ce113da89b5838a53ceea513e239d43a /bitbake
parent74acb91a798eb41e98217229d6475a9fda3a7542 (diff)
downloadpoky-f1d8f1e6931f349ae701b407930506c78aaafe37.tar.gz
bitbake: cooker.py: add LAYERRECOMMENDS processing
Add recommended layers to collection_depends[] so that dynamic priority assignment will work for both depends and recommends. Recommended layers do not cause an error or warning if they are not in the collection list, but debug messages are output for level 3 and above. explode_dep_versions2 returns a dictionary, so we change the variable deplist to depDict. The dictionary values are lists which are either empty or contain only one version specification. (Bitbake rev: 20cdc3d609f8aea992f97c3db336574d3a549973) Signed-off-by: Joe Slater <jslater@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cooker.py37
1 files changed, 34 insertions, 3 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index cc8891f48b..f3252640cb 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1147,6 +1147,8 @@ class BBCooker:
1147 collection_list = collections.split() 1147 collection_list = collections.split()
1148 min_prio = 0 1148 min_prio = 0
1149 for c in collection_list: 1149 for c in collection_list:
1150 bb.debug(1,'Processing %s in collection list' % (c))
1151
1150 # Get collection priority if defined explicitly 1152 # Get collection priority if defined explicitly
1151 priority = self.data.getVar("BBFILE_PRIORITY_%s" % c, True) 1153 priority = self.data.getVar("BBFILE_PRIORITY_%s" % c, True)
1152 if priority: 1154 if priority:
@@ -1165,10 +1167,10 @@ class BBCooker:
1165 deps = self.data.getVar("LAYERDEPENDS_%s" % c, True) 1167 deps = self.data.getVar("LAYERDEPENDS_%s" % c, True)
1166 if deps: 1168 if deps:
1167 try: 1169 try:
1168 deplist = bb.utils.explode_dep_versions2(deps) 1170 depDict = bb.utils.explode_dep_versions2(deps)
1169 except bb.utils.VersionStringException as vse: 1171 except bb.utils.VersionStringException as vse:
1170 bb.fatal('Error parsing LAYERDEPENDS_%s: %s' % (c, str(vse))) 1172 bb.fatal('Error parsing LAYERDEPENDS_%s: %s' % (c, str(vse)))
1171 for dep, oplist in list(deplist.items()): 1173 for dep, oplist in list(depDict.items()):
1172 if dep in collection_list: 1174 if dep in collection_list:
1173 for opstr in oplist: 1175 for opstr in oplist:
1174 layerver = self.data.getVar("LAYERVERSION_%s" % dep, True) 1176 layerver = self.data.getVar("LAYERVERSION_%s" % dep, True)
@@ -1187,10 +1189,39 @@ class BBCooker:
1187 else: 1189 else:
1188 parselog.error("Layer '%s' depends on layer '%s', but this layer is not enabled in your configuration", c, dep) 1190 parselog.error("Layer '%s' depends on layer '%s', but this layer is not enabled in your configuration", c, dep)
1189 errors = True 1191 errors = True
1190 collection_depends[c] = deplist.keys() 1192 collection_depends[c] = list(depDict.keys())
1191 else: 1193 else:
1192 collection_depends[c] = [] 1194 collection_depends[c] = []
1193 1195
1196 # Check recommends and store information for priority calculation
1197 recs = self.data.getVar("LAYERRECOMMENDS_%s" % c, True)
1198 if recs:
1199 try:
1200 recDict = bb.utils.explode_dep_versions2(recs)
1201 except bb.utils.VersionStringException as vse:
1202 bb.fatal('Error parsing LAYERRECOMMENDS_%s: %s' % (c, str(vse)))
1203 for rec, oplist in list(recDict.items()):
1204 if rec in collection_list:
1205 if oplist:
1206 opstr = oplist[0]
1207 layerver = self.data.getVar("LAYERVERSION_%s" % rec, True)
1208 if layerver:
1209 (op, recver) = opstr.split()
1210 try:
1211 res = bb.utils.vercmp_string_op(layerver, recver, op)
1212 except bb.utils.VersionStringException as vse:
1213 bb.fatal('Error parsing LAYERRECOMMENDS_%s: %s' % (c, str(vse)))
1214 if not res:
1215 parselog.debug(3,"Layer '%s' recommends version %s of layer '%s', but version %s is currently enabled in your configuration. Check that you are using the correct matching versions/branches of these two layers.", c, opstr, rec, layerver)
1216 continue
1217 else:
1218 parselog.debug(3,"Layer '%s' recommends version %s of layer '%s', which exists in your configuration but does not specify a version. Check that you are using the correct matching versions/branches of these two layers.", c, opstr, rec)
1219 continue
1220 parselog.debug(3,"Layer '%s' recommends layer '%s', so we are adding it", c, rec)
1221 collection_depends[c].append(rec)
1222 else:
1223 parselog.debug(3,"Layer '%s' recommends layer '%s', but this layer is not enabled in your configuration", c, rec)
1224
1194 # Recursively work out collection priorities based on dependencies 1225 # Recursively work out collection priorities based on dependencies
1195 def calc_layer_priority(collection): 1226 def calc_layer_priority(collection):
1196 if not collection_priorities[collection]: 1227 if not collection_priorities[collection]: