@@ -55,7 +55,8 @@ class IncludeAllNode(AstNode):
s = data.expand(self.what_file)
logger.debug2("CONF %s:%s: including %s", self.filename, self.lineno, s)
- for path in data.getVar("BBPATH").split(":"):
+ # A directory listed more than once in BBPATH is only searched once
+ for path in dict.fromkeys(data.getVar("BBPATH").split(":")):
bb.parse.ConfHandler.include(self.filename, os.path.join(path, s), self.lineno, data, False)
class ExportNode(AstNode):
@@ -511,6 +511,26 @@ EXTRA_OECONF:append = " foobar"
test_helper("include_all some.conf", " bar foo")
test_helper("include_all some3.conf", " foobar")
+ def test_include_all_duplicate_bbpath(self):
+ # A directory listed more than once in BBPATH is only searched once
+ with tempfile.TemporaryDirectory() as tempdir:
+ os.makedirs(tempdir + "/conf1")
+ os.makedirs(tempdir + "/conf2")
+ with open(tempdir + "/conf1/some.conf", "w") as f:
+ f.write(self.someconf1)
+ with open(tempdir + "/conf2/some.conf", "w") as f:
+ f.write(self.someconf2)
+
+ self.d.setVar("BBPATH", ":".join([tempdir + "/conf1", tempdir + "/conf2", tempdir + "/conf1"]))
+
+ with self.parsehelper("include_all some.conf") as f:
+ with self.assertLogs("BitBake.Parsing", level="WARNING") as logs:
+ d = bb.parse.handle(f.name, bb.data.createCopy(self.d))['']
+ # assertLogs fails if nothing is logged at all
+ bb.parse.logger.warning("parse done")
+ self.assertEqual(d.getVar("EXTRA_OECONF"), " foo bar")
+ self.assertEqual(logs.output, ["WARNING:BitBake.Parsing:parse done"])
+
def test_file_variables(self):
# Tests the values of FILE and __BB_RECIPE_FILE in different
# combinations of bbappends, includes, and inherits
A directory listed twice in BBPATH made include_all apply the file from it twice and warn "Duplicate inclusion". The layer index hits this with the core layer in both its initial BBPATH and layer.conf. Skip directories already searched. Fixes one source of the warnings in [YOCTO #16451]. AI-Generated: Claude Opus 5.5 Signed-off-by: Tim Orling <tim.orling@konsulko.com> --- lib/bb/parse/ast.py | 3 ++- lib/bb/tests/parse.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-)