summaryrefslogtreecommitdiffstats
path: root/meta/classes/license.bbclass
diff options
context:
space:
mode:
authorElizabeth Flanagan <elizabeth.flanagan@intel.com>2012-03-23 16:51:42 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-03-25 12:23:38 +0100
commitbdf2d94c35b7e5ed1723f987696a6c865bff212c (patch)
tree6a39dfeac0ff192a45143842e4b70e96a57aee1c /meta/classes/license.bbclass
parenta3da6c381f792535e68a67f7cb78eb82b5a09842 (diff)
downloadpoky-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.bbclass39
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
139python do_populate_lic() { 138python 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
257def incompatible_license(d,dont_want_license): 256def 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
265def 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
303def check_license_flags(d): 314def 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