diff options
author | Elizabeth Flanagan <elizabeth.flanagan@intel.com> | 2012-03-23 16:51:42 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-03-25 12:23:38 +0100 |
commit | bdf2d94c35b7e5ed1723f987696a6c865bff212c (patch) | |
tree | 6a39dfeac0ff192a45143842e4b70e96a57aee1c /meta/classes/license.bbclass | |
parent | a3da6c381f792535e68a67f7cb78eb82b5a09842 (diff) | |
download | poky-bdf2d94c35b7e5ed1723f987696a6c865bff212c.tar.gz |
INCOMPATIBLE_LICENSE: support for spdx and pkg licenses
This adds a few things to the incompatible license functionality
1. INCOMPATIBLE_LICENSE was unable to distinguish any variation
within LICENSE (e.g. GPLv3 v. GPLv3.0). This now utilizes the
SPDXLICENSEMAP of the license indicated as INCOMPATIBLE_LICENSE
2. Given a recipe where the main LICENSE was incompatible but
a package of the recipe was compatible, the entire recipe would
be excluded. This allows us some finer grained control over what
exactly gets excluded.
(From OE-Core rev: a8d7246f7b13ef2636c325263c8bfa22552d7a57)
Signed-off-by: Elizabeth Flanagan <elizabeth.flanagan@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/license.bbclass')
-rw-r--r-- | meta/classes/license.bbclass | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass index 4b392ceea0..eab630e47b 100644 --- a/meta/classes/license.bbclass +++ b/meta/classes/license.bbclass | |||
@@ -81,7 +81,7 @@ license_create_manifest() { | |||
81 | INSTALLED_PKGS=`cat ${LICENSE_DIRECTORY}/${IMAGE_NAME}/package.manifest` | 81 | INSTALLED_PKGS=`cat ${LICENSE_DIRECTORY}/${IMAGE_NAME}/package.manifest` |
82 | # list of installed packages is broken for deb | 82 | # list of installed packages is broken for deb |
83 | for pkg in ${INSTALLED_PKGS}; do | 83 | for pkg in ${INSTALLED_PKGS}; do |
84 | # not the best way to do this but licenses are not arch-dependent iirc | 84 | # not the best way to do this but licenses are not arch dependant iirc |
85 | files=`find ${TMPDIR}/pkgdata/*/runtime -name ${pkg}| head -1` | 85 | files=`find ${TMPDIR}/pkgdata/*/runtime -name ${pkg}| head -1` |
86 | for filename in $files; do | 86 | for filename in $files; do |
87 | pkged_pn="$(sed -n 's/^PN: //p' ${filename})" | 87 | pkged_pn="$(sed -n 's/^PN: //p' ${filename})" |
@@ -135,7 +135,6 @@ license_create_manifest() { | |||
135 | 135 | ||
136 | } | 136 | } |
137 | 137 | ||
138 | |||
139 | python do_populate_lic() { | 138 | python do_populate_lic() { |
140 | """ | 139 | """ |
141 | Populate LICENSE_DIRECTORY with licenses. | 140 | Populate LICENSE_DIRECTORY with licenses. |
@@ -254,27 +253,40 @@ python do_populate_lic() { | |||
254 | 253 | ||
255 | } | 254 | } |
256 | 255 | ||
257 | def incompatible_license(d,dont_want_license): | 256 | def return_spdx(d, license): |
257 | """ | ||
258 | This function returns the spdx mapping of a license. | ||
258 | """ | 259 | """ |
259 | This function checks if a package has only incompatible licenses. It also take into consideration 'or' | 260 | if d.getVarFlag('SPDXLICENSEMAP', license) != None: |
261 | return license | ||
262 | else: | ||
263 | return d.getVarFlag('SPDXLICENSEMAP', license_type) | ||
264 | |||
265 | def incompatible_license(d, dont_want_license, package=""): | ||
266 | """ | ||
267 | This function checks if a recipe has only incompatible licenses. It also take into consideration 'or' | ||
260 | operand. | 268 | operand. |
261 | """ | 269 | """ |
262 | import re | 270 | import re |
263 | import oe.license | 271 | import oe.license |
264 | from fnmatch import fnmatchcase as fnmatch | 272 | from fnmatch import fnmatchcase as fnmatch |
265 | 273 | pn = d.getVar('PN', True) | |
266 | dont_want_licenses = [] | 274 | dont_want_licenses = [] |
267 | dont_want_licenses.append(d.getVar('INCOMPATIBLE_LICENSE', True)) | 275 | dont_want_licenses.append(d.getVar('INCOMPATIBLE_LICENSE', True)) |
268 | if d.getVarFlag('SPDXLICENSEMAP', dont_want_license): | 276 | recipe_license = d.getVar('LICENSE', True) |
269 | dont_want_licenses.append(d.getVarFlag('SPDXLICENSEMAP', dont_want_license)) | 277 | if package != "": |
278 | if d.getVar('LICENSE_' + pn + '-' + package, True): | ||
279 | license = d.getVar('LICENSE_' + pn + '-' + package, True) | ||
280 | else: | ||
281 | license = recipe_license | ||
282 | else: | ||
283 | license = recipe_license | ||
284 | spdx_license = return_spdx(d, dont_want_license) | ||
285 | dont_want_licenses.append(spdx_license) | ||
270 | 286 | ||
271 | def include_license(license): | 287 | def include_license(license): |
272 | if any(fnmatch(license, pattern) for pattern in dont_want_licenses): | 288 | if any(fnmatch(license, pattern) for pattern in dont_want_licenses): |
273 | return False | 289 | return False |
274 | else: | ||
275 | spdx_license = d.getVarFlag('SPDXLICENSEMAP', license) | ||
276 | if spdx_license and any(fnmatch(spdx_license, pattern) for pattern in dont_want_licenses): | ||
277 | return False | ||
278 | else: | 290 | else: |
279 | return True | 291 | return True |
280 | 292 | ||
@@ -290,16 +302,15 @@ def incompatible_license(d,dont_want_license): | |||
290 | is not a 'X+' license. | 302 | is not a 'X+' license. |
291 | """ | 303 | """ |
292 | if not re.search(r'[+]',dont_want_license): | 304 | if not re.search(r'[+]',dont_want_license): |
293 | licenses=oe.license.flattened_licenses(re.sub(r'[+]', '', d.getVar('LICENSE', True)), choose_licenses) | 305 | licenses=oe.license.flattened_licenses(re.sub(r'[+]', '', license), choose_licenses) |
294 | else: | 306 | else: |
295 | licenses=oe.license.flattened_licenses(d.getVar('LICENSE', True), choose_licenses) | 307 | licenses=oe.license.flattened_licenses(license, choose_licenses) |
296 | 308 | ||
297 | for onelicense in licenses: | 309 | for onelicense in licenses: |
298 | if not include_license(onelicense): | 310 | if not include_license(onelicense): |
299 | return True | 311 | return True |
300 | return False | 312 | return False |
301 | 313 | ||
302 | |||
303 | def check_license_flags(d): | 314 | def check_license_flags(d): |
304 | """ | 315 | """ |
305 | This function checks if a recipe has any LICENSE_FLAGs that | 316 | This function checks if a recipe has any LICENSE_FLAGs that |