1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunimport itertools 6*4882a593Smuzhiyun 7*4882a593Smuzhiyundef is_optional(feature, d): 8*4882a593Smuzhiyun return bool(d.getVarFlag("FEATURE_PACKAGES_%s" % feature, "optional")) 9*4882a593Smuzhiyun 10*4882a593Smuzhiyundef packages(features, d): 11*4882a593Smuzhiyun for feature in features: 12*4882a593Smuzhiyun packages = d.getVar("FEATURE_PACKAGES_%s" % feature) 13*4882a593Smuzhiyun for pkg in (packages or "").split(): 14*4882a593Smuzhiyun yield pkg 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundef required_packages(features, d): 17*4882a593Smuzhiyun req = [feature for feature in features if not is_optional(feature, d)] 18*4882a593Smuzhiyun return packages(req, d) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyundef optional_packages(features, d): 21*4882a593Smuzhiyun opt = [feature for feature in features if is_optional(feature, d)] 22*4882a593Smuzhiyun return packages(opt, d) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyundef active_packages(features, d): 25*4882a593Smuzhiyun return itertools.chain(required_packages(features, d), 26*4882a593Smuzhiyun optional_packages(features, d)) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyundef active_recipes(features, d): 29*4882a593Smuzhiyun import oe.packagedata 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun for pkg in active_packages(features, d): 32*4882a593Smuzhiyun recipe = oe.packagedata.recipename(pkg, d) 33*4882a593Smuzhiyun if recipe: 34*4882a593Smuzhiyun yield recipe 35