summaryrefslogtreecommitdiff
path: root/cli/spdxtool/software.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli/spdxtool/software.c')
-rw-r--r--cli/spdxtool/software.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/cli/spdxtool/software.c b/cli/spdxtool/software.c
index 4e9712ba6942..ac76cf73e7de 100644
--- a/cli/spdxtool/software.c
+++ b/cli/spdxtool/software.c
@@ -162,6 +162,37 @@ spdxtool_software_sbom_to_object(pkgconf_client_t *client, spdxtool_software_sbo
free(spdx_id_relation);
}
+ PKGCONF_FOREACH_LIST_ENTRY(sbom->rootElement->requires_private.head, node)
+ {
+ pkgconf_dependency_t *dep = node->data;
+ pkgconf_pkg_t *match = dep->match;
+ pkgconf_buffer_t relationship_buf = PKGCONF_BUFFER_INITIALIZER;
+
+ pkgconf_buffer_append_fmt(&relationship_buf, "%s%cdependsOn%c%s", sbom->rootElement->id, sep, sep, match->id);
+ char *relationship_str = pkgconf_buffer_freeze(&relationship_buf);
+ if (!relationship_str)
+ goto err;
+
+ char *spdx_id_relation = spdxtool_util_get_spdx_id_string(client, "Relationship", relationship_str);
+ free(relationship_str);
+ if (!spdx_id_relation)
+ goto err;
+
+ if (!spdxtool_serialize_array_add_string(element_array, spdx_id_relation))
+ {
+ free(spdx_id_relation);
+ goto err;
+ }
+
+ if (!spdxtool_core_spdx_document_add_element(client, sbom->spdx_document, spdx_id_relation))
+ {
+ free(spdx_id_relation);
+ goto err;
+ }
+
+ free(spdx_id_relation);
+ }
+
char *value = spdxtool_util_tuple_lookup(client, &sbom->rootElement->vars, "hasDeclaredLicense");
if (value)
{
@@ -275,9 +306,11 @@ spdxtool_software_package_to_object(pkgconf_client_t *client, pkgconf_pkg_t *pkg
spdxtool_serialize_value_t *ret = NULL;
spdxtool_serialize_object_list_t *object_list = NULL;
spdxtool_serialize_array_t *originated_by = NULL;
+ spdxtool_serialize_array_t *supplied_by = NULL;
char *creation_info = NULL;
char *spdx_id = NULL;
char *agent = NULL;
+ char *supplier = NULL;
char *spdx_id_license = NULL;
pkgconf_list_t relations = PKGCONF_LIST_INITIALIZER;
pkgconf_list_t *cpy_relations = NULL;
@@ -314,6 +347,21 @@ spdxtool_software_package_to_object(pkgconf_client_t *client, pkgconf_pkg_t *pkg
goto err;
originated_by = NULL;
+ supplier = spdxtool_util_tuple_lookup(client, &pkg->vars, "suppliedBy");
+ if (supplier)
+ {
+ supplied_by = spdxtool_serialize_array_new();
+ if (!supplied_by)
+ goto err;
+
+ if (!spdxtool_serialize_array_add_string(supplied_by, supplier))
+ goto err;
+
+ if (!spdxtool_serialize_object_add_array(object_list, "suppliedBy", supplied_by))
+ goto err;
+ supplied_by = NULL;
+ }
+
if (!serialize_copyright_lines_to_object(object_list, &pkg->copyright))
goto err;
@@ -430,6 +478,56 @@ spdxtool_software_package_to_object(pkgconf_client_t *client, pkgconf_pkg_t *pkg
cpy_relations = NULL;
}
+ PKGCONF_FOREACH_LIST_ENTRY(pkg->requires_private.head, node)
+ {
+ pkgconf_dependency_t *dep = node->data;
+ pkgconf_pkg_t *match = dep->match;
+ pkgconf_buffer_t relationship_buf = PKGCONF_BUFFER_INITIALIZER;
+
+ pkgconf_buffer_append_fmt(&relationship_buf, "%s%cdependsOn%c%s", pkg->id, sep, sep, match->id);
+ char *relationship_str = pkgconf_buffer_freeze(&relationship_buf);
+ if (!relationship_str)
+ goto err;
+
+ char *spdx_id_relation = spdxtool_util_get_spdx_id_string(client, "Relationship", relationship_str);
+ free(relationship_str);
+ if (!spdx_id_relation)
+ goto err;
+
+ char *spdx_id_package = spdxtool_util_get_spdx_id_string(client, "Package", match->id);
+ if (!spdx_id_package)
+ {
+ free(spdx_id_relation);
+ goto err;
+ }
+
+ cpy_relations = calloc(1, sizeof(pkgconf_list_t));
+ if (!cpy_relations)
+ {
+ free(spdx_id_relation);
+ free(spdx_id_package);
+ goto err;
+ }
+
+ pkgconf_license_insert(client, cpy_relations, PKGCONF_LICENSE_UNKNOWN, spdx_id_package);
+ spdxtool_core_relationship_t *relationship = spdxtool_core_relationship_new(client, creation_info, spdx_id_relation, spdx_id, cpy_relations, "dependsOn");
+ free(spdx_id_relation);
+ free(spdx_id_package);
+ if (!relationship)
+ goto err;
+ cpy_relations = NULL;
+ if (!spdxtool_core_relationship_set_scope(client, relationship, "development"))
+ {
+ spdxtool_core_relationship_free(relationship);
+ goto err;
+ }
+ if (!spdxtool_core_spdx_document_add_relationship(client, spdx, relationship))
+ {
+ spdxtool_core_relationship_free(relationship);
+ goto err;
+ }
+ }
+
ret = spdxtool_serialize_value_object(object_list);
object_list = NULL;
@@ -440,8 +538,10 @@ err:
free(creation_info);
free(spdx_id);
free(agent);
+ free(supplier);
free(spdx_id_license);
spdxtool_serialize_object_list_free(object_list);
spdxtool_serialize_array_free(originated_by);
+ spdxtool_serialize_array_free(supplied_by);
return ret;
}