[gnome-continuous-yocto/gnomeostree-3.28-rocko: 1362/8267] image_types.bbclass: support template .wks.in files for wic



commit 42e870c5ed4b01f7b79700373bd1f4b21b95028a
Author: Christopher Larson <chris_larson mentor com>
Date:   Fri Jul 1 14:27:09 2016 -0700

    image_types.bbclass: support template .wks.in files for wic
    
    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.
    
    (From OE-Core rev: 51cb21fe5f050874d52f5b05a8a1de79ea4ebf2f)
    
    Signed-off-by: Christopher Larson <chris_larson mentor com>
    Signed-off-by: Ross Burton <ross burton intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/classes/image_types.bbclass |   46 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)
---
diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass
index f7de756..2b97397 100644
--- a/meta/classes/image_types.bbclass
+++ b/meta/classes/image_types.bbclass
@@ -218,6 +218,52 @@ USING_WIC = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s
 WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' % os.path.exists('${WKS_FULL_PATH}') if '${USING_WIC}' else 
''}"
 do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}"
 
+python do_write_wks_template () {
+    """Write out expanded template contents to WKS_FULL_PATH."""
+    import re
+
+    template_body = d.getVar('_WKS_TEMPLATE', True)
+
+    # Remove any remnant variable references left behind by the expansion
+    # due to undefined variables
+    expand_var_regexp = re.compile(r"\${[^{}@\n\t :]+}")
+    while True:
+        new_body = re.sub(expand_var_regexp, '', template_body)
+        if new_body == template_body:
+            break
+        else:
+            template_body = new_body
+
+    wks_file = d.getVar('WKS_FULL_PATH', True)
+    with open(wks_file, 'w') as f:
+        f.write(template_body)
+}
+
+python () {
+    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
+            else:
+                # Previously, I used expandWithRefs to get the dependency list
+                # and add it to WICVARS, but there's no point re-parsing the
+                # file in process_wks_template as well, so just put it in
+                # a variable and let the metadata deal with the deps.
+                d.setVar('_WKS_TEMPLATE', body)
+                bb.build.addtask('do_write_wks_template', 'do_image_wic', None, d)
+}
+
 EXTRA_IMAGECMD = ""
 
 inherit siteinfo


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]