diff options
Diffstat (limited to 'meta/classes/license.bbclass')
-rw-r--r-- | meta/classes/license.bbclass | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass index d351b5aaed..4b98e29916 100644 --- a/meta/classes/license.bbclass +++ b/meta/classes/license.bbclass | |||
@@ -237,6 +237,51 @@ python do_populate_lic() { | |||
237 | 237 | ||
238 | } | 238 | } |
239 | 239 | ||
240 | def incompatible_license(d,dont_want_license): | ||
241 | """ | ||
242 | This function checks if a package has only incompatible licenses. It also take into consideration 'or' | ||
243 | operand. | ||
244 | """ | ||
245 | import re | ||
246 | import oe.license | ||
247 | from fnmatch import fnmatchcase as fnmatch | ||
248 | |||
249 | dont_want_licenses = [] | ||
250 | dont_want_licenses.append(d.getVar('INCOMPATIBLE_LICENSE', 1)) | ||
251 | if d.getVarFlag('SPDXLICENSEMAP', dont_want_license): | ||
252 | dont_want_licenses.append(d.getVarFlag('SPDXLICENSEMAP', dont_want_license)) | ||
253 | |||
254 | def include_license(license): | ||
255 | if any(fnmatch(license, pattern) for pattern in dont_want_licenses): | ||
256 | return False | ||
257 | else: | ||
258 | spdx_license = d.getVarFlag('SPDXLICENSEMAP', license) | ||
259 | if spdx_license and any(fnmatch(spdx_license, pattern) for pattern in dont_want_licenses): | ||
260 | return False | ||
261 | else: | ||
262 | return True | ||
263 | |||
264 | def choose_licenses(a, b): | ||
265 | if all(include_license(lic) for lic in a): | ||
266 | return a | ||
267 | else: | ||
268 | return b | ||
269 | |||
270 | """ | ||
271 | If you want to exlude license named generically 'X', we surely want to exlude 'X+' as well. | ||
272 | In consequence, we will exclude the '+' character from LICENSE in case INCOMPATIBLE_LICENSE | ||
273 | is not a 'X+' license. | ||
274 | """ | ||
275 | if not re.search(r'[+]',dont_want_license): | ||
276 | licenses=oe.license.flattened_licenses(re.sub(r'[+]', '', d.getVar('LICENSE', True)), choose_licenses) | ||
277 | else: | ||
278 | licenses=oe.license.flattened_licenses(d.getVar('LICENSE', True), choose_licenses) | ||
279 | |||
280 | for onelicense in licenses: | ||
281 | if not include_license(onelicense): | ||
282 | return True | ||
283 | return False | ||
284 | |||
240 | SSTATETASKS += "do_populate_lic" | 285 | SSTATETASKS += "do_populate_lic" |
241 | do_populate_lic[sstate-name] = "populate-lic" | 286 | do_populate_lic[sstate-name] = "populate-lic" |
242 | do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}" | 287 | do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}" |