From 6984961314c8ba2aceab9acabb658f96ed249fef Mon Sep 17 00:00:00 2001 From: Christopher Larson Date: Sun, 4 Dec 2011 20:03:51 -0500 Subject: oe.license: add license flattening code This flattens a license tree by selecting one side of each OR operation (chosen via the user supplied function). Signed-off-by: Christopher Larson --- meta/lib/oe/license.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'meta/lib/oe/license.py') diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py index b230d3ef45..7ab66e762f 100644 --- a/meta/lib/oe/license.py +++ b/meta/lib/oe/license.py @@ -30,3 +30,33 @@ class LicenseVisitor(ast.NodeVisitor): new_elements.append(element) self.visit(ast.parse(' '.join(new_elements))) + +class FlattenVisitor(LicenseVisitor): + """Flatten a license tree (parsed from a string) by selecting one of each + set of OR options, in the way the user specifies""" + def __init__(self, choose_licenses): + self.choose_licenses = choose_licenses + self.licenses = [] + LicenseVisitor.__init__(self) + + def visit_Str(self, node): + self.licenses.append(node.s) + + def visit_BinOp(self, node): + if isinstance(node.op, ast.BitOr): + left = FlattenVisitor(self.choose_licenses) + left.visit(node.left) + + right = FlattenVisitor(self.choose_licenses) + right.visit(node.right) + + selected = self.choose_licenses(left.licenses, right.licenses) + self.licenses.extend(selected) + else: + self.generic_visit(node) + +def flattened_licenses(licensestr, choose_licenses): + """Given a license string and choose_licenses function, return a flat list of licenses""" + flatten = FlattenVisitor(choose_licenses) + flatten.visit_string(licensestr) + return flatten.licenses -- cgit 1.2.3-korg