From: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>,
Christopher Larson <kergoth@gmail.com>,
"openembedded-core@lists.openembedded.org"
<openembedded-core@lists.openembedded.org>
Cc: Christopher Larson <chris_larson@mentor.com>
Subject: RE: [OE-core] [PATCH v2] license: add 'any_incompatible' function
Date: Wed, 13 Apr 2022 20:35:57 +0000 [thread overview]
Message-ID: <68938ba5b4034939b472e0c9977bf507@axis.com> (raw)
In-Reply-To: <8c3060148a98b280c93b7eb5da65699f1c6745aa.camel@linuxfoundation.org>
> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> On Behalf Of Richard Purdie
> Sent: den 13 april 2022 19:45
> To: Christopher Larson <kergoth@gmail.com>; openembedded-core@lists.openembedded.org
> Cc: Christopher Larson <chris_larson@mentor.com>
> Subject: Re: [OE-core] [PATCH v2] license: add 'any_incompatible' function
>
> On Wed, 2022-04-13 at 16:00 +0000, Christopher Larson wrote:
> > 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 ""} \
This usage seems error prone at best. What if the license for dbench
is changed?
Also, the way I would prefer to do something like the above (assuming you
meant to include it as a dependency in RDEPENDS:${PN} rather than PACKAGES)
would be to instead unconditionally add it to RRECOMMENDS:${PN}. Then
the normal licensing support should skip the package if you have the
incompatible license globally configured, but since it is only a
recommendation, that should not be a problem.
However, one thing I just realized that isn't working is if you have a
recommendation on a package and then only configure incompatible licenses
per image. This is normally the preferred way to handle incompatible
licenses as you can determine per image if a package should be allowed to
be installed or not. But because the installation of the packages is
handled by the package manager, and the license compliance is handled
later by bitbake, there is currently nothing telling the package manager
to skip the installation of the unwanted package due to its license, and
instead there is an error because bitbake sees that it was installed. :(
> > + \
> > ${@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)} \
>
> I suspect you didn't mean to include this piece since dbench isn't in
> core?
>
> Cheers,
>
> Richard
//Peter
next prev parent reply other threads:[~2022-04-14 16:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2022-04-13 20:40 ` Christopher Larson
2022-04-22 16:59 ` Christopher Larson
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=68938ba5b4034939b472e0c9977bf507@axis.com \
--to=peter.kjellerstedt@axis.com \
--cc=chris_larson@mentor.com \
--cc=kergoth@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.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