summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Kjellerstedt <peter.kjellerstedt@axis.com>2019-12-11 17:48:13 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-01-28 11:51:03 +0000
commit375065fa17b04ff73529911ece02069eaf7a8e71 (patch)
tree55c04f4eea064c94d44e5474b220b06e8e11e3bc
parent14227b03a22f1fa59ea2ad2aed56c2469219d542 (diff)
downloadpoky-375065fa17b04ff73529911ece02069eaf7a8e71.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: 5ed714139f91eb03871e01b68a4370784071234d) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit 8c9ef587fe499c612a878a1ab42092eb79b334ef) Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/license.bbclass27
-rw-r--r--meta/conf/documentation.conf1
-rw-r--r--meta/lib/oeqa/selftest/cases/incompatible_lic.py6
3 files changed, 27 insertions, 7 deletions
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index adca881c85..b0d37b119c 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
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index 550df20b0f..ce2a37e0e5 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -69,6 +69,7 @@ ASSUME_SHLIBS[doc] = "List of shlib:package[_version] mappings. Useful for lib p
69AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs." 69AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs."
70AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader." 70AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
71AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository." 71AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
72AVAILABLE_LICENSES[doc] = "List of licenses found in the directories specified by COMMON_LICENSE_DIR and LICENSE_PATH."
72 73
73#B 74#B
74 75
diff --git a/meta/lib/oeqa/selftest/cases/incompatible_lic.py b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
index 8fb93af8a8..3cc5bbc35c 100644
--- a/meta/lib/oeqa/selftest/cases/incompatible_lic.py
+++ b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
@@ -12,12 +12,12 @@ class IncompatibleLicenseTests(OESelftestTestCase):
12 if error_msg not in result.output: 12 if error_msg not in result.output:
13 raise AssertionError(result.output) 13 raise AssertionError(result.output)
14 14
15 # Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES) 15 # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
16 # cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license 16 # cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license
17 def test_incompatible_spdx_license(self): 17 def test_incompatible_spdx_license(self):
18 self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0') 18 self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0')
19 19
20 # Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES) 20 # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
21 # cannot be built when INCOMPATIBLE_LICENSE contains an alias (in 21 # cannot be built when INCOMPATIBLE_LICENSE contains an alias (in
22 # SPDXLICENSEMAP) of this SPDX license 22 # SPDXLICENSEMAP) of this SPDX license
23 def test_incompatible_alias_spdx_license(self): 23 def test_incompatible_alias_spdx_license(self):
@@ -35,7 +35,7 @@ class IncompatibleLicenseTests(OESelftestTestCase):
35 self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3') 35 self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3')
36 36
37 # Verify that a package with a non-SPDX license (neither in 37 # Verify that a package with a non-SPDX license (neither in
38 # SRC_DISTRIBUTE_LICENSES nor in SPDXLICENSEMAP) cannot be built when 38 # AVAILABLE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
39 # INCOMPATIBLE_LICENSE contains this license 39 # INCOMPATIBLE_LICENSE contains this license
40 def test_incompatible_nonspdx_license(self): 40 def test_incompatible_nonspdx_license(self):
41 self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense') 41 self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense')