@@ -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)))
@@ -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)
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. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- lib/bb/parse/ast.py | 18 ++++++++++++++++++ lib/bb/parse/parse_py/ConfHandler.py | 6 ++++++ 2 files changed, 24 insertions(+)