10
10
REPO_PATH = ''
11
11
SOURCE_PATH = ''
12
12
13
+ def needs_licenseref (license ):
14
+ #SPDX license list can be found at https://spdx.org/licenses/
15
+ not_in_spdx = ["OASIS-IPR" ]
16
+ if license in not_in_spdx :
17
+ return True
18
+ return False
19
+
13
20
def scan_dir ():
14
21
dependency_path = os .path .join (REPO_PATH , 'source/dependency' )
15
22
path_3rdparty = os .path .join (REPO_PATH , 'source/dependency/3rdparty' )
@@ -20,6 +27,7 @@ def scan_dir():
20
27
total_file_list = []
21
28
dependency_info = {}
22
29
dependency_file_list = {}
30
+ licenseref_info = ""
23
31
with open (manifest_path ) as f :
24
32
manifest = yaml .load (f , Loader = SafeLoader )
25
33
root_license = manifest ['license' ]
@@ -111,7 +119,17 @@ def scan_dir():
111
119
if library_name == root_name :
112
120
continue
113
121
info = dependency_info [library_name ]
114
- package_writer (output , library_name , info ['version' ], info ['repository' ]['url' ], info ['license' ], package_hash (dependency_file_list [library_name ]))
122
+
123
+ #Is this license part of the SPDX license list? If not, then we need to use LicenseRef for proper SPDX validation
124
+ if needs_licenseref (info ['license' ]):
125
+ license = "LicenseRef-" + info ['license' ]
126
+ licenseref_info += "\n LicenseID: LicenseRef-%s\n " % info ['license' ]
127
+ licenseref_info += "LicenseName: %s\n " % info ['license' ]
128
+ licenseref_info += "ExtractedText: <text>%s</text>\n " % info ['license' ]
129
+ else :
130
+ license = info ['license' ]
131
+
132
+ package_writer (output , library_name , info ['version' ], info ['repository' ]['url' ], license , package_hash (dependency_file_list [library_name ]))
115
133
output .write (output_buffer [library_name ].getvalue ())
116
134
117
135
#print relationships
@@ -120,6 +138,10 @@ def scan_dir():
120
138
continue
121
139
output .write ('Relationship: SPDXRef-Package-' + manifest ['name' ] + ' DEPENDS_ON SPDXRef-Package-' + library_name + '\n ' )
122
140
141
+ #print any LicenseRef info
142
+ if licenseref_info != "" :
143
+ output .write (licenseref_info )
144
+
123
145
if __name__ == "__main__" :
124
146
parser = ArgumentParser (description = 'SBOM generator' )
125
147
parser .add_argument ('--repo-root-path' ,
0 commit comments