[bitbake-devel] [PATCH v2 3/4] cache: allow parsing a recipe with a custom config datastore

Paul Eggleton paul.eggleton at linux.intel.com
Tue Aug 30 21:11:57 UTC 2016


On Wed, 31 Aug 2016 08:48:08 Paul Eggleton wrote:
> To accommodate the OpenEmbedded layer index recipe parsing, we have to
> have the ability to pass in a custom config datastore since it
> constructs a synthetic one. To make this possible after the multi-config
> changes, rename the internal _load_bbfile() function to parse_recipe(),
> make it a function at the module level (since it doesn't actually need
> to access any members of the class or instance) and move setting
> __BBMULTICONFIG inside it since other code will expect that to be set.
> 
> Part of the fix for [YOCTO #10192].
> 
> Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
> ---
>  lib/bb/cache.py | 73
> ++++++++++++++++++++++++++++++--------------------------- 1 file changed,
> 39 insertions(+), 34 deletions(-)
> 
> diff --git a/lib/bb/cache.py b/lib/bb/cache.py
> index 0d5a034..ccad5c8 100644
> --- a/lib/bb/cache.py
> +++ b/lib/bb/cache.py
> @@ -286,6 +286,42 @@ def variant2virtual(realfn, variant):
>          return "multiconfig:" + elems[1] + ":" + realfn
>      return "virtual:" + variant + ":" + realfn
> 
> +def parse_recipe(bb_data, bbfile, appends, mc=''):
> +    """
> +    Parse a recipe
> +    """
> +
> +    chdir_back = False
> +
> +    bb_data.setVar("__BBMULTICONFIG", mc)
> +
> +    # expand tmpdir to include this topdir
> +    bb_data.setVar('TMPDIR', bb_data.getVar('TMPDIR', True) or "")
> +    bbfile_loc = os.path.abspath(os.path.dirname(bbfile))
> +    oldpath = os.path.abspath(os.getcwd())
> +    bb.parse.cached_mtime_noerror(bbfile_loc)
> +
> +    # The ConfHandler first looks if there is a TOPDIR and if not
> +    # then it would call getcwd().
> +    # Previously, we chdir()ed to bbfile_loc, called the handler
> +    # and finally chdir()ed back, a couple of thousand times. We now
> +    # just fill in TOPDIR to point to bbfile_loc if there is no TOPDIR yet.
> +    if not bb_data.getVar('TOPDIR', False):
> +        chdir_back = True
> +        bb_data.setVar('TOPDIR', bbfile_loc)
> +    try:
> +        if appends:
> +            bb_data.setVar('__BBAPPEND', " ".join(appends))
> +        bb_data = bb.parse.handle(bbfile, bb_data)
> +        if chdir_back:
> +            os.chdir(oldpath)
> +        return bb_data
> +    except:
> +        if chdir_back:
> +            os.chdir(oldpath)
> +        raise
> +
> +
> 
>  class NoCache(object):
> 
> @@ -312,54 +348,23 @@ class NoCache(object):
>          if virtonly:
>              (bbfile, virtual, mc) = virtualfn2realfn(bbfile)
>              bb_data = self.databuilder.mcdata[mc].createCopy()
> -            bb_data.setVar("__BBMULTICONFIG", mc)
>              bb_data.setVar("__ONLYFINALISE", virtual or "default")
> -            datastores = self._load_bbfile(bb_data, bbfile, appends)
> +            datastores = parse_recipe(bb_data, bbfile, appends, mc)
>              return datastores
> 
>          bb_data = self.data.createCopy()
> -        datastores = self._load_bbfile(bb_data, bbfile, appends)
> +        datastores = parse_recipe(bb_data, bbfile, appends, mc)

So the last line above was definitely wrong - I've dropped the "mc" parameter 
in this call and pushed a new paule/tinfoil-fixes-bb branch.

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre



More information about the bitbake-devel mailing list