diff options
author | Peter Kjellerstedt <peter.kjellerstedt@axis.com> | 2017-02-21 16:18:59 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-01 11:16:07 +0000 |
commit | 3004f57a25514926a0c688d333ea6e6ae3486acc (patch) | |
tree | c6817d03061319dc68c2404fa7091b5ca5693b49 /bitbake/lib/bb | |
parent | 8dd99c15af88a1c52b28347c85d443ae6b1f678d (diff) | |
download | poky-3004f57a25514926a0c688d333ea6e6ae3486acc.tar.gz |
bitbake: lib/bb/utils: Add filter()
The bb.utils.filter() function can be used to filter a variable
containing whitespace separated words based on another set of words.
It has been modeled after the bb.utils.contains_any() function.
A typical example of how it can be used is to simplify constructs for
PACKAGECONFIG that depend on DISTRO_FEATURES:
-PACKAGECONFIG ?= "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'acl', 'acl', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \
-"
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
(Bitbake rev: 03ae490366d2046f5b5c185fe4ec2adf1b0a902e)
Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/utils.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 2845126293..d6bcfa37e8 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -979,6 +979,30 @@ def contains_any(variable, checkvalues, truevalue, falsevalue, d): | |||
979 | return truevalue | 979 | return truevalue |
980 | return falsevalue | 980 | return falsevalue |
981 | 981 | ||
982 | def filter(variable, checkvalues, d): | ||
983 | """Return all words in the variable that are present in the checkvalues. | ||
984 | |||
985 | Arguments: | ||
986 | |||
987 | variable -- the variable name. This will be fetched and expanded (using | ||
988 | d.getVar(variable)) and then split into a set(). | ||
989 | |||
990 | checkvalues -- if this is a string it is split on whitespace into a set(), | ||
991 | otherwise coerced directly into a set(). | ||
992 | |||
993 | d -- the data store. | ||
994 | """ | ||
995 | |||
996 | val = d.getVar(variable) | ||
997 | if not val: | ||
998 | return '' | ||
999 | val = set(val.split()) | ||
1000 | if isinstance(checkvalues, str): | ||
1001 | checkvalues = set(checkvalues.split()) | ||
1002 | else: | ||
1003 | checkvalues = set(checkvalues) | ||
1004 | return ' '.join(sorted(checkvalues & val)) | ||
1005 | |||
982 | def cpu_count(): | 1006 | def cpu_count(): |
983 | return multiprocessing.cpu_count() | 1007 | return multiprocessing.cpu_count() |
984 | 1008 | ||