diff options
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 |
