Message ID | 20241023212013.995247-3-JPEWhacker@gmail.com |
---|---|
State | New |
Headers | show |
Series | Incompatible Licenses in Dynamic Packages | expand |
> -----Original Message----- > From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> On Behalf Of Joshua Watt > Sent: den 23 oktober 2024 23:15 > To: openembedded-core@lists.openembedded.org > Cc: Joshua Watt <JPEWhacker@gmail.com> > Subject: [OE-core][PATCH v2 2/4] lib: license: Move package license skip to library > > Moves the code that skips packages with incompatible licenses to the > library code so that it can be called in other locations > > Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> > --- > meta/classes-global/base.bbclass | 35 ++++------------------------ > meta/lib/oe/license.py | 39 ++++++++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+), 31 deletions(-) > > diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass > index 88b932fc3f0..5b8663f454d 100644 > --- a/meta/classes-global/base.bbclass > +++ b/meta/classes-global/base.bbclass > @@ -573,37 +573,10 @@ python () { > > bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() > > - check_license = False if pn.startswith("nativesdk-") else True > - for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", > - "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", > - "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: > - if pn.endswith(d.expand(t)): > - check_license = False > - if pn.startswith("gcc-source-"): > - check_license = False > - > - if check_license and bad_licenses: > - bad_licenses = oe.license.expand_wildcard_licenses(d, bad_licenses) > - > - exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() > - > - for lic_exception in exceptions: > - if ":" in lic_exception: > - lic_exception = lic_exception.split(":")[1] > - if lic_exception in oe.license.obsolete_license_list(): > - bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) > - > - pkgs = d.getVar('PACKAGES').split() > - skipped_pkgs = {} > - unskipped_pkgs = [] > - for pkg in pkgs: > - remaining_bad_licenses = oe.license.apply_pkg_license_exception(pkg, bad_licenses, exceptions) > - > - incompatible_lic = oe.license.incompatible_license(d, remaining_bad_licenses, pkg) > - if incompatible_lic: > - skipped_pkgs[pkg] = incompatible_lic > - else: > - unskipped_pkgs.append(pkg) > + pkgs = d.getVar('PACKAGES').split() > + if pkgs: > + skipped_pkgs = oe.license.skip_incompatible_package_licenses(d, pkgs) > + unskipped_pkgs = [p for p in pkgs if p not in skipped_pkgs] > > if unskipped_pkgs: > for pkg in skipped_pkgs: > diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py > index 7739697c401..866a876d7f0 100644 > --- a/meta/lib/oe/license.py > +++ b/meta/lib/oe/license.py > @@ -422,3 +422,42 @@ def check_license_format(d): > '%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), d) > + > +def skip_incompatible_package_licenses(d, pkgs): > + if not pkgs: > + return {} > + > + pn = d.getVar("PN") > + bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() > + > + check_license = False if pn.startswith("nativesdk-") else True > + for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", > + "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", > + "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: > + if pn.endswith(d.expand(t)): > + check_license = False > + if pn.startswith("gcc-source-"): > + check_license = False > + > + if not check_license or not bad_licenses: > + return {} For efficiency, it would be better to return early, i.e.: bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() if not bad_licenses: return {} pn = d.getVar("PN") if if pn.startswith("nativesdk-") or pn.startswith("gcc-source-"): return {} for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: if pn.endswith(d.expand(t)): return {} > + > + bad_licenses = expand_wildcard_licenses(d, bad_licenses) > + > + exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() > + > + for lic_exception in exceptions: > + if ":" in lic_exception: > + lic_exception = lic_exception.split(":")[1] > + if lic_exception in obsolete_license_list(): > + bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) > + > + skipped_pkgs = {} > + for pkg in pkgs: > + remaining_bad_licenses = apply_pkg_license_exception(pkg, bad_licenses, exceptions) > + > + incompatible_lic = incompatible_license(d, remaining_bad_licenses, pkg) > + if incompatible_lic: > + skipped_pkgs[pkg] = incompatible_lic > + > + return skipped_pkgs > -- > 2.46.2 //Peter
> -----Original Message----- > From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> On Behalf Of Peter Kjellerstedt > Sent: den 24 oktober 2024 01:39 > To: Joshua Watt <JPEWhacker@gmail.com>; openembedded-core@lists.openembedded.org > Subject: Re: [OE-core][PATCH v2 2/4] lib: license: Move package license > skip to library > > > -----Original Message----- > > From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> On Behalf Of Joshua Watt > > Sent: den 23 oktober 2024 23:15 > > To: openembedded-core@lists.openembedded.org > > Cc: Joshua Watt <JPEWhacker@gmail.com> > > Subject: [OE-core][PATCH v2 2/4] lib: license: Move package license skip to library > > > > Moves the code that skips packages with incompatible licenses to the > > library code so that it can be called in other locations > > > > Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> > > --- > > meta/classes-global/base.bbclass | 35 ++++------------------------ > > meta/lib/oe/license.py | 39 ++++++++++++++++++++++++++++++++ > > 2 files changed, 43 insertions(+), 31 deletions(-) > > > > diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass > > index 88b932fc3f0..5b8663f454d 100644 > > --- a/meta/classes-global/base.bbclass > > +++ b/meta/classes-global/base.bbclass > > @@ -573,37 +573,10 @@ python () { > > > > bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() Missed this in the first review pass: you can move bad_licenses down to where it is being used. > > > > - check_license = False if pn.startswith("nativesdk-") else True > > - for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", > > - "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", > > - "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: > > - if pn.endswith(d.expand(t)): > > - check_license = False > > - if pn.startswith("gcc-source-"): > > - check_license = False > > - > > - if check_license and bad_licenses: > > - bad_licenses = oe.license.expand_wildcard_licenses(d, bad_licenses) > > - > > - exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() > > - > > - for lic_exception in exceptions: > > - if ":" in lic_exception: > > - lic_exception = lic_exception.split(":")[1] > > - if lic_exception in oe.license.obsolete_license_list(): > > - bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) > > - > > - pkgs = d.getVar('PACKAGES').split() > > - skipped_pkgs = {} > > - unskipped_pkgs = [] > > - for pkg in pkgs: > > - remaining_bad_licenses = oe.license.apply_pkg_license_exception(pkg, bad_licenses, exceptions) > > - > > - incompatible_lic = oe.license.incompatible_license(d, remaining_bad_licenses, pkg) > > - if incompatible_lic: > > - skipped_pkgs[pkg] = incompatible_lic > > - else: > > - unskipped_pkgs.append(pkg) > > + pkgs = d.getVar('PACKAGES').split() > > + if pkgs: > > + skipped_pkgs = oe.license.skip_incompatible_package_licenses(d, pkgs) > > + unskipped_pkgs = [p for p in pkgs if p not in skipped_pkgs] > > > > if unskipped_pkgs: > > for pkg in skipped_pkgs: > > diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py > > index 7739697c401..866a876d7f0 100644 > > --- a/meta/lib/oe/license.py > > +++ b/meta/lib/oe/license.py > > @@ -422,3 +422,42 @@ def check_license_format(d): > > '%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), d) > > + > > +def skip_incompatible_package_licenses(d, pkgs): > > + if not pkgs: > > + return {} > > + > > + pn = d.getVar("PN") > > + bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() > > + > > + check_license = False if pn.startswith("nativesdk-") else True > > + for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", > > + "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", > > + "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: > > + if pn.endswith(d.expand(t)): > > + check_license = False > > + if pn.startswith("gcc-source-"): > > + check_license = False > > + > > + if not check_license or not bad_licenses: > > + return {} > > For efficiency, it would be better to return early, i.e.: > > bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() > if not bad_licenses: > return {} > > pn = d.getVar("PN") > if if pn.startswith("nativesdk-") or pn.startswith("gcc-source-"): > return {} > for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", > "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", > "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: > if pn.endswith(d.expand(t)): > return {} > > > + > > + bad_licenses = expand_wildcard_licenses(d, bad_licenses) > > + > > + exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() > > + > > + for lic_exception in exceptions: > > + if ":" in lic_exception: > > + lic_exception = lic_exception.split(":")[1] > > + if lic_exception in obsolete_license_list(): > > + bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) > > + > > + skipped_pkgs = {} > > + for pkg in pkgs: > > + remaining_bad_licenses = apply_pkg_license_exception(pkg, bad_licenses, exceptions) > > + > > + incompatible_lic = incompatible_license(d, remaining_bad_licenses, pkg) > > + if incompatible_lic: > > + skipped_pkgs[pkg] = incompatible_lic > > + > > + return skipped_pkgs > > -- > > 2.46.2 > > //Peter //Peter
diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass index 88b932fc3f0..5b8663f454d 100644 --- a/meta/classes-global/base.bbclass +++ b/meta/classes-global/base.bbclass @@ -573,37 +573,10 @@ python () { bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() - check_license = False if pn.startswith("nativesdk-") else True - for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", - "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", - "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: - if pn.endswith(d.expand(t)): - check_license = False - if pn.startswith("gcc-source-"): - check_license = False - - if check_license and bad_licenses: - bad_licenses = oe.license.expand_wildcard_licenses(d, bad_licenses) - - exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() - - for lic_exception in exceptions: - if ":" in lic_exception: - lic_exception = lic_exception.split(":")[1] - if lic_exception in oe.license.obsolete_license_list(): - bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) - - pkgs = d.getVar('PACKAGES').split() - skipped_pkgs = {} - unskipped_pkgs = [] - for pkg in pkgs: - remaining_bad_licenses = oe.license.apply_pkg_license_exception(pkg, bad_licenses, exceptions) - - incompatible_lic = oe.license.incompatible_license(d, remaining_bad_licenses, pkg) - if incompatible_lic: - skipped_pkgs[pkg] = incompatible_lic - else: - unskipped_pkgs.append(pkg) + pkgs = d.getVar('PACKAGES').split() + if pkgs: + skipped_pkgs = oe.license.skip_incompatible_package_licenses(d, pkgs) + unskipped_pkgs = [p for p in pkgs if p not in skipped_pkgs] if unskipped_pkgs: for pkg in skipped_pkgs: diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py index 7739697c401..866a876d7f0 100644 --- a/meta/lib/oe/license.py +++ b/meta/lib/oe/license.py @@ -422,3 +422,42 @@ def check_license_format(d): '%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), d) + +def skip_incompatible_package_licenses(d, pkgs): + if not pkgs: + return {} + + pn = d.getVar("PN") + bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE') or "").split() + + check_license = False if pn.startswith("nativesdk-") else True + for t in ["-native", "-cross-${TARGET_ARCH}", "-cross-initial-${TARGET_ARCH}", + "-crosssdk-${SDK_SYS}", "-crosssdk-initial-${SDK_SYS}", + "-cross-canadian-${TRANSLATED_TARGET_ARCH}"]: + if pn.endswith(d.expand(t)): + check_license = False + if pn.startswith("gcc-source-"): + check_license = False + + if not check_license or not bad_licenses: + return {} + + bad_licenses = expand_wildcard_licenses(d, bad_licenses) + + exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split() + + for lic_exception in exceptions: + if ":" in lic_exception: + lic_exception = lic_exception.split(":")[1] + if lic_exception in obsolete_license_list(): + bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception) + + skipped_pkgs = {} + for pkg in pkgs: + remaining_bad_licenses = apply_pkg_license_exception(pkg, bad_licenses, exceptions) + + incompatible_lic = incompatible_license(d, remaining_bad_licenses, pkg) + if incompatible_lic: + skipped_pkgs[pkg] = incompatible_lic + + return skipped_pkgs
Moves the code that skips packages with incompatible licenses to the library code so that it can be called in other locations Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> --- meta/classes-global/base.bbclass | 35 ++++------------------------ meta/lib/oe/license.py | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 31 deletions(-)