mirror of
https://git.yoctoproject.org/poky
synced 2026-06-02 01:19:52 +00:00
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>
This commit is contained in:
committed by
Richard Purdie
parent
14227b03a2
commit
375065fa17
@@ -252,7 +252,7 @@ def canonical_license(d, license):
|
|||||||
"""
|
"""
|
||||||
Return the canonical (SPDX) form of the license if available (so GPLv3
|
Return the canonical (SPDX) form of the license if available (so GPLv3
|
||||||
becomes GPL-3.0), for the license named 'X+', return canonical form of
|
becomes GPL-3.0), for the license named 'X+', return canonical form of
|
||||||
'X' if availabel and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
|
'X' if available and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
|
||||||
or the passed license if there is no canonical form.
|
or the passed license if there is no canonical form.
|
||||||
"""
|
"""
|
||||||
lic = d.getVarFlag('SPDXLICENSEMAP', license) or ""
|
lic = d.getVarFlag('SPDXLICENSEMAP', license) or ""
|
||||||
@@ -262,10 +262,29 @@ def canonical_license(d, license):
|
|||||||
lic += '+'
|
lic += '+'
|
||||||
return lic or license
|
return lic or license
|
||||||
|
|
||||||
|
def available_licenses(d):
|
||||||
|
"""
|
||||||
|
Return the available licenses by searching the directories specified by
|
||||||
|
COMMON_LICENSE_DIR and LICENSE_PATH.
|
||||||
|
"""
|
||||||
|
lic_dirs = ((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' +
|
||||||
|
(d.getVar('LICENSE_PATH') or '')).split()
|
||||||
|
|
||||||
|
licenses = []
|
||||||
|
for lic_dir in lic_dirs:
|
||||||
|
licenses += os.listdir(lic_dir)
|
||||||
|
|
||||||
|
licenses = sorted(licenses)
|
||||||
|
return licenses
|
||||||
|
|
||||||
|
# Only determine the list of all available licenses once. This assumes that any
|
||||||
|
# additions to LICENSE_PATH have been done before this file is parsed.
|
||||||
|
AVAILABLE_LICENSES := "${@' '.join(available_licenses(d))}"
|
||||||
|
|
||||||
def expand_wildcard_licenses(d, wildcard_licenses):
|
def expand_wildcard_licenses(d, wildcard_licenses):
|
||||||
"""
|
"""
|
||||||
Return actual spdx format license names if wildcard used. We expand
|
Return actual spdx format license names if wildcards are used. We expand
|
||||||
wildcards from SPDXLICENSEMAP flags and SRC_DISTRIBUTE_LICENSES values.
|
wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES.
|
||||||
"""
|
"""
|
||||||
import fnmatch
|
import fnmatch
|
||||||
licenses = wildcard_licenses[:]
|
licenses = wildcard_licenses[:]
|
||||||
@@ -274,7 +293,7 @@ def expand_wildcard_licenses(d, wildcard_licenses):
|
|||||||
spdxflags = fnmatch.filter(spdxmapkeys, wld_lic)
|
spdxflags = fnmatch.filter(spdxmapkeys, wld_lic)
|
||||||
licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags]
|
licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags]
|
||||||
|
|
||||||
spdx_lics = (d.getVar('SRC_DISTRIBUTE_LICENSES', False) or '').split()
|
spdx_lics = d.getVar('AVAILABLE_LICENSES').split()
|
||||||
for wld_lic in wildcard_licenses:
|
for wld_lic in wildcard_licenses:
|
||||||
licenses += fnmatch.filter(spdx_lics, wld_lic)
|
licenses += fnmatch.filter(spdx_lics, wld_lic)
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ ASSUME_SHLIBS[doc] = "List of shlib:package[_version] mappings. Useful for lib p
|
|||||||
AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs."
|
AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs."
|
||||||
AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
|
AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
|
||||||
AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
|
AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
|
||||||
|
AVAILABLE_LICENSES[doc] = "List of licenses found in the directories specified by COMMON_LICENSE_DIR and LICENSE_PATH."
|
||||||
|
|
||||||
#B
|
#B
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ class IncompatibleLicenseTests(OESelftestTestCase):
|
|||||||
if error_msg not in result.output:
|
if error_msg not in result.output:
|
||||||
raise AssertionError(result.output)
|
raise AssertionError(result.output)
|
||||||
|
|
||||||
# Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES)
|
# Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
|
||||||
# cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license
|
# cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license
|
||||||
def test_incompatible_spdx_license(self):
|
def test_incompatible_spdx_license(self):
|
||||||
self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0')
|
self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0')
|
||||||
|
|
||||||
# Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES)
|
# Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
|
||||||
# cannot be built when INCOMPATIBLE_LICENSE contains an alias (in
|
# cannot be built when INCOMPATIBLE_LICENSE contains an alias (in
|
||||||
# SPDXLICENSEMAP) of this SPDX license
|
# SPDXLICENSEMAP) of this SPDX license
|
||||||
def test_incompatible_alias_spdx_license(self):
|
def test_incompatible_alias_spdx_license(self):
|
||||||
@@ -35,7 +35,7 @@ class IncompatibleLicenseTests(OESelftestTestCase):
|
|||||||
self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3')
|
self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3')
|
||||||
|
|
||||||
# Verify that a package with a non-SPDX license (neither in
|
# Verify that a package with a non-SPDX license (neither in
|
||||||
# SRC_DISTRIBUTE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
|
# AVAILABLE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
|
||||||
# INCOMPATIBLE_LICENSE contains this license
|
# INCOMPATIBLE_LICENSE contains this license
|
||||||
def test_incompatible_nonspdx_license(self):
|
def test_incompatible_nonspdx_license(self):
|
||||||
self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense')
|
self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense')
|
||||||
|
|||||||
Reference in New Issue
Block a user