diff options
Diffstat (limited to 'meta/lib/oe')
-rw-r--r-- | meta/lib/oe/license.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py index 7ab66e762f..3543cfe1f6 100644 --- a/meta/lib/oe/license.py +++ b/meta/lib/oe/license.py | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | import ast | 4 | import ast |
5 | import re | 5 | import re |
6 | from fnmatch import fnmatchcase as fnmatch | ||
6 | 7 | ||
7 | class InvalidLicense(StandardError): | 8 | class InvalidLicense(StandardError): |
8 | def __init__(self, license): | 9 | def __init__(self, license): |
@@ -60,3 +61,38 @@ def flattened_licenses(licensestr, choose_licenses): | |||
60 | flatten = FlattenVisitor(choose_licenses) | 61 | flatten = FlattenVisitor(choose_licenses) |
61 | flatten.visit_string(licensestr) | 62 | flatten.visit_string(licensestr) |
62 | return flatten.licenses | 63 | return flatten.licenses |
64 | |||
65 | def is_included(licensestr, whitelist=None, blacklist=None): | ||
66 | """Given a license string and whitelist and blacklist, determine if the | ||
67 | license string matches the whitelist and does not match the blacklist. | ||
68 | |||
69 | Returns a tuple holding the boolean state and a list of the applicable | ||
70 | licenses which were excluded (or None, if the state is True) | ||
71 | """ | ||
72 | |||
73 | def include_license(license): | ||
74 | return (any(fnmatch(license, pattern) for pattern in whitelist) and not | ||
75 | any(fnmatch(license, pattern) for pattern in blacklist)) | ||
76 | |||
77 | def choose_licenses(alpha, beta): | ||
78 | """Select the option in an OR which is the 'best' (has the most | ||
79 | included licenses).""" | ||
80 | alpha_weight = len(filter(include_license, alpha)) | ||
81 | beta_weight = len(filter(include_license, beta)) | ||
82 | if alpha_weight > beta_weight: | ||
83 | return alpha | ||
84 | else: | ||
85 | return beta | ||
86 | |||
87 | if not whitelist: | ||
88 | whitelist = ['*'] | ||
89 | |||
90 | if not blacklist: | ||
91 | blacklist = [] | ||
92 | |||
93 | licenses = flattened_licenses(licensestr, choose_licenses) | ||
94 | excluded = filter(lambda lic: not include_license(lic), licenses) | ||
95 | if excluded: | ||
96 | return False, excluded | ||
97 | else: | ||
98 | return True, None | ||