diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-08-14 12:15:08 +0100 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-08-27 13:31:47 +0100 |
commit | 762e79dfb769e885758bdcc627fadbe4dc6454fd (patch) | |
tree | 3e6e01f06d0378c51270683e6fc7f0d08c25a460 | |
parent | f07045fcae859c902434062d1725f1348f42d1dd (diff) | |
download | openembedded-core-contrib-762e79dfb769e885758bdcc627fadbe4dc6454fd.tar.gz |
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>
-rw-r--r-- | meta/classes/whitelist.bbclass | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/meta/classes/whitelist.bbclass b/meta/classes/whitelist.bbclass new file mode 100644 index 0000000000..ab6ac73b56 --- /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) +} |