diff options
Diffstat (limited to 'meta/lib/oe/sbom.py')
-rw-r--r-- | meta/lib/oe/sbom.py | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/meta/lib/oe/sbom.py b/meta/lib/oe/sbom.py index 1130fa668b..fd4b6895d8 100644 --- a/meta/lib/oe/sbom.py +++ b/meta/lib/oe/sbom.py | |||
@@ -38,16 +38,34 @@ def get_sdk_spdxid(sdk): | |||
38 | return "SPDXRef-SDK-%s" % sdk | 38 | return "SPDXRef-SDK-%s" % sdk |
39 | 39 | ||
40 | 40 | ||
41 | def doc_path_by_namespace(spdx_deploy, doc_namespace): | 41 | def _doc_path_by_namespace(spdx_deploy, arch, doc_namespace): |
42 | return spdx_deploy / "by-namespace" / doc_namespace.replace("/", "_") | 42 | return spdx_deploy / "by-namespace" / arch / doc_namespace.replace("/", "_") |
43 | 43 | ||
44 | 44 | ||
45 | def doc_path_by_hashfn(spdx_deploy, doc_name, hashfn): | 45 | def doc_find_by_namespace(spdx_deploy, search_arches, doc_namespace): |
46 | return spdx_deploy / "by-hash" / hashfn.split()[1] / (doc_name + ".spdx.json") | 46 | for pkgarch in search_arches: |
47 | p = _doc_path_by_namespace(spdx_deploy, pkgarch, doc_namespace) | ||
48 | if os.path.exists(p): | ||
49 | return p | ||
50 | return None | ||
51 | |||
52 | |||
53 | def _doc_path_by_hashfn(spdx_deploy, arch, doc_name, hashfn): | ||
54 | return ( | ||
55 | spdx_deploy / "by-hash" / arch / hashfn.split()[1] / (doc_name + ".spdx.json") | ||
56 | ) | ||
57 | |||
58 | |||
59 | def doc_find_by_hashfn(spdx_deploy, search_arches, doc_name, hashfn): | ||
60 | for pkgarch in search_arches: | ||
61 | p = _doc_path_by_hashfn(spdx_deploy, pkgarch, doc_name, hashfn) | ||
62 | if os.path.exists(p): | ||
63 | return p | ||
64 | return None | ||
47 | 65 | ||
48 | 66 | ||
49 | def doc_path(spdx_deploy, doc_name, arch, subdir): | 67 | def doc_path(spdx_deploy, doc_name, arch, subdir): |
50 | return spdx_deploy / arch/ subdir / (doc_name + ".spdx.json") | 68 | return spdx_deploy / arch / subdir / (doc_name + ".spdx.json") |
51 | 69 | ||
52 | 70 | ||
53 | def write_doc(d, spdx_doc, arch, subdir, spdx_deploy=None, indent=None): | 71 | def write_doc(d, spdx_doc, arch, subdir, spdx_deploy=None, indent=None): |
@@ -61,11 +79,13 @@ def write_doc(d, spdx_doc, arch, subdir, spdx_deploy=None, indent=None): | |||
61 | with dest.open("wb") as f: | 79 | with dest.open("wb") as f: |
62 | doc_sha1 = spdx_doc.to_json(f, sort_keys=True, indent=indent) | 80 | doc_sha1 = spdx_doc.to_json(f, sort_keys=True, indent=indent) |
63 | 81 | ||
64 | l = doc_path_by_namespace(spdx_deploy, spdx_doc.documentNamespace) | 82 | l = _doc_path_by_namespace(spdx_deploy, arch, spdx_doc.documentNamespace) |
65 | l.parent.mkdir(exist_ok=True, parents=True) | 83 | l.parent.mkdir(exist_ok=True, parents=True) |
66 | l.symlink_to(os.path.relpath(dest, l.parent)) | 84 | l.symlink_to(os.path.relpath(dest, l.parent)) |
67 | 85 | ||
68 | l = doc_path_by_hashfn(spdx_deploy, spdx_doc.name, d.getVar("BB_HASHFILENAME")) | 86 | l = _doc_path_by_hashfn( |
87 | spdx_deploy, arch, spdx_doc.name, d.getVar("BB_HASHFILENAME") | ||
88 | ) | ||
69 | l.parent.mkdir(exist_ok=True, parents=True) | 89 | l.parent.mkdir(exist_ok=True, parents=True) |
70 | l.symlink_to(os.path.relpath(dest, l.parent)) | 90 | l.symlink_to(os.path.relpath(dest, l.parent)) |
71 | 91 | ||