Patchwork [1/2] classes/image: show an error on invalid IMAGE_FEATURES

login
register
mail settings
Submitter Paul Eggleton
Date May 9, 2013, 4:24 p.m.
Message ID <edbe33f45ad5f07beb7ffdc38bb95f424bb2ab3a.1368116511.git.paul.eggleton@linux.intel.com>
Download mbox | patch
Permalink /patch/49653/
State Accepted
Commit d63c8a1597c9bd0a838cb59ca461ac432b630a90
Headers show

Comments

Paul Eggleton - May 9, 2013, 4:24 p.m.
If the user specifies an invalid feature in IMAGE_FEATURES, show an
error during parsing. Valid IMAGE_FEATURES are drawn from
PACKAGE_GROUP_ definitions, COMPLEMENTARY_GLOBS and a new 'validitems'
varflag on IMAGE_FEATURES (so that additional non-package group features
can be added elsewhere.)

Implements [YOCTO #3308].

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 meta/classes/image.bbclass | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
Chris Larson - May 9, 2013, 10:49 p.m.
On Thu, May 9, 2013 at 9:24 AM, Paul Eggleton <paul.eggleton@linux.intel.com
> wrote:

> If the user specifies an invalid feature in IMAGE_FEATURES, show an
> error during parsing. Valid IMAGE_FEATURES are drawn from
> PACKAGE_GROUP_ definitions, COMPLEMENTARY_GLOBS and a new 'validitems'
> varflag on IMAGE_FEATURES (so that additional non-package group features
> can be added elsewhere.)
>
> Implements [YOCTO #3308].
>
> Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
>

Hmm, maybe we should add this sort of valid item in a list checking to
typecheck.bbclass, or enhance the list type in oe.types to do it there, so
we'd have a general mechanism for this.
Paul Eggleton - May 10, 2013, 2:19 p.m.
On Thursday 09 May 2013 15:49:18 Chris Larson wrote:
> On Thu, May 9, 2013 at 9:24 AM, Paul Eggleton <paul.eggleton@linux.intel.com
> > wrote:
> > 
> > If the user specifies an invalid feature in IMAGE_FEATURES, show an
> > error during parsing. Valid IMAGE_FEATURES are drawn from
> > PACKAGE_GROUP_ definitions, COMPLEMENTARY_GLOBS and a new 'validitems'
> > varflag on IMAGE_FEATURES (so that additional non-package group features
> > can be added elsewhere.)
> > 
> > Implements [YOCTO #3308].
> > 
> > Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
> 
> Hmm, maybe we should add this sort of valid item in a list checking to
> typecheck.bbclass, or enhance the list type in oe.types to do it there, so
> we'd have a general mechanism for this.

Good idea, I'll look into this.

Cheers,
Paul

Patch

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 251bc9a..2b42e12 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -19,6 +19,7 @@  INHIBIT_DEFAULT_DEPS = "1"
 # IMAGE_FEATURES may contain any available package group
 IMAGE_FEATURES ?= ""
 IMAGE_FEATURES[type] = "list"
+IMAGE_FEATURES[validitems] += "debug-tweaks read-only-rootfs"
 
 # rootfs bootstrap install
 ROOTFS_BOOTSTRAP_INSTALL = "${@base_contains("IMAGE_FEATURES", "package-management", "", "${ROOTFS_PKGMANAGE_BOOTSTRAP}",d)}"
@@ -62,6 +63,19 @@  IMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("IMAGE_FEATURES", d)}'
 SDKIMAGE_FEATURES ??= "dev-pkgs dbg-pkgs"
 SDKIMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("SDKIMAGE_FEATURES", d)}'
 
+def check_image_features(d):
+    valid_features = (d.getVarFlag('IMAGE_FEATURES', 'validitems', True) or "").split()
+    valid_features += d.getVarFlags('COMPLEMENTARY_GLOB').keys()
+    for var in d:
+       if var.startswith("PACKAGE_GROUP_"):
+           valid_features.append(var[14:])
+    valid_features.sort()
+
+    features = set(oe.data.typed_value('IMAGE_FEATURES', d))
+    for feature in features:
+        if feature not in valid_features:
+            bb.fatal("'%s' in IMAGE_FEATURES is not a valid image feature. Valid features: %s" % (feature, ' '.join(valid_features)))
+
 IMAGE_INSTALL ?= ""
 IMAGE_INSTALL[type] = "list"
 export PACKAGE_INSTALL ?= "${IMAGE_INSTALL} ${ROOTFS_BOOTSTRAP_INSTALL} ${FEATURE_INSTALL}"
@@ -129,6 +143,8 @@  python () {
             vendor = localdata.getVar("TARGET_VENDOR_virtclass-multilib-" + eext[1], False)
             ml_vendor_list += " " + vendor
     d.setVar('MULTILIB_VENDORS', ml_vendor_list)
+
+    check_image_features(d)
 }
 
 #