mirror of
https://git.yoctoproject.org/poky
synced 2026-04-23 00:32:12 +02:00
insane,license,license_image: Allow treating license problems as errors
Use the same WARN_WA and ERROR_QA variables as insane.bbclass to allow individual recipes, the distro or other configuration to determine whether the various detected license errors should be treated as a warning (as now) or as an error. oe.qa.handle_error isn't immediately fatal, so oe.qa.exit_if_errors must be called at the end of do_populate_lic to fail the task. (From OE-Core rev: bb164adca94b5a43751aabe6b6d702a3d60dfdc7) Signed-off-by: Mike Crowe <mac@mcrowe.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
51b1611e20
commit
cdeb02654f
@@ -26,6 +26,8 @@ WARN_QA ?= " libdir xorg-driver-abi \
|
||||
invalid-packageconfig host-user-contaminated uppercase-pn patch-fuzz \
|
||||
mime mime-xdg unlisted-pkg-lics unhandled-features-check \
|
||||
missing-update-alternatives native-last missing-ptest \
|
||||
license-exists license-no-generic license-syntax license-format \
|
||||
license-incompatible license-file-missing \
|
||||
"
|
||||
ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
|
||||
perms dep-cmp pkgvarcheck perm-config perm-line perm-link \
|
||||
|
||||
@@ -29,6 +29,7 @@ python do_populate_lic() {
|
||||
with open(os.path.join(destdir, "recipeinfo"), "w") as f:
|
||||
for key in sorted(info.keys()):
|
||||
f.write("%s: %s\n" % (key, info[key]))
|
||||
oe.qa.exit_if_errors(d)
|
||||
}
|
||||
|
||||
PSEUDO_IGNORE_PATHS .= ",${@','.join(((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' + (d.getVar('LICENSE_PATH') or '') + ' ' + d.getVar('COREBASE') + '/meta/COPYING').split())}"
|
||||
@@ -182,7 +183,8 @@ def find_license_files(d):
|
||||
# The user may attempt to use NO_GENERIC_LICENSE for a generic license which doesn't make sense
|
||||
# and should not be allowed, warn the user in this case.
|
||||
if d.getVarFlag('NO_GENERIC_LICENSE', license_type):
|
||||
bb.warn("%s: %s is a generic license, please don't use NO_GENERIC_LICENSE for it." % (pn, license_type))
|
||||
oe.qa.handle_error("license-no-generic",
|
||||
"%s: %s is a generic license, please don't use NO_GENERIC_LICENSE for it." % (pn, license_type), d)
|
||||
|
||||
elif non_generic_lic and non_generic_lic in lic_chksums:
|
||||
# if NO_GENERIC_LICENSE is set, we copy the license files from the fetched source
|
||||
@@ -194,7 +196,8 @@ def find_license_files(d):
|
||||
# Add explicity avoid of CLOSED license because this isn't generic
|
||||
if license_type != 'CLOSED':
|
||||
# And here is where we warn people that their licenses are lousy
|
||||
bb.warn("%s: No generic license file exists for: %s in any provider" % (pn, license_type))
|
||||
oe.qa.handle_error("license-exists",
|
||||
"%s: No generic license file exists for: %s in any provider" % (pn, license_type), d)
|
||||
pass
|
||||
|
||||
if not generic_directory:
|
||||
@@ -219,7 +222,8 @@ def find_license_files(d):
|
||||
except oe.license.InvalidLicense as exc:
|
||||
bb.fatal('%s: %s' % (d.getVar('PF'), exc))
|
||||
except SyntaxError:
|
||||
bb.warn("%s: Failed to parse it's LICENSE field." % (d.getVar('PF')))
|
||||
oe.qa.handle_error("license-syntax",
|
||||
"%s: Failed to parse it's LICENSE field." % (d.getVar('PF')), d)
|
||||
# Add files from LIC_FILES_CHKSUM to list of license files
|
||||
lic_chksum_paths = defaultdict(OrderedDict)
|
||||
for path, data in sorted(lic_chksums.items()):
|
||||
@@ -410,14 +414,16 @@ def check_license_format(d):
|
||||
for pos, element in enumerate(elements):
|
||||
if license_pattern.match(element):
|
||||
if pos > 0 and license_pattern.match(elements[pos - 1]):
|
||||
bb.warn('%s: LICENSE value "%s" has an invalid format - license names ' \
|
||||
oe.qa.handle_error('license-format',
|
||||
'%s: LICENSE value "%s" has an invalid format - license names ' \
|
||||
'must be separated by the following characters to indicate ' \
|
||||
'the license selection: %s' %
|
||||
(pn, licenses, license_operator_chars))
|
||||
(pn, licenses, license_operator_chars), d)
|
||||
elif not license_operator.match(element):
|
||||
bb.warn('%s: LICENSE value "%s" has an invalid separator "%s" that is not ' \
|
||||
oe.qa.handle_error('license-format',
|
||||
'%s: LICENSE value "%s" has an invalid separator "%s" that is not ' \
|
||||
'in the valid list of separators (%s)' %
|
||||
(pn, licenses, element, license_operator_chars))
|
||||
(pn, licenses, element, license_operator_chars), d)
|
||||
|
||||
SSTATETASKS += "do_populate_lic"
|
||||
do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}"
|
||||
|
||||
@@ -75,7 +75,7 @@ def write_license_files(d, license_manifest, pkg_dic, rootfs=True):
|
||||
pkg_dic[pkg]["LICENSES"] = re.sub(r' *', ' ', pkg_dic[pkg]["LICENSES"])
|
||||
pkg_dic[pkg]["LICENSES"] = pkg_dic[pkg]["LICENSES"].split()
|
||||
if pkg in whitelist:
|
||||
bb.warn("Including %s with an incompatible license %s into the image, because it has been whitelisted." %(pkg, pkg_dic[pkg]["LICENSE"]))
|
||||
oe.qa.handle_error('license-incompatible', "Including %s with an incompatible license %s into the image, because it has been whitelisted." %(pkg, pkg_dic[pkg]["LICENSE"]), d)
|
||||
|
||||
if not "IMAGE_MANIFEST" in pkg_dic[pkg]:
|
||||
# Rootfs manifest
|
||||
@@ -105,10 +105,10 @@ def write_license_files(d, license_manifest, pkg_dic, rootfs=True):
|
||||
continue
|
||||
|
||||
if not os.path.exists(lic_file):
|
||||
bb.warn("The license listed %s was not in the "\
|
||||
"licenses collected for recipe %s"
|
||||
% (lic, pkg_dic[pkg]["PN"]))
|
||||
|
||||
oe.qa.handle_error('license-file-missing',
|
||||
"The license listed %s was not in the "\
|
||||
"licenses collected for recipe %s"
|
||||
% (lic, pkg_dic[pkg]["PN"]), d)
|
||||
# Two options here:
|
||||
# - Just copy the manifest
|
||||
# - Copy the manifest and the license directories
|
||||
@@ -274,6 +274,7 @@ do_rootfs[recrdeptask] += "do_populate_lic"
|
||||
|
||||
python do_populate_lic_deploy() {
|
||||
license_deployed_manifest(d)
|
||||
oe.qa.exit_if_errors(d)
|
||||
}
|
||||
|
||||
addtask populate_lic_deploy before do_build after do_image_complete
|
||||
|
||||
Reference in New Issue
Block a user