mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 00:49:33 +02:00
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>
This commit is contained in:
@@ -272,7 +272,7 @@ def update_data(d):
|
|||||||
"""Performs final steps upon the datastore, including application of overrides"""
|
"""Performs final steps upon the datastore, including application of overrides"""
|
||||||
d.finalize(parent = True)
|
d.finalize(parent = True)
|
||||||
|
|
||||||
def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
def build_dependencies(key, keys, shelldeps, varflagsexcl, ignored_vars, d):
|
||||||
deps = set()
|
deps = set()
|
||||||
try:
|
try:
|
||||||
if key[-1] == ']':
|
if key[-1] == ']':
|
||||||
@@ -283,12 +283,15 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
|||||||
return deps, value
|
return deps, value
|
||||||
varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {}
|
varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {}
|
||||||
vardeps = varflags.get("vardeps")
|
vardeps = varflags.get("vardeps")
|
||||||
|
exclusions = varflags.get("vardepsexclude", "").split()
|
||||||
|
|
||||||
def handle_contains(value, contains, d):
|
def handle_contains(value, contains, exclusions, d):
|
||||||
newvalue = []
|
newvalue = []
|
||||||
if value:
|
if value:
|
||||||
newvalue.append(str(value))
|
newvalue.append(str(value))
|
||||||
for k in sorted(contains):
|
for k in sorted(contains):
|
||||||
|
if k in exclusions or k in ignored_vars:
|
||||||
|
continue
|
||||||
l = (d.getVar(k) or "").split()
|
l = (d.getVar(k) or "").split()
|
||||||
for item in sorted(contains[k]):
|
for item in sorted(contains[k]):
|
||||||
for word in item.split():
|
for word in item.split():
|
||||||
@@ -316,7 +319,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
|||||||
parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno"))
|
parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno"))
|
||||||
deps = deps | parser.references
|
deps = deps | parser.references
|
||||||
deps = deps | (keys & parser.execs)
|
deps = deps | (keys & parser.execs)
|
||||||
value = handle_contains(value, parser.contains, d)
|
value = handle_contains(value, parser.contains, exclusions, d)
|
||||||
else:
|
else:
|
||||||
value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True)
|
value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True)
|
||||||
parser = bb.codeparser.ShellParser(key, logger)
|
parser = bb.codeparser.ShellParser(key, logger)
|
||||||
@@ -324,9 +327,9 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
|||||||
deps = deps | shelldeps
|
deps = deps | shelldeps
|
||||||
deps = deps | parsedvar.references
|
deps = deps | parsedvar.references
|
||||||
deps = deps | (keys & parser.execs) | (keys & parsedvar.execs)
|
deps = deps | (keys & parser.execs) | (keys & parsedvar.execs)
|
||||||
value = handle_contains(value, parsedvar.contains, d)
|
value = handle_contains(value, parsedvar.contains, exclusions, d)
|
||||||
if hasattr(parsedvar, "removes"):
|
if hasattr(parsedvar, "removes"):
|
||||||
value = handle_remove(value, deps, parsedvar.removes, d)
|
value = handle_remove(value, deps, parsedvar.removes, varflags, d)
|
||||||
if vardeps is None:
|
if vardeps is None:
|
||||||
parser.log.flush()
|
parser.log.flush()
|
||||||
if "prefuncs" in varflags:
|
if "prefuncs" in varflags:
|
||||||
@@ -339,7 +342,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
|||||||
value, parser = d.getVarFlag(key, "_content", False, retparser=True)
|
value, parser = d.getVarFlag(key, "_content", False, retparser=True)
|
||||||
deps |= parser.references
|
deps |= parser.references
|
||||||
deps = deps | (keys & parser.execs)
|
deps = deps | (keys & parser.execs)
|
||||||
value = handle_contains(value, parser.contains, d)
|
value = handle_contains(value, parser.contains, exclusions, d)
|
||||||
if hasattr(parser, "removes"):
|
if hasattr(parser, "removes"):
|
||||||
value = handle_remove(value, deps, parser.removes, d)
|
value = handle_remove(value, deps, parser.removes, d)
|
||||||
|
|
||||||
@@ -359,7 +362,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
|
|||||||
deps |= set(varfdeps)
|
deps |= set(varfdeps)
|
||||||
|
|
||||||
deps |= set((vardeps or "").split())
|
deps |= set((vardeps or "").split())
|
||||||
deps -= set(varflags.get("vardepsexclude", "").split())
|
deps -= set(exclusions)
|
||||||
except bb.parse.SkipRecipe:
|
except bb.parse.SkipRecipe:
|
||||||
raise
|
raise
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -380,7 +383,7 @@ def generate_dependencies(d, ignored_vars):
|
|||||||
|
|
||||||
tasklist = d.getVar('__BBTASKS', False) or []
|
tasklist = d.getVar('__BBTASKS', False) or []
|
||||||
for task in tasklist:
|
for task in tasklist:
|
||||||
deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, d)
|
deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, ignored_vars, d)
|
||||||
newdeps = deps[task]
|
newdeps = deps[task]
|
||||||
seen = set()
|
seen = set()
|
||||||
while newdeps:
|
while newdeps:
|
||||||
@@ -389,7 +392,7 @@ def generate_dependencies(d, ignored_vars):
|
|||||||
newdeps = set()
|
newdeps = set()
|
||||||
for dep in nextdeps:
|
for dep in nextdeps:
|
||||||
if dep not in deps:
|
if dep not in deps:
|
||||||
deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, d)
|
deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, ignored_vars, d)
|
||||||
newdeps |= deps[dep]
|
newdeps |= deps[dep]
|
||||||
newdeps -= seen
|
newdeps -= seen
|
||||||
#print "For %s: %s" % (task, str(deps[task]))
|
#print "For %s: %s" % (task, str(deps[task]))
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ d.getVar(a(), False)
|
|||||||
"filename": "example.bb",
|
"filename": "example.bb",
|
||||||
})
|
})
|
||||||
|
|
||||||
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
|
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
|
|
||||||
self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"]))
|
self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"]))
|
||||||
|
|
||||||
@@ -365,7 +365,7 @@ esac
|
|||||||
self.d.setVarFlags("FOO", {"func": True})
|
self.d.setVarFlags("FOO", {"func": True})
|
||||||
self.setEmptyVars(execs)
|
self.setEmptyVars(execs)
|
||||||
|
|
||||||
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
|
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
|
|
||||||
self.assertEqual(deps, set(["somevar", "inverted"] + execs))
|
self.assertEqual(deps, set(["somevar", "inverted"] + execs))
|
||||||
|
|
||||||
@@ -375,7 +375,7 @@ esac
|
|||||||
self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
|
self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
|
||||||
self.d.setVarFlag("FOO", "vardeps", "oe_libinstall")
|
self.d.setVarFlag("FOO", "vardeps", "oe_libinstall")
|
||||||
|
|
||||||
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
|
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
|
|
||||||
self.assertEqual(deps, set(["oe_libinstall"]))
|
self.assertEqual(deps, set(["oe_libinstall"]))
|
||||||
|
|
||||||
@@ -384,7 +384,7 @@ esac
|
|||||||
self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
|
self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
|
||||||
self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}")
|
self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}")
|
||||||
|
|
||||||
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
|
deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
|
|
||||||
self.assertEqual(deps, set(["oe_libinstall"]))
|
self.assertEqual(deps, set(["oe_libinstall"]))
|
||||||
|
|
||||||
@@ -399,7 +399,7 @@ esac
|
|||||||
# Check dependencies
|
# Check dependencies
|
||||||
self.d.setVar('ANOTHERVAR', expr)
|
self.d.setVar('ANOTHERVAR', expr)
|
||||||
self.d.setVar('TESTVAR', 'anothervalue testval testval2')
|
self.d.setVar('TESTVAR', 'anothervalue testval testval2')
|
||||||
deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), self.d)
|
deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
self.assertEqual(sorted(values.splitlines()),
|
self.assertEqual(sorted(values.splitlines()),
|
||||||
sorted([expr,
|
sorted([expr,
|
||||||
'TESTVAR{anothervalue} = Set',
|
'TESTVAR{anothervalue} = Set',
|
||||||
@@ -412,6 +412,24 @@ esac
|
|||||||
# Check final value
|
# Check final value
|
||||||
self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone'])
|
self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone'])
|
||||||
|
|
||||||
|
def test_contains_vardeps_excluded(self):
|
||||||
|
# Check the ignored_vars option to build_dependencies is handled by contains functionality
|
||||||
|
varval = '${TESTVAR2} ${@bb.utils.filter("TESTVAR", "somevalue anothervalue", d)}'
|
||||||
|
self.d.setVar('ANOTHERVAR', varval)
|
||||||
|
self.d.setVar('TESTVAR', 'anothervalue testval testval2')
|
||||||
|
self.d.setVar('TESTVAR2', 'testval3')
|
||||||
|
deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(["TESTVAR"]), self.d)
|
||||||
|
self.assertEqual(sorted(values.splitlines()), sorted([varval]))
|
||||||
|
self.assertEqual(deps, set(["TESTVAR2"]))
|
||||||
|
self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
|
||||||
|
|
||||||
|
# Check the vardepsexclude flag is handled by contains functionality
|
||||||
|
self.d.setVarFlag('ANOTHERVAR', 'vardepsexclude', 'TESTVAR')
|
||||||
|
deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), self.d)
|
||||||
|
self.assertEqual(sorted(values.splitlines()), sorted([varval]))
|
||||||
|
self.assertEqual(deps, set(["TESTVAR2"]))
|
||||||
|
self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
|
||||||
|
|
||||||
#Currently no wildcard support
|
#Currently no wildcard support
|
||||||
#def test_vardeps_wildcards(self):
|
#def test_vardeps_wildcards(self):
|
||||||
# self.d.setVar("oe_libinstall", "echo test")
|
# self.d.setVar("oe_libinstall", "echo test")
|
||||||
|
|||||||
Reference in New Issue
Block a user