diff options
Diffstat (limited to 'poky/meta/classes/license.bbclass')
-rw-r--r-- | poky/meta/classes/license.bbclass | 62 |
1 files changed, 22 insertions, 40 deletions
diff --git a/poky/meta/classes/license.bbclass b/poky/meta/classes/license.bbclass index dec9867209..0c637e966e 100644 --- a/poky/meta/classes/license.bbclass +++ b/poky/meta/classes/license.bbclass @@ -193,7 +193,7 @@ def find_license_files(d): os.path.join(srcdir, non_generic_lic), None, None)) non_generic_lics[non_generic_lic] = license_type else: - # Add explicity avoid of CLOSED license because this isn't generic + # Explicitly avoid the CLOSED license because this isn't generic if license_type != 'CLOSED': # And here is where we warn people that their licenses are lousy oe.qa.handle_error("license-exists", @@ -252,52 +252,34 @@ def return_spdx(d, license): def canonical_license(d, license): """ Return the canonical (SPDX) form of the license if available (so GPLv3 - becomes GPL-3.0) or the passed license if there is no canonical form. + becomes GPL-3.0-only) or the passed license if there is no canonical form. """ return d.getVarFlag('SPDXLICENSEMAP', license) or license -def available_licenses(d): +def expand_wildcard_licenses(d, wildcard_licenses): """ - Return the available licenses by searching the directories specified by - COMMON_LICENSE_DIR and LICENSE_PATH. + There are some common wildcard values users may want to use. Support them + here. """ - 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 = set(wildcard_licenses) + mapping = { + "AGPL-3.0*" : ["AGPL-3.0-only", "AGPL-3.0-or-later"], + "GPL-3.0*" : ["GPL-3.0-only", "GPL-3.0-or-later"], + "LGPL-3.0*" : ["LGPL-3.0-only", "LGPL-3.0-or-later"], + } + for k in mapping: + if k in wildcard_licenses: + licenses.remove(k) + for item in mapping[k]: + licenses.add(item) - 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))}" + for l in licenses: + if l in oe.license.obsolete_license_list(): + bb.fatal("Error, %s is an obsolete license, please use an SPDX reference in INCOMPATIBLE_LICENSE" % l) + if "*" in l: + bb.fatal("Error, %s is an invalid license wildcard entry" % l) -def expand_wildcard_licenses(d, wildcard_licenses): - """ - Return actual spdx format license names if wildcards are used. We expand - wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES. - """ - import fnmatch - - licenses = wildcard_licenses[:] - spdxmapkeys = d.getVarFlags('SPDXLICENSEMAP').keys() - for wld_lic in wildcard_licenses: - spdxflags = fnmatch.filter(spdxmapkeys, wld_lic) - licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags] - # Assume if we're passed "GPLv3" or "*GPLv3" it means -or-later as well - if not wld_lic.endswith(("-or-later", "-only", "*", "+")): - spdxflags = fnmatch.filter(spdxmapkeys, wld_lic + "+") - licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags] - - spdx_lics = d.getVar('AVAILABLE_LICENSES').split() - for wld_lic in wildcard_licenses: - licenses += fnmatch.filter(spdx_lics, wld_lic) - - licenses = list(set(licenses)) - return licenses + return list(licenses) def incompatible_license_contains(license, truevalue, falsevalue, d): license = canonical_license(d, license) |