[bitbake-devel] [PATCH 1/1] add a syntax to clear variable
Peter Kjellerstedt
peter.kjellerstedt at axis.com
Mon Aug 15 14:44:49 UTC 2016
How will this interact with ?=, ??=, _append and _remove?
Shouldn't there be unit tests for this? It seems like it can easily
break and/or be broken by other changes.
//Peter
> -----Original Message-----
> From: bitbake-devel-bounces at lists.openembedded.org [mailto:bitbake-
> devel-bounces at lists.openembedded.org] On Behalf Of Jérémy Rosen
> Sent: den 21 juli 2016 12:56
> To: bitbake-devel at lists.openembedded.org
> Cc: Jérémy Rosen
> Subject: [bitbake-devel] [PATCH 1/1] add a syntax to clear variable
>
> From: Jérémy Rosen <jeremy.rosen at openwide.fr>
>
> unset VAR
> will clear variable VAR
> unset VAR[flag]
> will clear flag "flag" from var VAR
>
> Signed-off-by: Jérémy Rosen <jeremy.rosen at openwide.fr>
> ---
> .../bitbake-user-manual-metadata.xml | 17 +++++++++++
> bitbake/lib/bb/parse/ast.py | 33
> ++++++++++++++++++++++
> bitbake/lib/bb/parse/parse_py/ConfHandler.py | 12 ++++++++
> 3 files changed, 62 insertions(+)
>
> diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-
> metadata.xml b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-
> metadata.xml
> index 6329cd6..c42907e 100644
> --- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
> +++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
> @@ -333,6 +333,23 @@
> </para>
> </section>
>
> + <section id='unseting-variables'>
> + <title>Unseting variables</title>
> +
> + <para>
> + It is possible to completely remove a variable or a
> variable flag
> + from BitBake's internal data dictionary using the
> "unset" keyword
> + Here is an example:
> + <literallayout class='monospaced'>
> + unset DATE
> + unset do_fetch[noexec]
> + </literallayout>
> + This example results in the <filename>DATE</filename>
> being unset and the flag
> + <filename>do_fetch[noexec]</filename> to be cleared
> + </para>
> +
> + </section>
> +
> <section id='providing-pathnames'>
> <title>Providing Pathnames</title>
>
> diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
> index 8b9baa7..b407b09 100644
> --- a/bitbake/lib/bb/parse/ast.py
> +++ b/bitbake/lib/bb/parse/ast.py
> @@ -69,6 +69,33 @@ class ExportNode(AstNode):
> def eval(self, data):
> data.setVarFlag(self.var, "export", 1, op = 'exported')
>
> +class UnsetNode(AstNode):
> + def __init__(self, filename, lineno, var):
> + AstNode.__init__(self, filename, lineno)
> + self.var = var
> +
> + def eval(self, data):
> + loginfo = {
> + 'variable': self.var,
> + 'file': self.filename,
> + 'line': self.lineno,
> + }
> + data.delVar(self.var,**loginfo)
> +
> +class UnsetFlagNode(AstNode):
> + def __init__(self, filename, lineno, var, flag):
> + AstNode.__init__(self, filename, lineno)
> + self.var = var
> + self.flag = flag
> +
> + def eval(self, data):
> + loginfo = {
> + 'variable': self.var,
> + 'file': self.filename,
> + 'line': self.lineno,
> + }
> + data.delVarFlag(self.var, self.flag, **loginfo)
> +
> class DataNode(AstNode):
> """
> Various data related updates. For the sake of sanity
> @@ -270,6 +297,12 @@ def handleInclude(statements, filename, lineno, m,
> force):
> def handleExport(statements, filename, lineno, m):
> statements.append(ExportNode(filename, lineno, m.group(1)))
>
> +def handleUnset(statements, filename, lineno, m):
> + statements.append(UnsetNode(filename, lineno, m.group(1)))
> +
> +def handleUnsetFlag(statements, filename, lineno, m):
> + statements.append(UnsetFlagNode(filename, lineno, m.group(1),
> m.group(2)))
> +
> def handleData(statements, filename, lineno, groupd):
> statements.append(DataNode(filename, lineno, groupd))
>
> diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py
> b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
> index b971292..875250d 100644
> --- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py
> +++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
> @@ -57,6 +57,8 @@ __config_regexp__ = re.compile( r"""
> __include_regexp__ = re.compile( r"include\s+(.+)" )
> __require_regexp__ = re.compile( r"require\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\-_+.${}/]+)\]$" )
>
> def init(data):
> topdir = data.getVar('TOPDIR', False)
> @@ -185,6 +187,16 @@ def feeder(lineno, s, fn, statements):
> ast.handleExport(statements, fn, lineno, m)
> return
>
> + m = __unset_regexp__.match(s)
> + if m:
> + ast.handleUnset(statements, fn, lineno, m)
> + return
> +
> + m = __unset_flag_regexp__.match(s)
> + if m:
> + ast.handleUnsetFlag(statements, fn, lineno, m)
> + return
> +
> raise ParseError("unparsed line: '%s'" % s, fn, lineno);
>
> # Add us to the handlers list
> --
> 2.8.1
>
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel
More information about the bitbake-devel
mailing list