[OE-core] [PATCH 01/17] image.py: write bitbake variables to .env file

Richard Purdie richard.purdie at linuxfoundation.org
Sun Aug 30 11:24:48 UTC 2015


On Thu, 2015-08-20 at 14:56 +0300, Ed Bartosh wrote:
> Write set of bitbake variables associated with the image into
> build/tmp/sysroots/<machine>/imagedata/<image>.env
> 
> This is needed for wic to be able to get bitbake variables without
> running 'bitbake -e'.

I've just realised what this code is doing, its writing out nearly the
whole data store :(

Is there no way we can know which variables wic may later need? I'm not
keen at all to see an iteration of d.keys() and the list of things not
to write out looks arbitrary at best :(

We need to find a better way of doing this...

I'd also prefer we only do this if we know we're going to be writing a
wic image.

Cheers,

Richard


> Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
> ---
>  meta/lib/oe/image.py | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/meta/lib/oe/image.py b/meta/lib/oe/image.py
> index 699c30f..a7fdefa 100644
> --- a/meta/lib/oe/image.py
> +++ b/meta/lib/oe/image.py
> @@ -321,6 +321,27 @@ class Image(ImageDepGraph):
>  
>          return image_cmd_groups
>  
> +    def _write_env(self):
> +        """
> +        Write environment variables
> +        to tmp/sysroots/<machine>/imgdata/<image>.env
> +        """
> +        stdir = self.d.getVar('STAGING_DIR_TARGET', True)
> +        outdir = os.path.join(stdir, 'imgdata')
> +        if not os.path.exists(outdir):
> +            os.makedirs(outdir)
> +        basename = self.d.getVar('IMAGE_BASENAME', True)
> +        with open(os.path.join(outdir, basename) + '.env', 'w') as envf:
> +            for var in sorted(self.d.keys()):
> +                # filter out as much as we can to reduce file size
> +                if var.startswith('_') or var.startswith('BB_') \
> +                   or not var.isupper() or self.d.getVarFlag(var, "func") \
> +                   or var in ('BBINCLUDED', 'SRCPV', 'MIRRORS'):
> +                    continue
> +                value = self.d.getVar(var, True)
> +                if value:
> +                    envf.write('%s="%s"\n' % (var, value.strip()))
> +
>      def create(self):
>          bb.note("###### Generate images #######")
>          pre_process_cmds = self.d.getVar("IMAGE_PREPROCESS_COMMAND", True)
> @@ -332,6 +353,8 @@ class Image(ImageDepGraph):
>  
>          image_cmd_groups = self._get_imagecmds()
>  
> +        self._write_env()
> +
>          for image_cmds in image_cmd_groups:
>              # create the images in parallel
>              nproc = multiprocessing.cpu_count()
> -- 
> 2.1.4
> 





More information about the Openembedded-core mailing list