From: hongxu Date: Wed, 25 Dec 2024 02:48:26 +0000 (-0800) Subject: meta/lib/oe/sbom30.py: fix alias in simplelicensing_customIdToUri not extracted X-Git-Tag: yocto-5.2~832 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f16c2eae5a7e1a483e1d537d8711d83fede75691;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git meta/lib/oe/sbom30.py: fix alias in simplelicensing_customIdToUri not extracted After commit [spdx 3.0: Rework how SPDX aliases are linked] applied, it set license_text_map with SPDX alias other than actual ID The property of simplelicensing_customIdToUri is ListProp(ObjectProp(DictionaryEntry))), and class DictionaryEntry has key and value, the property of value is StringProp other than ObjectProp in which could not support to decode/extract SPDX alias with actual ID in image jsonld file ----------- "simplelicensing_customIdToUri": [ { "type": "DictionaryEntry", "key": "LicenseRef-PD", "value": "http://spdxdocs.org/openembedded-alias/by-doc-hash/d53e90e23b12c4ad640809a74a810e86f31c76cdbdf36487712d22a33d53362a/sqlite3-native/UNIHASH/license-text/PD" } ], ----------- Add special code in the linking to manually go through all of the simplelicensing_customIdToUri DictionaryEntry items and resolve any aliases to actual objects ----------- "simplelicensing_customIdToUri": [ { "type": "DictionaryEntry", "key": "LicenseRef-PD", "value": "http://spdx.org/spdxdocs/sqlite3-native-e5cc0672-d8dd-57e8-a2df-fe4615831fda/162c62b5b011cd3f82f413b3dae4d6d1542201552c964d5ce69fe170e0720b85/license-text/PD" } ] ----------- Suggested-by: Joshua Watt Signed-off-by: Hongxu Jia Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oe/sbom30.py b/meta/lib/oe/sbom30.py index 08fea2aca3b..00044470668 100644 --- a/meta/lib/oe/sbom30.py +++ b/meta/lib/oe/sbom30.py @@ -855,6 +855,18 @@ class ObjectSet(oe.spdx30.SHACLObjectSet): self.doc.import_ = sorted(imports.values(), key=lambda e: e.externalSpdxId) bb.debug(1, "Linking...") self.link() + + # Manually go through all of the simplelicensing_customIdToUri DictionaryEntry + # items and resolve any aliases to actual objects. + for lic in self.foreach_type(oe.spdx30.simplelicensing_LicenseExpression): + for d in lic.simplelicensing_customIdToUri: + if d.value.startswith(OE_ALIAS_PREFIX): + obj = self.find_by_id(d.value) + if obj is not None: + d.value = obj._id + else: + self.missing_ids.add(d.value) + self.missing_ids -= set(imports.keys()) return self.missing_ids