From: Mike Crowe <mac@mcrowe.com>
To: openembedded-core@lists.openembedded.org
Cc: Mike Crowe <mac@mcrowe.com>
Subject: [PATCH v3 2/2] license: Allow treating missing license as error
Date: Wed, 13 Oct 2021 11:48:05 +0100 [thread overview]
Message-ID: <20211013104805.646626-2-mac@mcrowe.com> (raw)
In-Reply-To: <20211013104805.646626-1-mac@mcrowe.com>
Use the same WARN_WA and ERROR_QA variables as insane.bbclass to allow
individual recipes, the distro or other configuration to determine
whether a missing licence should be treated as a warning (as it is now)
or as an error.
oe.qa.handle_error isn't immediately fatal, so track the overall sanity
state and call bb.fatal if required at the end to ensure that the task
really fails. If only bb.error is used then do_populate_lic isn't re-run
on subsequent builds which could lead to the error being missed.
It seems odd for the license- error classes to be listed in
insane.bbclass but implemented in license.bbclass. All recommendations
for somewhere else to put them gratefully received.
Signed-off-by: Mike Crowe <mac@mcrowe.com>
---
meta/classes/insane.bbclass | 1 +
meta/classes/license.bbclass | 27 ++++++++++++++++++++-------
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 895216d3e8..57456c99ad 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -28,6 +28,7 @@ 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 \
"
ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
perms dep-cmp pkgvarcheck perm-config perm-line perm-link \
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index 45d912741d..6bbb71392e 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes/license.bbclass
@@ -112,6 +112,7 @@ def find_license_files(d):
import oe.license
from collections import defaultdict, OrderedDict
+ sane = True
# All the license files for the package
lic_files = d.getVar('LIC_FILES_CHKSUM') or ""
pn = d.getVar('PN')
@@ -146,6 +147,7 @@ def find_license_files(d):
self.generic_visit(node)
def find_license(license_type):
+ import oe.qa
try:
bb.utils.mkdirhier(gen_lic_dest)
except:
@@ -178,7 +180,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))
+ sane &= 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
@@ -190,7 +193,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))
+ sane &= 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:
@@ -215,7 +219,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')))
+ sane &= 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()):
@@ -233,6 +238,8 @@ def find_license_files(d):
for i, data in enumerate(files.values()):
lic_files_paths.append(tuple(["%s.%d" % (basename, i)] + list(data)))
+ if not sane:
+ bb.fatal("Fatal QA errors found, failing task.")
return lic_files_paths
def return_spdx(d, license):
@@ -398,6 +405,8 @@ def check_license_format(d):
Validate operators in LICENSES.
No spaces are allowed between LICENSES.
"""
+ import oe.qa
+ sane = True
pn = d.getVar('PN')
licenses = d.getVar('LICENSE')
from oe.license import license_operator, license_operator_chars, license_pattern
@@ -406,14 +415,18 @@ 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 ' \
+ sane &= 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 ' \
+ sane &= 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)
+ if not sane:
+ bb.fatal("Fatal QA errors found, failing task.")
SSTATETASKS += "do_populate_lic"
do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}"
--
2.30.2
next prev parent reply other threads:[~2021-10-13 10:48 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-13 10:48 [PATCH v3 1/2] lib/oe/qa,insane: Extra error handling functions to library Mike Crowe
2021-10-13 10:48 ` Mike Crowe [this message]
2021-10-14 16:42 ` [PATCH v3 2/2] license: Allow treating missing license as error Mike Crowe
2021-10-14 16:54 ` [OE-core] " Richard Purdie
2021-10-14 17:09 ` Mike Crowe
2021-10-14 20:14 ` Richard Purdie
2021-10-14 21:48 ` Richard Purdie
2021-10-15 11:04 ` Mike Crowe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211013104805.646626-2-mac@mcrowe.com \
--to=mac@mcrowe.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox