[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