diff options
authorPaul Eggleton <paul.eggleton@linux.intel.com>2015-08-14 12:15:08 +0100
committerPaul Eggleton <paul.eggleton@linux.intel.com>2015-08-27 13:31:47 +0100
commit762e79dfb769e885758bdcc627fadbe4dc6454fd (patch)
parentf07045fcae859c902434062d1725f1348f42d1dd (diff)
classes/whitelist: add class to allow whitelisting recipes from a layerpaule/whitelist
Allow restricting recipes brought from a layer to a specified list. This is similar in operation to blacklist.bbclass, but instead specifies a per-layer whitelist of recipes (matched by PN or BPN) that are able to be built from the layer - anything else is skipped. This is potentially useful where you want to bring in a select set of recipes from a larger layer e.g. meta-oe. Implements [YOCTO #8150]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
1 files changed, 34 insertions, 0 deletions
diff --git a/meta/classes/whitelist.bbclass b/meta/classes/whitelist.bbclass
new file mode 100644
index 00000000000..ab6ac73b561
--- /dev/null
+++ b/meta/classes/whitelist.bbclass
@@ -0,0 +1,34 @@
+# Class that allows you to restrict the recipes brought from a layer to
+# a specified list. This is similar in operation to blacklist.bbclass
+# but note the difference in how PNWHITELIST is set - we don't use varflags
+# here, the recipe name goes in the value and we use an override for the
+# layer name (although this is not strictly required - you can have one
+# PNWHITELIST value shared by all of the layers specified in
+# PNWHITELIST_LAYERS). The layer name used here is actually the name that
+# gets added to BBFILE_COLLECTIONS in the layer's layer.conf, which may
+# differ from how the layer is otherwise known - e.g. meta-oe uses
+# "openembedded-layer".
+# INHERIT += "whitelist"
+# PNWHITELIST_LAYERS = "layername"
+# PNWHITELIST_layername = "recipe1 recipe2"
+# If you would prefer to set a reason message other than the default, you
+# can do so:
+# PNWHITELIST_REASON_layername = "not supported by ${DISTRO}"
+python() {
+ layer = bb.utils.get_file_layer(d.getVar('FILE', True), d)
+ if layer:
+ layers = (d.getVar('PNWHITELIST_LAYERS', True) or '').split()
+ if layer in layers:
+ localdata = bb.data.createCopy(d)
+ localdata.setVar('OVERRIDES', layer)
+ whitelist = (localdata.getVar('PNWHITELIST', True) or '').split()
+ if not (d.getVar('PN', True) in whitelist or d.getVar('BPN', True) in whitelist):
+ reason = localdata.getVar('PNWHITELIST_REASON', True)
+ if not reason:
+ reason = 'not in PNWHITELIST for layer %s' % layer
+ raise bb.parse.SkipRecipe(reason)