This actually also results in checksums changing for recipes that inherit license and call incompatible_license_contains() when adding/removing layers that add to the license path, such as lvm2.
On Thu, Aug 20, 2020 at 3:35 PM Denys Dmytriyenko <de...@denix.org> wrote: > This actually fails yocto-check-layer script for Yocto compliance > checking, when a layer provides own licenses via LICENSE_PATH > (in layer.conf - LICENSE_PATH += "${LAYERDIR}/licenses"): > > Variable AVAILABLE_LICENSES value changed: > ... > > Is there a new way to provide additional licenses from a layer or > should the yocto-check-layer script be modified to accomodate > (i.e. ignore) this change? > > -- > Denys > > > On Wed, Dec 11, 2019 at 05:48:13PM +0100, Peter Kjellerstedt wrote: > > 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. > > > > Signed-off-by: Peter Kjellerstedt <peter.kjellerst...@axis.com> > > --- > > > > PATCHv2: Correct spelling of 'available'. > > > > meta/classes/license.bbclass | 27 ++++++++++++++++--- > > meta/conf/documentation.conf | 1 + > > .../oeqa/selftest/cases/incompatible_lic.py | 6 ++--- > > 3 files changed, 27 insertions(+), 7 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): > > """ > > 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 > > - '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. > > """ > > lic = d.getVarFlag('SPDXLICENSEMAP', license) or "" > > @@ -262,10 +262,29 @@ def canonical_license(d, license): > > lic += '+' > > 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): > > """ > > - Return actual spdx format license names if wildcard used. We expand > > - wildcards from SPDXLICENSEMAP flags and SRC_DISTRIBUTE_LICENSES > values. > > + Return actual spdx format license names if wildcards are used. We > expand > > + wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES. > > """ > > import fnmatch > > licenses = wildcard_licenses[:] > > @@ -274,7 +293,7 @@ def expand_wildcard_licenses(d, wildcard_licenses): > > spdxflags = fnmatch.filter(spdxmapkeys, wld_lic) > > 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: > > licenses += fnmatch.filter(spdx_lics, wld_lic) > > > > diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf > > index fca36f3cf6..0b21d1f63e 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 > > 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." > > 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 > > > > diff --git a/meta/lib/oeqa/selftest/cases/incompatible_lic.py > b/meta/lib/oeqa/selftest/cases/incompatible_lic.py > > index 904b5b4094..ad878571b5 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): > > if error_msg not in 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 > > def test_incompatible_spdx_license(self): > > 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 > > # SPDXLICENSEMAP) of this SPDX license > > def test_incompatible_alias_spdx_license(self): > > @@ -35,7 +35,7 @@ class IncompatibleLicenseTests(OESelftestTestCase): > > self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3') > > > > # 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 > > def test_incompatible_nonspdx_license(self): > > self.lic_test('incompatible-nonspdx-license', 'FooLicense', > 'FooLicense') > > -- > > 2.21.0 > > > > -- > > _______________________________________________ > > Openembedded-core mailing list > > Openembedded-core@lists.openembedded.org > > http://lists.openembedded.org/mailman/listinfo/openembedded-core > > -- Christopher Larson kergoth at gmail dot com Founder - BitBake, OpenEmbedded, OpenZaurus Senior Software Engineer, Mentor Graphics
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#141702): https://lists.openembedded.org/g/openembedded-core/message/141702 Mute This Topic: https://lists.openembedded.org/mt/72389694/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-