From 3cabb0e17082c0d2ee984d646d0951f9200b8e9c Mon Sep 17 00:00:00 2001 From: Joshua Watt Date: Thu, 24 Oct 2024 13:03:09 -0600 Subject: [PATCH] lib/package: Check incompatible licenses at packaging time Instead of checking for incompatible licenses in the anonymous python and setting '_exclude_incompatible-', (re)check all the packages in populate_packages(). This ensures that all packages are processed, even dynamically generated ones. The use of the '_exclude-incompatible-' variable set in base.bbclass has been the mechanism used for per-packages licenses since it was added as a feature (although with different names for the variable throughout history). However, since this misses dynamic packages, calling oe.license.skip_incompatible_package_licenses() a second time on the actual final package set is a better solution. (From OE-Core rev: 1816c5a5e724a7f907c9afe4a47b6699ea081ace) Signed-off-by: Joshua Watt Signed-off-by: Richard Purdie --- meta/classes-global/base.bbclass | 1 - meta/classes-global/package.bbclass | 4 ---- meta/lib/oe/package.py | 6 +++--- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass index 5b8663f454..b81e61fdb7 100644 --- a/meta/classes-global/base.bbclass +++ b/meta/classes-global/base.bbclass @@ -581,7 +581,6 @@ python () { if unskipped_pkgs: for pkg in skipped_pkgs: bb.debug(1, "Skipping the package %s at do_rootfs because of incompatible license(s): %s" % (pkg, ' '.join(skipped_pkgs[pkg]))) - d.setVar('_exclude_incompatible-' + pkg, ' '.join(skipped_pkgs[pkg])) for pkg in unskipped_pkgs: bb.debug(1, "Including the package %s" % pkg) else: diff --git a/meta/classes-global/package.bbclass b/meta/classes-global/package.bbclass index 6cd8c0140f..9be1d6a5b1 100644 --- a/meta/classes-global/package.bbclass +++ b/meta/classes-global/package.bbclass @@ -447,10 +447,6 @@ def gen_packagevar(d, pkgvars="PACKAGEVARS"): for p in pkgs: for v in vars: ret.append(v + ":" + p) - - # Ensure that changes to INCOMPATIBLE_LICENSE re-run do_package for - # affected recipes. - ret.append('_exclude_incompatible-%s' % p) return " ".join(ret) diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index c213a9a3ca..104b880b9e 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py @@ -1447,10 +1447,10 @@ def populate_packages(d): # Handle excluding packages with incompatible licenses package_list = [] + skipped_pkgs = oe.license.skip_incompatible_package_licenses(d, packages) for pkg in packages: - licenses = d.getVar('_exclude_incompatible-' + pkg) - if licenses: - msg = "Excluding %s from packaging as it has incompatible license(s): %s" % (pkg, licenses) + if pkg in skipped_pkgs: + msg = "Excluding %s from packaging as it has incompatible license(s): %s" % (pkg, skipped_pkgs[pkg]) oe.qa.handle_error("incompatible-license", msg, d) else: package_list.append(pkg)