<div dir="ltr">Why didn't you make this image_types_wic.bbclass and use IMAGE_CLASSES to load it?</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 27, 2017 at 12:19 PM, Ed Bartosh <span dir="ltr"><<a href="mailto:ed.bartosh@linux.intel.com" target="_blank">ed.bartosh@linux.intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There is a lot of wic code in image.bbclass and image_types.bbclass<br>
Having all code separated in one file should make it more readable<br>
and easier to maintain.<br>
<br>
Signed-off-by: Ed Bartosh <<a href="mailto:ed.bartosh@linux.intel.com">ed.bartosh@linux.intel.com</a>><br>
---<br>
meta/classes/image-wic.bbclass | 120 ++++++++++++++++++++++++++++++<wbr>+++++++++<br>
meta/classes/image.bbclass | 25 +-------<br>
meta/classes/image_types.<wbr>bbclass | 95 ------------------------------<wbr>-<br>
3 files changed, 122 insertions(+), 118 deletions(-)<br>
create mode 100644 meta/classes/image-wic.bbclass<br>
<br>
diff --git a/meta/classes/image-wic.<wbr>bbclass b/meta/classes/image-wic.<wbr>bbclass<br>
new file mode 100644<br>
index 0000000..2acfd65<br>
--- /dev/null<br>
+++ b/meta/classes/image-wic.<wbr>bbclass<br>
@@ -0,0 +1,120 @@<br>
+# The WICVARS variable is used to define list of bitbake variables used in wic code<br>
+# variables from this list is written to <image>.env file<br>
+WICVARS ?= "\<br>
+ BBLAYERS IMGDEPLOYDIR DEPLOY_DIR_IMAGE FAKEROOTCMD HDDDIR IMAGE_BASENAME IMAGE_BOOT_FILES \<br>
+ IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES INITRD ISODIR MACHINE_ARCH RECIPE_SYSROOT_NATIVE \<br>
+ ROOTFS_SIZE STAGING_DATADIR STAGING_DIR STAGING_LIBDIR TARGET_SYS"<br>
+<br>
+WKS_FILE ??= "${IMAGE_BASENAME}.${MACHINE}.<wbr>wks"<br>
+WKS_FILES ?= "${WKS_FILE} ${IMAGE_BASENAME}.wks"<br>
+WKS_SEARCH_PATH ?= "${THISDIR}:${@':'.join('%s/<wbr>wic' % p for p in '${BBPATH}'.split(':'))}:${@':<wbr>'.join('%s/scripts/lib/wic/<wbr>canned-wks' % l for l in '${BBPATH}:${COREBASE}'.split(<wbr>':'))}"<br>
+WKS_FULL_PATH = "${@wks_search('${WKS_FILES}'.<wbr>split(), '${WKS_SEARCH_PATH}') or ''}"<br>
+<br>
+def wks_search(files, search_path):<br>
+ for f in files:<br>
+ if os.path.isabs(f):<br>
+ if os.path.exists(f):<br>
+ return f<br>
+ else:<br>
+ searched = bb.utils.which(search_path, f)<br>
+ if searched:<br>
+ return searched<br>
+<br>
+WIC_CREATE_EXTRA_ARGS ?= ""<br>
+<br>
+IMAGE_CMD_wic () {<br>
+ out="${IMGDEPLOYDIR}/${IMAGE_<wbr>NAME}"<br>
+ wks="${WKS_FULL_PATH}"<br>
+ if [ -z "$wks" ]; then<br>
+ bbfatal "No kickstart files from WKS_FILES were found: ${WKS_FILES}. Please set WKS_FILE or WKS_FILES appropriately."<br>
+ fi<br>
+<br>
+ BUILDDIR="${TOPDIR}" wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/<wbr>imgdata/" -e "${IMAGE_BASENAME}" -o "$out/" ${WIC_CREATE_EXTRA_ARGS}<br>
+ mv "$out/$(basename "${wks%.wks}")"*.direct "$out${IMAGE_NAME_SUFFIX}.wic"<br>
+ rm -rf "$out/"<br>
+}<br>
+IMAGE_CMD_wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES"<br>
+<br>
+# Rebuild when the wks file or vars in WICVARS change<br>
+USING_WIC = "${@bb.utils.contains_any('<wbr>IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s' % c for c in '${CONVERSIONTYPES}'.split()), '1', '', d)}"<br>
+WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' % os.path.exists('${WKS_FULL_<wbr>PATH}') if '${USING_WIC}' else ''}"<br>
+do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}"<br>
+do_image_wic[depends] += "wic-tools:do_build"<br>
+<br>
+python () {<br>
+ if d.getVar('USING_WIC') and 'do_bootimg' in d:<br>
+ bb.build.addtask('do_image_<wbr>wic', '', 'do_bootimg', d)<br>
+}<br>
+<br>
+python do_write_wks_template () {<br>
+ """Write out expanded template contents to WKS_FULL_PATH."""<br>
+ import re<br>
+<br>
+ template_body = d.getVar('_WKS_TEMPLATE')<br>
+<br>
+ # Remove any remnant variable references left behind by the expansion<br>
+ # due to undefined variables<br>
+ expand_var_regexp = re.compile(r"\${[^{}@\n\t :]+}")<br>
+ while True:<br>
+ new_body = re.sub(expand_var_regexp, '', template_body)<br>
+ if new_body == template_body:<br>
+ break<br>
+ else:<br>
+ template_body = new_body<br>
+<br>
+ wks_file = d.getVar('WKS_FULL_PATH')<br>
+ with open(wks_file, 'w') as f:<br>
+ f.write(template_body)<br>
+}<br>
+<br>
+python () {<br>
+ if d.getVar('USING_WIC'):<br>
+ wks_file_u = d.getVar('WKS_FULL_PATH', False)<br>
+ wks_file = d.expand(wks_file_u)<br>
+ base, ext = os.path.splitext(wks_file)<br>
+ if ext == '.in' and os.path.exists(wks_file):<br>
+ wks_out_file = os.path.join(d.getVar('<wbr>WORKDIR'), os.path.basename(base))<br>
+ d.setVar('WKS_FULL_PATH', wks_out_file)<br>
+ d.setVar('WKS_TEMPLATE_PATH', wks_file_u)<br>
+ d.setVar('WKS_FILE_CHECKSUM', '${WKS_TEMPLATE_PATH}:True')<br>
+<br>
+ # We need to re-parse each time the file changes, and bitbake<br>
+ # needs to be told about that explicitly.<br>
+ bb.parse.mark_dependency(d, wks_file)<br>
+<br>
+ try:<br>
+ with open(wks_file, 'r') as f:<br>
+ body = f.read()<br>
+ except (IOError, OSError) as exc:<br>
+ pass<br>
+ else:<br>
+ # Previously, I used expandWithRefs to get the dependency list<br>
+ # and add it to WICVARS, but there's no point re-parsing the<br>
+ # file in process_wks_template as well, so just put it in<br>
+ # a variable and let the metadata deal with the deps.<br>
+ d.setVar('_WKS_TEMPLATE', body)<br>
+ bb.build.addtask('do_write_<wbr>wks_template', 'do_image_wic', None, d)<br>
+}<br>
+<br>
+#<br>
+# Write environment variables used by wic<br>
+# to tmp/sysroots/<machine>/<wbr>imgdata/<image>.env<br>
+#<br>
+python do_rootfs_wicenv () {<br>
+ wicvars = d.getVar('WICVARS')<br>
+ if not wicvars:<br>
+ return<br>
+<br>
+ stdir = d.getVar('STAGING_DIR')<br>
+ outdir = os.path.join(stdir, d.getVar('MACHINE'), 'imgdata')<br>
+ bb.utils.mkdirhier(outdir)<br>
+ basename = d.getVar('IMAGE_BASENAME')<br>
+ with open(os.path.join(outdir, basename) + '.env', 'w') as envf:<br>
+ for var in wicvars.split():<br>
+ value = d.getVar(var)<br>
+ if value:<br>
+ envf.write('%s="%s"\n' % (var, value.strip()))<br>
+}<br>
+addtask do_rootfs_wicenv after do_image before do_image_wic<br>
+do_rootfs_wicenv[vardeps] += "${WICVARS}"<br>
+do_rootfs_wicenv[prefuncs] = 'set_image_size'<br>
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass<br>
index 13fd996..1a549e9 100644<br>
--- a/meta/classes/image.bbclass<br>
+++ b/meta/classes/image.bbclass<br>
@@ -192,6 +192,8 @@ python () {<br>
IMAGE_CLASSES += "image_types"<br>
inherit ${IMAGE_CLASSES}<br>
<br>
+inherit image-wic<br>
+<br>
IMAGE_POSTPROCESS_COMMAND ?= ""<br>
<br>
# some default locales<br>
@@ -332,29 +334,6 @@ fakeroot python do_image_qa () {<br>
}<br>
addtask do_image_qa after do_image_complete before do_build<br>
<br>
-#<br>
-# Write environment variables used by wic<br>
-# to tmp/sysroots/<machine>/<wbr>imgdata/<image>.env<br>
-#<br>
-python do_rootfs_wicenv () {<br>
- wicvars = d.getVar('WICVARS')<br>
- if not wicvars:<br>
- return<br>
-<br>
- stdir = d.getVar('STAGING_DIR')<br>
- outdir = os.path.join(stdir, d.getVar('MACHINE'), 'imgdata')<br>
- bb.utils.mkdirhier(outdir)<br>
- basename = d.getVar('IMAGE_BASENAME')<br>
- with open(os.path.join(outdir, basename) + '.env', 'w') as envf:<br>
- for var in wicvars.split():<br>
- value = d.getVar(var)<br>
- if value:<br>
- envf.write('%s="%s"\n' % (var, value.strip()))<br>
-}<br>
-addtask do_rootfs_wicenv after do_image before do_image_wic<br>
-do_rootfs_wicenv[vardeps] += "${WICVARS}"<br>
-do_rootfs_wicenv[prefuncs] = 'set_image_size'<br>
-<br>
def setup_debugfs_variables(d):<br>
d.appendVar('IMAGE_ROOTFS', '-dbg')<br>
d.appendVar('IMAGE_LINK_NAME', '-dbg')<br>
diff --git a/meta/classes/image_types.<wbr>bbclass b/meta/classes/image_types.<wbr>bbclass<br>
index ad95dc6..e2ecf93 100644<br>
--- a/meta/classes/image_types.<wbr>bbclass<br>
+++ b/meta/classes/image_types.<wbr>bbclass<br>
@@ -192,97 +192,6 @@ IMAGE_CMD_ubi () {<br>
<br>
IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}$<wbr>{IMAGE_NAME_SUFFIX}.ubifs ${MKUBIFS_ARGS}"<br>
<br>
-WKS_FILE ??= "${IMAGE_BASENAME}.${MACHINE}.<wbr>wks"<br>
-WKS_FILES ?= "${WKS_FILE} ${IMAGE_BASENAME}.wks"<br>
-WKS_SEARCH_PATH ?= "${THISDIR}:${@':'.join('%s/<wbr>wic' % p for p in '${BBPATH}'.split(':'))}:${@':<wbr>'.join('%s/scripts/lib/wic/<wbr>canned-wks' % l for l in '${BBPATH}:${COREBASE}'.split(<wbr>':'))}"<br>
-WKS_FULL_PATH = "${@wks_search('${WKS_FILES}'.<wbr>split(), '${WKS_SEARCH_PATH}') or ''}"<br>
-<br>
-def wks_search(files, search_path):<br>
- for f in files:<br>
- if os.path.isabs(f):<br>
- if os.path.exists(f):<br>
- return f<br>
- else:<br>
- searched = bb.utils.which(search_path, f)<br>
- if searched:<br>
- return searched<br>
-<br>
-WIC_CREATE_EXTRA_ARGS ?= ""<br>
-<br>
-IMAGE_CMD_wic () {<br>
- out="${IMGDEPLOYDIR}/${IMAGE_<wbr>NAME}"<br>
- wks="${WKS_FULL_PATH}"<br>
- if [ -z "$wks" ]; then<br>
- bbfatal "No kickstart files from WKS_FILES were found: ${WKS_FILES}. Please set WKS_FILE or WKS_FILES appropriately."<br>
- fi<br>
-<br>
- BUILDDIR="${TOPDIR}" wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/<wbr>imgdata/" -e "${IMAGE_BASENAME}" -o "$out/" ${WIC_CREATE_EXTRA_ARGS}<br>
- mv "$out/$(basename "${wks%.wks}")"*.direct "$out${IMAGE_NAME_SUFFIX}.wic"<br>
- rm -rf "$out/"<br>
-}<br>
-IMAGE_CMD_wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES"<br>
-<br>
-# Rebuild when the wks file or vars in WICVARS change<br>
-USING_WIC = "${@bb.utils.contains_any('<wbr>IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s' % c for c in '${CONVERSIONTYPES}'.split()), '1', '', d)}"<br>
-WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' % os.path.exists('${WKS_FULL_<wbr>PATH}') if '${USING_WIC}' else ''}"<br>
-do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}"<br>
-do_image_wic[depends] += "wic-tools:do_build"<br>
-<br>
-python () {<br>
- if d.getVar('USING_WIC') and 'do_bootimg' in d:<br>
- bb.build.addtask('do_image_<wbr>wic', '', 'do_bootimg', d)<br>
-}<br>
-<br>
-python do_write_wks_template () {<br>
- """Write out expanded template contents to WKS_FULL_PATH."""<br>
- import re<br>
-<br>
- template_body = d.getVar('_WKS_TEMPLATE')<br>
-<br>
- # Remove any remnant variable references left behind by the expansion<br>
- # due to undefined variables<br>
- expand_var_regexp = re.compile(r"\${[^{}@\n\t :]+}")<br>
- while True:<br>
- new_body = re.sub(expand_var_regexp, '', template_body)<br>
- if new_body == template_body:<br>
- break<br>
- else:<br>
- template_body = new_body<br>
-<br>
- wks_file = d.getVar('WKS_FULL_PATH')<br>
- with open(wks_file, 'w') as f:<br>
- f.write(template_body)<br>
-}<br>
-<br>
-python () {<br>
- if d.getVar('USING_WIC'):<br>
- wks_file_u = d.getVar('WKS_FULL_PATH', False)<br>
- wks_file = d.expand(wks_file_u)<br>
- base, ext = os.path.splitext(wks_file)<br>
- if ext == '.in' and os.path.exists(wks_file):<br>
- wks_out_file = os.path.join(d.getVar('<wbr>WORKDIR'), os.path.basename(base))<br>
- d.setVar('WKS_FULL_PATH', wks_out_file)<br>
- d.setVar('WKS_TEMPLATE_PATH', wks_file_u)<br>
- d.setVar('WKS_FILE_CHECKSUM', '${WKS_TEMPLATE_PATH}:True')<br>
-<br>
- # We need to re-parse each time the file changes, and bitbake<br>
- # needs to be told about that explicitly.<br>
- bb.parse.mark_dependency(d, wks_file)<br>
-<br>
- try:<br>
- with open(wks_file, 'r') as f:<br>
- body = f.read()<br>
- except (IOError, OSError) as exc:<br>
- pass<br>
- else:<br>
- # Previously, I used expandWithRefs to get the dependency list<br>
- # and add it to WICVARS, but there's no point re-parsing the<br>
- # file in process_wks_template as well, so just put it in<br>
- # a variable and let the metadata deal with the deps.<br>
- d.setVar('_WKS_TEMPLATE', body)<br>
- bb.build.addtask('do_write_<wbr>wks_template', 'do_image_wic', None, d)<br>
-}<br>
-<br>
EXTRA_IMAGECMD = ""<br>
<br>
inherit siteinfo<br>
@@ -380,7 +289,3 @@ IMAGE_EXTENSION_live = "hddimg iso"<br>
# The IMAGE_TYPES_MASKED variable will be used to mask out from the IMAGE_FSTYPES,<br>
# images that will not be built at do_rootfs time: vmdk, vdi, qcow2, hdddirect, hddimg, iso, etc.<br>
IMAGE_TYPES_MASKED ?= ""<br>
-<br>
-# The WICVARS variable is used to define list of bitbake variables used in wic code<br>
-# variables from this list is written to <image>.env file<br>
-WICVARS ?= "BBLAYERS IMGDEPLOYDIR DEPLOY_DIR_IMAGE FAKEROOTCMD HDDDIR IMAGE_BASENAME IMAGE_BOOT_FILES IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES INITRD ISODIR MACHINE_ARCH RECIPE_SYSROOT_NATIVE ROOTFS_SIZE STAGING_DATADIR STAGING_DIR STAGING_LIBDIR TARGET_SYS"<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.1.4<br>
<br>
--<br>
______________________________<wbr>_________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.<wbr>openembedded.org</a><br>
<a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/<wbr>mailman/listinfo/openembedded-<wbr>core</a><br>
</font></span></blockquote></div><br></div>