[bitbake-devel] [PATCH] build/data: Don't expand python functions before execution [API change]

Khem Raj raj.khem at gmail.com
Wed Feb 3 06:06:56 UTC 2016


> On Feb 2, 2016, at 6:07 AM, Richard Purdie <richard.purdie at linuxfoundation.org> wrote:
> 
> Right now, if you have some python code like:
> 
> X = "a"
> 
> def somefunction(d):
>    d.setVar("X", "b")
>    d.setVar("Y", "${X}")
> 
> then any sane person would expect that Y = "b" at the end of the
> function. This is not the case, Y = "a".
> 
> This is due to the python function being expanded before execution, the
> executed code would read d.setVar("Y", "a"). This understandably
> confuses people, it also makes it near impossible to write ${} in a
> python function without unintended things happening.
> 
> I think there is general agreement we should fix this and standardise
> on non-expansion of python functions. We already don't expand anonymous
> python (mostly).
> 
> I've checked OE-Core with buildhistory before and after this change and
> there were a small number of issues this exposed which I've sent
> patches for.
> 
> I propose we default to not expanding python code and then deal with
> any consequences from that if/as/where identified. This will improve
> new user understanding and usability of the system, it also allows
> several long standing weird expansion issues to be fixed.

I support this too. Additionally, it will be a nice to document this if it has not been done
thus far.

> 
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> 
> diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
> index 52a4916..b7c49eb 100644
> --- a/bitbake/lib/bb/build.py
> +++ b/bitbake/lib/bb/build.py
> @@ -239,7 +239,7 @@ def exec_func_python(func, d, runfile, cwd=None):
>     """Execute a python BB 'function'"""
> 
>     bbfile = d.getVar('FILE', True)
> -    code = _functionfmt.format(function=func, body=d.getVar(func, True))
> +    code = _functionfmt.format(function=func, body=d.getVar(func, False))
>     bb.utils.mkdirhier(os.path.dirname(runfile))
>     with open(runfile, 'w') as script:
>         bb.data.emit_func_python(func, script, d)
> diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
> index 1f1f0d2..86ad4ed 100644
> --- a/bitbake/lib/bb/data.py
> +++ b/bitbake/lib/bb/data.py
> @@ -308,7 +308,7 @@ def emit_func_python(func, o=sys.__stdout__, d = init()):
> 
>     write_func(func, o, True)
>     pp = bb.codeparser.PythonParser(func, logger)
> -    pp.parse_python(d.getVar(func, True))
> +    pp.parse_python(d.getVar(func, False))
>     newdeps = pp.execs
>     newdeps |= set((d.getVarFlag(func, "vardeps", True) or "").split())
>     seen = set()
> 
> 
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 204 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.openembedded.org/pipermail/bitbake-devel/attachments/20160202/b56965b3/attachment-0002.sig>


More information about the bitbake-devel mailing list