@@ -117,6 +117,14 @@ SPDX_PACKAGE_VERSION ??= "${PV}"
SPDX_PACKAGE_VERSION[doc] = "The version of a package, software_packageVersion \
in software_Package"
+SPDX_PURL_NAMESPACE ??= "${DISTRO}"
+SPDX_PURL_NAMESPACE[doc] = "The value of the namespace field in software_packageUrl"
+
+SPDX_PURL_QUALIFIERS_EXTEND[doc] = "The project private info in the qualifiers field \
+ of software_packageUrl"
+
+SPDX_PURL_SUBPATH[doc] = "The value of the subpath field in software_packageUrl"
+
IMAGE_CLASSES:append = " create-spdx-image-3.0"
SDK_CLASSES += "create-spdx-sdk-3.0"
@@ -631,6 +631,31 @@ def create_spdx(d):
set_var_field("SUMMARY", spdx_package, "summary", package=package)
set_var_field("DESCRIPTION", spdx_package, "description", package=package)
+ purl_qualifiers = "distro=%s-%s&arch=%s" % (d.getVar("DISTRO"), \
+ d.getVar("DISTRO_VERSION"), \
+ d.getVar("MACHINE"), \
+ )
+ purl_qualifiers_extend = d.getVar("SPDX_PURL_QUALIFIERS_EXTEND")
+ if purl_qualifiers_extend:
+ purl_qualifiers += "&%s" % purl_qualifiers_extend
+
+ purl_type = d.getVar("IMAGE_PKGTYPE")
+ if purl_type == "ipk":
+ purl_type = "generic"
+ purl_qualifiers = "file_extension=ipk&" + purl_qualifiers
+
+ purl_subpath = d.getVar("SPDX_PURL_SUBPATH")
+ purl_subpath = "#" + purl_subpath if purl_subpath else ""
+
+ purl = "pkg:%s/%s/%s@%s?%s%s" % (purl_type, \
+ d.getVar("SPDX_PURL_NAMESPACE"), \
+ pkg_name, \
+ d.getVar("EXTENDPKGV"), \
+ purl_qualifiers, \
+ purl_subpath \
+ )
+ setattr(spdx_package, "software_packageUrl", purl)
+
pkg_objset.new_scoped_relationship(
[oe.sbom30.get_element_link_id(build)],
oe.spdx30.RelationshipType.hasOutput,