summaryrefslogtreecommitdiffstats
path: root/meta/lib/oe/packagegroup.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oe/packagegroup.py')
-rw-r--r--meta/lib/oe/packagegroup.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/meta/lib/oe/packagegroup.py b/meta/lib/oe/packagegroup.py
new file mode 100644
index 0000000000..12eb4212ff
--- /dev/null
+++ b/meta/lib/oe/packagegroup.py
@@ -0,0 +1,36 @@
1import itertools
2
3def is_optional(feature, d):
4 packages = d.getVar("FEATURE_PACKAGES_%s" % feature, True)
5 if packages:
6 return bool(d.getVarFlag("FEATURE_PACKAGES_%s" % feature, "optional"))
7 else:
8 return bool(d.getVarFlag("PACKAGE_GROUP_%s" % feature, "optional"))
9
10def packages(features, d):
11 for feature in features:
12 packages = d.getVar("FEATURE_PACKAGES_%s" % feature, True)
13 if not packages:
14 packages = d.getVar("PACKAGE_GROUP_%s" % feature, True)
15 for pkg in (packages or "").split():
16 yield pkg
17
18def required_packages(features, d):
19 req = filter(lambda feature: not is_optional(feature, d), features)
20 return packages(req, d)
21
22def optional_packages(features, d):
23 opt = filter(lambda feature: is_optional(feature, d), features)
24 return packages(opt, d)
25
26def active_packages(features, d):
27 return itertools.chain(required_packages(features, d),
28 optional_packages(features, d))
29
30def active_recipes(features, d):
31 import oe.packagedata
32
33 for pkg in active_packages(features, d):
34 recipe = oe.packagedata.recipename(pkg, d)
35 if recipe:
36 yield recipe