summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorSaul Wold <Saul.Wold@windriver.com>2021-09-27 10:22:17 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-09-28 17:55:04 +0100
commit6d98af48f43ab16280d55a6f6c97d54cc114359b (patch)
treee0cde6ebec6c7f1c089f0bf86cd692cdac64261a /meta
parent859e6a0d00ff3c8c65cb13f837dbbc45d2676e68 (diff)
downloadpoky-6d98af48f43ab16280d55a6f6c97d54cc114359b.tar.gz
create-spdx: Use SPDXAnnotation to track native recipes
Create a small function that checks for 'isNative' as part of an Annotation When the collect_dep_sources() runs, it collects sources from both native and non-native recipes. Later when the GENERATED_FROM matching occurs it may find the file (via checksum) from the native recipe since it's the same checksum as the target file. The that are generated DocumentRefs point to the native recipe rather than the target recipe DocumentRef. (From OE-Core rev: ba5ec03986a0bce8dccbc381fd34e44b8a135e66) Signed-off-by: Saul Wold <saul.wold@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/create-spdx.bbclass21
1 files changed, 19 insertions, 2 deletions
diff --git a/meta/classes/create-spdx.bbclass b/meta/classes/create-spdx.bbclass
index 3c73c21c04..739b46e9b3 100644
--- a/meta/classes/create-spdx.bbclass
+++ b/meta/classes/create-spdx.bbclass
@@ -13,6 +13,9 @@ SPDXDIR ??= "${WORKDIR}/spdx"
13SPDXDEPLOY = "${SPDXDIR}/deploy" 13SPDXDEPLOY = "${SPDXDIR}/deploy"
14SPDXWORK = "${SPDXDIR}/work" 14SPDXWORK = "${SPDXDIR}/work"
15 15
16SPDX_TOOL_NAME ??= "oe-spdx-creator"
17SPDX_TOOL_VERSION ??= "1.0"
18
16SPDXRUNTIMEDEPLOY = "${SPDXDIR}/runtime-deploy" 19SPDXRUNTIMEDEPLOY = "${SPDXDIR}/runtime-deploy"
17 20
18SPDX_INCLUDE_SOURCES ??= "0" 21SPDX_INCLUDE_SOURCES ??= "0"
@@ -32,6 +35,10 @@ def get_doc_namespace(d, doc):
32 namespace_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, d.getVar("SPDX_UUID_NAMESPACE")) 35 namespace_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, d.getVar("SPDX_UUID_NAMESPACE"))
33 return "%s/%s-%s" % (d.getVar("SPDX_NAMESPACE_PREFIX"), doc.name, str(uuid.uuid5(namespace_uuid, doc.name))) 36 return "%s/%s-%s" % (d.getVar("SPDX_NAMESPACE_PREFIX"), doc.name, str(uuid.uuid5(namespace_uuid, doc.name)))
34 37
38def recipe_spdx_is_native(d, recipe):
39 return any(a.annotationType == "OTHER" and
40 a.annotator == "Tool: %s - %s" % (d.getVar("SPDX_TOOL_NAME"), d.getVar("SPDX_TOOL_VERSION")) and
41 a.comment == "isNative" for a in recipe.annotations)
35 42
36def is_work_shared(d): 43def is_work_shared(d):
37 pn = d.getVar('PN') 44 pn = d.getVar('PN')
@@ -336,6 +343,10 @@ def collect_dep_sources(d, dep_recipes):
336 343
337 sources = {} 344 sources = {}
338 for dep in dep_recipes: 345 for dep in dep_recipes:
346 # Don't collect sources from native recipes as they
347 # match non-native sources also.
348 if recipe_spdx_is_native(d, dep.recipe):
349 continue
339 recipe_files = set(dep.recipe.hasFiles) 350 recipe_files = set(dep.recipe.hasFiles)
340 351
341 for spdx_file in dep.doc.files: 352 for spdx_file in dep.doc.files:
@@ -382,7 +393,6 @@ python do_create_spdx() {
382 include_sources = d.getVar("SPDX_INCLUDE_SOURCES") == "1" 393 include_sources = d.getVar("SPDX_INCLUDE_SOURCES") == "1"
383 archive_sources = d.getVar("SPDX_ARCHIVE_SOURCES") == "1" 394 archive_sources = d.getVar("SPDX_ARCHIVE_SOURCES") == "1"
384 archive_packaged = d.getVar("SPDX_ARCHIVE_PACKAGED") == "1" 395 archive_packaged = d.getVar("SPDX_ARCHIVE_PACKAGED") == "1"
385 is_native = bb.data.inherits_class("native", d)
386 396
387 creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") 397 creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
388 398
@@ -401,6 +411,13 @@ python do_create_spdx() {
401 recipe.name = d.getVar("PN") 411 recipe.name = d.getVar("PN")
402 recipe.versionInfo = d.getVar("PV") 412 recipe.versionInfo = d.getVar("PV")
403 recipe.SPDXID = oe.sbom.get_recipe_spdxid(d) 413 recipe.SPDXID = oe.sbom.get_recipe_spdxid(d)
414 if bb.data.inherits_class("native", d):
415 annotation = oe.spdx.SPDXAnnotation()
416 annotation.annotationDate = creation_time
417 annotation.annotationType = "OTHER"
418 annotation.annotator = "Tool: %s - %s" % (d.getVar("SPDX_TOOL_NAME"), d.getVar("SPDX_TOOL_VERSION"))
419 annotation.comment = "isNative"
420 recipe.annotations.append(annotation)
404 421
405 for s in d.getVar('SRC_URI').split(): 422 for s in d.getVar('SRC_URI').split():
406 if not s.startswith("file://"): 423 if not s.startswith("file://"):
@@ -480,7 +497,7 @@ python do_create_spdx() {
480 sources = collect_dep_sources(d, dep_recipes) 497 sources = collect_dep_sources(d, dep_recipes)
481 found_licenses = {license.name:recipe_ref.externalDocumentId + ":" + license.licenseId for license in doc.hasExtractedLicensingInfos} 498 found_licenses = {license.name:recipe_ref.externalDocumentId + ":" + license.licenseId for license in doc.hasExtractedLicensingInfos}
482 499
483 if not is_native: 500 if not recipe_spdx_is_native(d, recipe):
484 bb.build.exec_func("read_subpackage_metadata", d) 501 bb.build.exec_func("read_subpackage_metadata", d)
485 502
486 pkgdest = Path(d.getVar("PKGDEST")) 503 pkgdest = Path(d.getVar("PKGDEST"))