xref: /openbmc/openbmc/poky/meta/lib/oe/packagegroup.py (revision ff075f6e)
1import itertools
2
3def is_optional(feature, d):
4    packages = d.getVar("FEATURE_PACKAGES_%s" % feature)
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)
13        if not packages:
14            packages = d.getVar("PACKAGE_GROUP_%s" % feature)
15        for pkg in (packages or "").split():
16            yield pkg
17
18def required_packages(features, d):
19    req = [feature for feature in features if not is_optional(feature, d)]
20    return packages(req, d)
21
22def optional_packages(features, d):
23    opt = [feature for feature in features if is_optional(feature, d)]
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
37