Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH v2] license: add 'any_incompatible' function
@ 2022-04-13 16:00 Christopher Larson
  2022-04-13 16:00 ` [PATCH] " Christopher Larson
  2022-04-13 17:44 ` [OE-core] [PATCH v2] " Richard Purdie
  0 siblings, 2 replies; 8+ messages in thread
From: Christopher Larson @ 2022-04-13 16:00 UTC (permalink / raw)
  To: openembedded-core; +Cc: Christopher Larson

This function returns True if any of the specified packages are skipped due to
incompatible license.

License exceptions are obeyed. The user may specify the package's license for
cross-recipe checks.

This allows for additions to packagegroups only for non-incompatible builds. For
example:

    RDEPENDS_${PN} += "${@'dbench' if not any_incompatible(d, 'dbench', 'GPL-3.0-only') else ''}"

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
---
 meta/classes/license.bbclass                  | 38 +++++++++++++++++++
 .../packagegroups/packagegroup-base.bb        |  2 +
 2 files changed, 40 insertions(+)

v2 changes: fixed string packages logic, corrected reference to
apply_pkg_license_exception, and avoided use of ${@} in the function docstring
to avoid bitbake expanding it and recursing.

diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index 0c637e966e..41993b7227 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes/license.bbclass
@@ -320,6 +320,44 @@ def incompatible_license(d, dont_want_licenses, package=None):
 
     return incompatible_pkg_license(d, dont_want_licenses, license)
 
+def any_incompatible(d, packages, licensestring=None):
+    """Return True if any of the packages are skipped due to incompatible license.
+
+    License exceptions are obeyed. The user may specify the package's license
+    for cross-recipe checks.
+
+    This allows for additions to packagegroups only for non-incompatible builds.
+
+    For example: 'dbench' if not any_incompatible(d, 'dbench', 'GPL-3.0-only') else ''
+    """
+    import oe.license
+
+    if isinstance(packages, str):
+        packages = packages.split()
+
+    bad_licenses = (d.getVar("INCOMPATIBLE_LICENSE") or "").split()
+    if not bad_licenses:
+        return False
+    bad_licenses = expand_wildcard_licenses(d, bad_licenses)
+
+    if licensestring is None:
+        licensestring = d.getVar("LICENSE:%s" % package) if package else None
+        if not licensestring:
+            licensestring = d.getVar("LICENSE")
+
+    exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split()
+    for pkg in packages:
+        remaining_bad_licenses = oe.license.apply_pkg_license_exception(
+            pkg, bad_licenses, exceptions
+        )
+
+        incompatible_lic = incompatible_pkg_license(
+            d, remaining_bad_licenses, licensestring
+        )
+        if incompatible_lic:
+            return True
+    return False
+
 def check_license_flags(d):
     """
     This function checks if a recipe has any LICENSE_FLAGS that
diff --git a/meta/recipes-core/packagegroups/packagegroup-base.bb b/meta/recipes-core/packagegroups/packagegroup-base.bb
index 7489ef61b0..1c97d03c21 100644
--- a/meta/recipes-core/packagegroups/packagegroup-base.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-base.bb
@@ -14,6 +14,8 @@ PACKAGES = ' \
             packagegroup-distro-base \
             packagegroup-machine-base \
             \
+            ${@"dbench" if not any_incompatible(d, "dbench", "GPL-3.0-only") else ""} \
+            \
             ${@bb.utils.contains("MACHINE_FEATURES", "acpi", "packagegroup-base-acpi", "",d)} \
             ${@bb.utils.contains("MACHINE_FEATURES", "alsa", "packagegroup-base-alsa", "", d)} \
             ${@bb.utils.contains("MACHINE_FEATURES", "apm", "packagegroup-base-apm", "", d)} \
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread
* [PATCH] license: add 'any_incompatible' function
@ 2022-04-11 16:14 Christopher Larson
  0 siblings, 0 replies; 8+ messages in thread
From: Christopher Larson @ 2022-04-11 16:14 UTC (permalink / raw)
  To: openembedded-core; +Cc: Christopher Larson

This function returns True if any of the specified packages are skipped due to
incompatible license.

License exceptions are obeyed. The user may specify the package's license for
cross-recipe checks.

This allows for additions to packagegroups only for non-incompatible builds. For
example:

    RDEPENDS_${PN} += "${@'dbench' if not any_incompatible(d, 'dbench', 'GPL-3.0-only') else ''}"

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
---
 meta/classes/license.bbclass | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index 0c637e966e..db8c3f8584 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes/license.bbclass
@@ -320,6 +320,43 @@ def incompatible_license(d, dont_want_licenses, package=None):
 
     return incompatible_pkg_license(d, dont_want_licenses, license)
 
+def any_incompatible(d, packages, licensestring=None):
+    """Return True if any of the packages are skipped due to incompatible license.
+
+    License exceptions are obeyed. The user may specify the package's license
+    for cross-recipe checks.
+
+    This allows for additions to packagegroups only for non-incompatible builds.
+    For example:
+
+        RDEPENDS_${PN} += "${@'dbench' if not any_incompatible(d, 'dbench', 'GPL-3.0-only') else ''}"
+    """
+    if not isinstance(packages, str):
+        packages = packages.split()
+
+    bad_licenses = (d.getVar("INCOMPATIBLE_LICENSE") or "").split()
+    if not bad_licenses:
+        return False
+    bad_licenses = expand_wildcard_licenses(d, bad_licenses)
+
+    if licensestring is None:
+        licensestring = d.getVar("LICENSE:%s" % package) if package else None
+        if not licensestring:
+            licensestring = d.getVar("LICENSE")
+
+    exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split()
+    for pkg in packages:
+        remaining_bad_licenses = license.apply_pkg_license_exception(
+            pkg, bad_licenses, exceptions
+        )
+
+        incompatible_lic = incompatible_pkg_license(
+            d, remaining_bad_licenses, licensestring
+        )
+        if incompatible_lic:
+            return True
+    return False
+
 def check_license_flags(d):
     """
     This function checks if a recipe has any LICENSE_FLAGS that
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-04-22 19:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-13 16:00 [PATCH v2] license: add 'any_incompatible' function Christopher Larson
2022-04-13 16:00 ` [PATCH] " Christopher Larson
2022-04-13 17:44 ` [OE-core] [PATCH v2] " Richard Purdie
2022-04-13 18:07   ` Christopher Larson
2022-04-13 20:35   ` Peter Kjellerstedt
2022-04-13 20:40     ` Christopher Larson
2022-04-22 16:59     ` Christopher Larson
  -- strict thread matches above, loose matches on Subject: below --
2022-04-11 16:14 [PATCH] " Christopher Larson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox