From 5cb3d1a59cb423cc672720f797236578cac19628 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 14 Dec 2024 20:03:17 +0800 Subject: bitbake: parse: Add include_all conf file directive In some cases it would be helpful to be able to have an include file in a standard location which is included in all layers that are added to the system. The intent is for these to provide configuration tweaks of specific types so that a given file pattern can be adopted more widely for such configuration. The code will search for any named configuration file within BBPATH, so a configuration directive of: include_all conf/distro/include/myinc.conf would include the myinc.conf file in that subpath if present in any directory in BBPATH. Multiple files will be included if present. (Bitbake rev: d01d5593e7829ac60f37bc23cb87dc6917026471) Signed-off-by: Richard Purdie --- bitbake/lib/bb/parse/ast.py | 18 ++++++++++++++++++ bitbake/lib/bb/parse/parse_py/ConfHandler.py | 6 ++++++ 2 files changed, 24 insertions(+) (limited to 'bitbake') diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 03370180e3..2f6c6a0055 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py @@ -43,6 +43,21 @@ class IncludeNode(AstNode): else: bb.parse.ConfHandler.include(self.filename, s, self.lineno, data, False) +class IncludeAllNode(AstNode): + def __init__(self, filename, lineno, what_file): + AstNode.__init__(self, filename, lineno) + self.what_file = what_file + + def eval(self, data): + """ + Include the file and evaluate the statements + """ + 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(":"): + bb.parse.ConfHandler.include(self.filename, os.path.join(path, s), self.lineno, data, False) + class ExportNode(AstNode): def __init__(self, filename, lineno, var): AstNode.__init__(self, filename, lineno) @@ -366,6 +381,9 @@ class AddFragmentsNode(AstNode): def handleInclude(statements, filename, lineno, m, force): statements.append(IncludeNode(filename, lineno, m.group(1), force)) +def handleIncludeAll(statements, filename, lineno, m): + statements.append(IncludeAllNode(filename, lineno, m.group(1))) + def handleExport(statements, filename, lineno, m): statements.append(ExportNode(filename, lineno, m.group(1))) diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py index d0711eda04..24f81f7e9e 100644 --- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py +++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py @@ -43,6 +43,7 @@ __config_regexp__ = re.compile( r""" """, re.X) __include_regexp__ = re.compile( r"include\s+(.+)" ) __require_regexp__ = re.compile( r"require\s+(.+)" ) +__includeall_regexp__ = re.compile( r"include_all\s+(.+)" ) __export_regexp__ = re.compile( r"export\s+([a-zA-Z0-9\-_+.${}/~]+)$" ) __unset_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)$" ) __unset_flag_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)\[([a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@]+)\]$" ) @@ -178,6 +179,11 @@ def feeder(lineno, s, fn, statements, baseconfig=False, conffile=True): ast.handleInclude(statements, fn, lineno, m, True) return + m = __includeall_regexp__.match(s) + if m: + ast.handleIncludeAll(statements, fn, lineno, m) + return + m = __export_regexp__.match(s) if m: ast.handleExport(statements, fn, lineno, m) -- cgit v1.2.3-54-g00ecf