summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/data.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-04-02 09:21:13 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-04-03 17:51:26 +0100
commit70d6360602766232ca096ee427bb85564ac16a69 (patch)
treeaf5c36db793b01bdec5156656f2632df98d0bc37 /bitbake/lib/bb/data.py
parentb868387c425cca35c06179b90d44422fbaf2a9ab (diff)
downloadpoky-70d6360602766232ca096ee427bb85564ac16a69.tar.gz
bitbake: data: Ensure vardepsexclude or BB_BASEHASH_IGNORE_VARS covers contains items
Adding bb.utils.filter('WARN_QA', 'patch-fuzz', d) when WARN_QA is in BB_BASEHASH_IGNORE_VARS or in vardepsexclude should not add a dependency on WARN_QA. Fix it and add some tests. (Bitbake rev: 6aecc2fe51a52020f6f13be08449e18d42e7a6b5) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/data.py')
-rw-r--r--bitbake/lib/bb/data.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 5d02bab99b..363901b5d3 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -272,7 +272,7 @@ def update_data(d):
272 """Performs final steps upon the datastore, including application of overrides""" 272 """Performs final steps upon the datastore, including application of overrides"""
273 d.finalize(parent = True) 273 d.finalize(parent = True)
274 274
275def build_dependencies(key, keys, shelldeps, varflagsexcl, d): 275def build_dependencies(key, keys, shelldeps, varflagsexcl, ignored_vars, d):
276 deps = set() 276 deps = set()
277 try: 277 try:
278 if key[-1] == ']': 278 if key[-1] == ']':
@@ -283,12 +283,15 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
283 return deps, value 283 return deps, value
284 varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {} 284 varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {}
285 vardeps = varflags.get("vardeps") 285 vardeps = varflags.get("vardeps")
286 exclusions = varflags.get("vardepsexclude", "").split()
286 287
287 def handle_contains(value, contains, d): 288 def handle_contains(value, contains, exclusions, d):
288 newvalue = [] 289 newvalue = []
289 if value: 290 if value:
290 newvalue.append(str(value)) 291 newvalue.append(str(value))
291 for k in sorted(contains): 292 for k in sorted(contains):
293 if k in exclusions or k in ignored_vars:
294 continue
292 l = (d.getVar(k) or "").split() 295 l = (d.getVar(k) or "").split()
293 for item in sorted(contains[k]): 296 for item in sorted(contains[k]):
294 for word in item.split(): 297 for word in item.split():
@@ -316,7 +319,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
316 parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno")) 319 parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno"))
317 deps = deps | parser.references 320 deps = deps | parser.references
318 deps = deps | (keys & parser.execs) 321 deps = deps | (keys & parser.execs)
319 value = handle_contains(value, parser.contains, d) 322 value = handle_contains(value, parser.contains, exclusions, d)
320 else: 323 else:
321 value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True) 324 value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True)
322 parser = bb.codeparser.ShellParser(key, logger) 325 parser = bb.codeparser.ShellParser(key, logger)
@@ -324,9 +327,9 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
324 deps = deps | shelldeps 327 deps = deps | shelldeps
325 deps = deps | parsedvar.references 328 deps = deps | parsedvar.references
326 deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) 329 deps = deps | (keys & parser.execs) | (keys & parsedvar.execs)
327 value = handle_contains(value, parsedvar.contains, d) 330 value = handle_contains(value, parsedvar.contains, exclusions, d)
328 if hasattr(parsedvar, "removes"): 331 if hasattr(parsedvar, "removes"):
329 value = handle_remove(value, deps, parsedvar.removes, d) 332 value = handle_remove(value, deps, parsedvar.removes, varflags, d)
330 if vardeps is None: 333 if vardeps is None:
331 parser.log.flush() 334 parser.log.flush()
332 if "prefuncs" in varflags: 335 if "prefuncs" in varflags:
@@ -339,7 +342,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
339 value, parser = d.getVarFlag(key, "_content", False, retparser=True) 342 value, parser = d.getVarFlag(key, "_content", False, retparser=True)
340 deps |= parser.references 343 deps |= parser.references
341 deps = deps | (keys & parser.execs) 344 deps = deps | (keys & parser.execs)
342 value = handle_contains(value, parser.contains, d) 345 value = handle_contains(value, parser.contains, exclusions, d)
343 if hasattr(parser, "removes"): 346 if hasattr(parser, "removes"):
344 value = handle_remove(value, deps, parser.removes, d) 347 value = handle_remove(value, deps, parser.removes, d)
345 348
@@ -359,7 +362,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
359 deps |= set(varfdeps) 362 deps |= set(varfdeps)
360 363
361 deps |= set((vardeps or "").split()) 364 deps |= set((vardeps or "").split())
362 deps -= set(varflags.get("vardepsexclude", "").split()) 365 deps -= set(exclusions)
363 except bb.parse.SkipRecipe: 366 except bb.parse.SkipRecipe:
364 raise 367 raise
365 except Exception as e: 368 except Exception as e:
@@ -380,7 +383,7 @@ def generate_dependencies(d, ignored_vars):
380 383
381 tasklist = d.getVar('__BBTASKS', False) or [] 384 tasklist = d.getVar('__BBTASKS', False) or []
382 for task in tasklist: 385 for task in tasklist:
383 deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, d) 386 deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, ignored_vars, d)
384 newdeps = deps[task] 387 newdeps = deps[task]
385 seen = set() 388 seen = set()
386 while newdeps: 389 while newdeps:
@@ -389,7 +392,7 @@ def generate_dependencies(d, ignored_vars):
389 newdeps = set() 392 newdeps = set()
390 for dep in nextdeps: 393 for dep in nextdeps:
391 if dep not in deps: 394 if dep not in deps:
392 deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, d) 395 deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, ignored_vars, d)
393 newdeps |= deps[dep] 396 newdeps |= deps[dep]
394 newdeps -= seen 397 newdeps -= seen
395 #print "For %s: %s" % (task, str(deps[task])) 398 #print "For %s: %s" % (task, str(deps[task]))