packagegroup.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import itertools
  2. def is_optional(feature, d):
  3. packages = d.getVar("FEATURE_PACKAGES_%s" % feature)
  4. if packages:
  5. return bool(d.getVarFlag("FEATURE_PACKAGES_%s" % feature, "optional"))
  6. else:
  7. return bool(d.getVarFlag("PACKAGE_GROUP_%s" % feature, "optional"))
  8. def packages(features, d):
  9. for feature in features:
  10. packages = d.getVar("FEATURE_PACKAGES_%s" % feature)
  11. if not packages:
  12. packages = d.getVar("PACKAGE_GROUP_%s" % feature)
  13. for pkg in (packages or "").split():
  14. yield pkg
  15. def required_packages(features, d):
  16. req = [feature for feature in features if not is_optional(feature, d)]
  17. return packages(req, d)
  18. def optional_packages(features, d):
  19. opt = [feature for feature in features if is_optional(feature, d)]
  20. return packages(opt, d)
  21. def active_packages(features, d):
  22. return itertools.chain(required_packages(features, d),
  23. optional_packages(features, d))
  24. def active_recipes(features, d):
  25. import oe.packagedata
  26. for pkg in active_packages(features, d):
  27. recipe = oe.packagedata.recipename(pkg, d)
  28. if recipe:
  29. yield recipe