On Sat, Jun 27, 2026 at 9:49 AM Jan Vermaete via lists.openembedded.org
<[email protected]> wrote:

> Fetch and extract the SPDX exception licenses as the normal licenses are
> handled.
>

Thanks, but we can't actually use the license exceptions this way. The
problem is that exceptions are only valid after an spdx `WITH` statement
(e.g. "GPL-3.0 AND OpenSSL-exception" is not valid), which our license
expressions do not support. Also, it's better to keep the licenses and
exceptions in separate files so that it's easier to distinguish them when
parsing.

Regardless, I have been working on converting all our license expressions
to valid SPDX expressions, but it got sidetracked by some SBoM work. Part
of that was somewhat similar patch to fetch the exceptions. If you would
like to take a look, the branch is contrib/jpew/spdx-licenses. I hope to
get back to working on that as soon as the SBoM stuff is sorted out.


>
> [YOCTO #16294]
>
> Signed-off-by: Jan Vermaete <[email protected]>
> ---
>  scripts/pull-spdx-licenses.py | 22 ++++++++++++----------
>  1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/pull-spdx-licenses.py b/scripts/pull-spdx-licenses.py
> index 597a62133f..de1f5b7bad 100755
> --- a/scripts/pull-spdx-licenses.py
> +++ b/scripts/pull-spdx-licenses.py
> @@ -55,20 +55,22 @@ def main():
>              data = json.load(response)
>              version = data["tag_name"]
>
> -    print(f"Pulling SPDX license list version {version}")
> -    req = urllib.request.Request(
> -        f"
> https://raw.githubusercontent.com/spdx/license-list-data/{version}/json/licenses.json
> "
> -    )
> -    with urllib.request.urlopen(req) as response:
> -        spdx_licenses = json.load(response)
> +    spdx_licenses = {}
> +    for jsonfile in ["licenses.json", "exceptions.json"]:
> +        req = urllib.request.Request(
> +            f"
> https://raw.githubusercontent.com/spdx/license-list-data/{version}/json/{jsonfile}
> "
> +        )
> +        with urllib.request.urlopen(req) as response:
> +            spdx_licenses.update(json.load(response))
> +            print(len(spdx_licenses))
>
>      with (TOP_DIR / "meta" / "files" / "spdx-licenses.json").open("w") as
> f:
>          json.dump(spdx_licenses, f, sort_keys=True, indent=2)
>
> -    total_count = len(spdx_licenses["licenses"])
> +    total_count = len(spdx_licenses["licenses"] +
> spdx_licenses["exceptions"])
>      updated = 0
> -    for idx, lic in enumerate(spdx_licenses["licenses"]):
> -        lic_id = lic["licenseId"]
> +    for idx, lic in enumerate(spdx_licenses["licenses"] +
> spdx_licenses["exceptions"]):
> +        lic_id = lic.get("licenseId") or lic.get("licenseExceptionId")
>
>          print(f"[{idx + 1} of {total_count}] ", end="")
>
> @@ -88,7 +90,7 @@ def main():
>              continue
>
>          with dest_license_file.open("w") as f:
> -            f.write(lic_data["licenseText"])
> +            f.write(lic_data.get("licenseText") or
> lic_data.get("licenseExceptionText"))
>          updated += 1
>          print("done")
>
> --
> 2.47.3
>
>
> 
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#239819): 
https://lists.openembedded.org/g/openembedded-core/message/239819
Mute This Topic: https://lists.openembedded.org/mt/120005594/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to