summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorPeter Kjellerstedt <peter.kjellerstedt@axis.com>2019-12-11 17:48:13 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-12-16 23:25:49 +0000
commit2a263780814e3b07d48e3812579cfe4696db8413 (patch)
treedd22977fd3e6dffa412b9507b9c36e14e31ee404 /meta/classes
parent15a450cd94b76787d7a15d54eca6d522a29eae49 (diff)
downloadpoky-2a263780814e3b07d48e3812579cfe4696db8413.tar.gz
license.bbclass: Introduce AVAILABLE_LICENSES that lists all licenses
Previously, there was SRC_DISTRIBUTE_LICENSES, an undocumented variable that contained a static list of licenses. It was used by expand_wildcard_licenses() to expand any wildcards used in, e.g., INCOMPATIBLE_LICENSE. However, since this static list of licenses has not been kept up-to-date, many licenses were missing, with the result that if one tried to use any of those licenses with a wildcard, no licenses would be found, effectively ignoring that they should be marked as incompatible. This introduces a new (documented) variable, AVAILABLE_LICENSES, that is automatically updated to contain all licenses found in any directories specified by ${COMMON_LICENSE_DIR} and ${LICENSE_PATH}, and uses it instead of SRC_DISTRIBUTE_LICENSES when expanding wildcards. (From OE-Core rev: 8c9ef587fe499c612a878a1ab42092eb79b334ef) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/license.bbclass27
1 files changed, 23 insertions, 4 deletions
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index 648a4d7892..c388740003 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes/license.bbclass
@@ -252,7 +252,7 @@ def canonical_license(d, license):
252 """ 252 """
253 Return the canonical (SPDX) form of the license if available (so GPLv3 253 Return the canonical (SPDX) form of the license if available (so GPLv3
254 becomes GPL-3.0), for the license named 'X+', return canonical form of 254 becomes GPL-3.0), for the license named 'X+', return canonical form of
255 'X' if availabel and the tailing '+' (so GPLv3+ becomes GPL-3.0+), 255 'X' if available and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
256 or the passed license if there is no canonical form. 256 or the passed license if there is no canonical form.
257 """ 257 """
258 lic = d.getVarFlag('SPDXLICENSEMAP', license) or "" 258 lic = d.getVarFlag('SPDXLICENSEMAP', license) or ""
@@ -262,10 +262,29 @@ def canonical_license(d, license):
262 lic += '+' 262 lic += '+'
263 return lic or license 263 return lic or license
264 264
265def available_licenses(d):
266 """
267 Return the available licenses by searching the directories specified by
268 COMMON_LICENSE_DIR and LICENSE_PATH.
269 """
270 lic_dirs = ((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' +
271 (d.getVar('LICENSE_PATH') or '')).split()
272
273 licenses = []
274 for lic_dir in lic_dirs:
275 licenses += os.listdir(lic_dir)
276
277 licenses = sorted(licenses)
278 return licenses
279
280# Only determine the list of all available licenses once. This assumes that any
281# additions to LICENSE_PATH have been done before this file is parsed.
282AVAILABLE_LICENSES := "${@' '.join(available_licenses(d))}"
283
265def expand_wildcard_licenses(d, wildcard_licenses): 284def expand_wildcard_licenses(d, wildcard_licenses):
266 """ 285 """
267 Return actual spdx format license names if wildcard used. We expand 286 Return actual spdx format license names if wildcards are used. We expand
268 wildcards from SPDXLICENSEMAP flags and SRC_DISTRIBUTE_LICENSES values. 287 wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES.
269 """ 288 """
270 import fnmatch 289 import fnmatch
271 licenses = wildcard_licenses[:] 290 licenses = wildcard_licenses[:]
@@ -274,7 +293,7 @@ def expand_wildcard_licenses(d, wildcard_licenses):
274 spdxflags = fnmatch.filter(spdxmapkeys, wld_lic) 293 spdxflags = fnmatch.filter(spdxmapkeys, wld_lic)
275 licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags] 294 licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags]
276 295
277 spdx_lics = (d.getVar('SRC_DISTRIBUTE_LICENSES', False) or '').split() 296 spdx_lics = d.getVar('AVAILABLE_LICENSES').split()
278 for wld_lic in wildcard_licenses: 297 for wld_lic in wildcard_licenses:
279 licenses += fnmatch.filter(spdx_lics, wld_lic) 298 licenses += fnmatch.filter(spdx_lics, wld_lic)
280 299