[OE-core] [PATCH 3/3] image_types.bbclass: support template .wks.in files for wic

Richard Purdie richard.purdie at linuxfoundation.org
Tue May 24 09:13:55 UTC 2016


On Mon, 2016-05-23 at 13:34 -0700, Christopher Larson wrote:
> From: Christopher Larson <chris_larson at mentor.com>
> 
> These files are treated as the contents of a bitbake variable, so
> usual
> bitbake variable references are supported. I considered using another
> templating mechanism, for example the one used by yocto-layer, but
> then we'd
> end up largely mapping metadata variables to template fields anyway,
> which is
> a pointless indirection. Let bitbake expand the variables directly
> instead.
> 
> This feature lets us, for example, reference ${APPEND} in --append,
> and avoid
> hardcoding the serial console tty in the wks file, and let the user's
> changes
> to APPEND affect wic the way they do the other image construction
> mechanisms.
> 
> The template is read in and set in a variable at parse time, so
> changes to the
> variables referenced by the template will result in rebuilding the
> image.
> 
> Signed-off-by: Christopher Larson <chris_larson at mentor.com>
> ---
>  meta/classes/image_types.bbclass | 35
> +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/meta/classes/image_types.bbclass
> b/meta/classes/image_types.bbclass
> index dc681ae..caf8757 100644
> --- a/meta/classes/image_types.bbclass
> +++ b/meta/classes/image_types.bbclass
> @@ -206,6 +206,16 @@ IMAGE_CMD_wic () {
>  }
>  IMAGE_CMD_wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES"
>  
> +python process_wks_template () {
> +    """Write out expanded template contents to WKS_FULL_PATH."""
> +    template_body = d.getVar('_WKS_TEMPLATE', True)
> +    if template_body:
> +        wks_file = d.getVar('WKS_FULL_PATH', True)
> +        with open(wks_file, 'w') as f:
> +            f.write(template_body)
> +}
> +do_image_wic[prefuncs] += 'process_wks_template'
> +
>  # Rebuild when the wks file or vars in WICVARS change
>  USING_WIC = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic ' + '
> '.join('wic.%s' % c for c in '${COMPRESSIONTYPES}'.split()), '1', '',
> d)}"
>  WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' %
> os.path.exists('${WKS_FULL_PATH}') if '${USING_WIC}' else ''}"
> @@ -302,3 +312,28 @@ IMAGE_TYPES_MASKED ?= ""
>  # The WICVARS variable is used to define list of bitbake variables
> used in wic code
>  # variables from this list is written to <image>.env file
>  WICVARS ?= "BBLAYERS DEPLOY_DIR_IMAGE HDDDIR IMAGE_BASENAME
> IMAGE_BOOT_FILES IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES
> INITRD ISODIR MACHINE_ARCH ROOTFS_SIZE STAGING_DATADIR
> STAGING_DIR_NATIVE STAGING_LIBDIR TARGET_SYS"
> +
> +python () {
> +    """Read in and set up wks file template for wic."""
> +    if d.getVar('USING_WIC', True):
> +        wks_file_u = d.getVar('WKS_FULL_PATH', False)
> +        wks_file = d.expand(wks_file_u)
> +        base, ext = os.path.splitext(wks_file)
> +        if ext == '.in' and os.path.exists(wks_file):
> +            wks_out_file = os.path.join(d.getVar('WORKDIR', True),
> os.path.basename(base))
> +            d.setVar('WKS_FULL_PATH', wks_out_file)
> +            d.setVar('WKS_TEMPLATE_PATH', wks_file_u)
> +            d.setVar('WKS_FILE_CHECKSUM',
> '${WKS_TEMPLATE_PATH}:True')
> +
> +            try:
> +                with open(wks_file, 'r') as f:
> +                    body = f.read()
> +            except (IOError, OSError) as exc:
> +                pass

I'm a little nervous about determinism here. Shouldn't it either find
the referenced file or error?

Cheers,

Richard





More information about the Openembedded-core mailing list