Skip to content

Commit 7e38286

Browse files
authored
[spdx] Replace CMake variables in vcpkg_download_distfile() (#1607)
1 parent b31d6f3 commit 7e38286

File tree

2 files changed

+266
-6
lines changed

2 files changed

+266
-6
lines changed

src/vcpkg-test/spdx.cpp

Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,264 @@ TEST_CASE ("extract arg from cmake invocation args", "[spdx]")
9898
}
9999
}
100100

101+
TEST_CASE ("spdx run resource heuristics", "[spdx]")
102+
{
103+
auto portfile_cmake = R"(
104+
vcpkg_download_distfile(ARCHIVE
105+
URLS "https://vcpkg-download-distfile.dev/${VERSION}.tar.gz"
106+
"https://vcpkg-download-distfile.dev/${VERSION}-other.tar.gz"
107+
FILENAME "distfile-${VERSION}.tar.gz"
108+
SHA512 distfile_test_1
109+
)
110+
vcpkg_from_github(
111+
OUT_SOURCE_PATH SOURCE_PATH
112+
REPO from/github
113+
REF v${VERSION}
114+
SHA512 from_github_test_1
115+
HEAD_REF devel
116+
)
117+
vcpkg_from_gitlab(
118+
OUT_SOURCE_PATH SOURCE_PATH
119+
GITLAB_URL https://from.gitlab.org
120+
REPO from/gitlab
121+
REF "${VERSION}"
122+
SHA512 from_gitlab_test_1
123+
)
124+
vcpkg_from_sourceforge(
125+
OUT_SOURCE_PATH SOURCE_PATH
126+
REPO sourceforge
127+
REF sourceforge
128+
FILENAME "sourceforge-${VERSION}.tar.gz"
129+
SHA512 sourceforge_test_1
130+
)
131+
vcpkg_from_bitbucket(
132+
OUT_SOURCE_PATH SOURCE_PATH
133+
REPO from/bitbucket
134+
REF "v${VERSION}"
135+
SHA512 from_bitbucket_test_1
136+
HEAD_REF master
137+
)
138+
vcpkg_download_distfile(ARCHIVE
139+
URLS "https://vcpkg-download-distfile.dev/${VERSION}.tar.gz"
140+
"https://vcpkg-download-distfile.dev/${VERSION}-other.tar.gz"
141+
FILENAME "distfile-${VERSION}.tar.gz"
142+
SHA512 distfile_test_2
143+
)
144+
vcpkg_from_github(
145+
OUT_SOURCE_PATH SOURCE_PATH
146+
REPO from/github
147+
REF v${VERSION}
148+
SHA512 from_github_test_2
149+
HEAD_REF devel
150+
)
151+
vcpkg_from_gitlab(
152+
OUT_SOURCE_PATH SOURCE_PATH
153+
GITLAB_URL https://from.gitlab.org
154+
REPO from/gitlab
155+
REF "${VERSION}"
156+
SHA512 from_gitlab_test_2
157+
)
158+
vcpkg_from_sourceforge(
159+
OUT_SOURCE_PATH SOURCE_PATH
160+
REPO sourceforge
161+
REF sourceforge
162+
FILENAME "sourceforge-${VERSION}.tar.gz"
163+
SHA512 sourceforge_test_2
164+
)
165+
vcpkg_from_bitbucket(
166+
OUT_SOURCE_PATH SOURCE_PATH
167+
REPO from/bitbucket
168+
REF "v${VERSION}"
169+
SHA512 from_bitbucket_test_2
170+
HEAD_REF master
171+
)
172+
vcpkg_from_git(
173+
OUT_SOURCE_PATH SOURCE_PATH
174+
URL https://from-git-1.dev
175+
REF "${VERSION}"
176+
HEAD_REF main
177+
)
178+
vcpkg_from_git(
179+
OUT_SOURCE_PATH SOURCE_PATH
180+
URL https://from-git-2.dev
181+
REF "${VERSION}"
182+
HEAD_REF main
183+
)
184+
)";
185+
auto expected = Json::parse(R"json(
186+
{
187+
"packages": [
188+
{
189+
"SPDXID": "SPDXRef-resource-0",
190+
"name": "from/github",
191+
"downloadLocation": "git+https://github.com/from/[email protected]",
192+
"licenseConcluded": "NOASSERTION",
193+
"licenseDeclared": "NOASSERTION",
194+
"copyrightText": "NOASSERTION",
195+
"checksums": [
196+
{
197+
"algorithm": "SHA512",
198+
"checksumValue": "from_github_test_1"
199+
}
200+
]
201+
},
202+
{
203+
"SPDXID": "SPDXRef-resource-1",
204+
"name": "from/github",
205+
"downloadLocation": "git+https://github.com/from/[email protected]",
206+
"licenseConcluded": "NOASSERTION",
207+
"licenseDeclared": "NOASSERTION",
208+
"copyrightText": "NOASSERTION",
209+
"checksums": [
210+
{
211+
"algorithm": "SHA512",
212+
"checksumValue": "from_github_test_2"
213+
}
214+
]
215+
},
216+
{
217+
"SPDXID": "SPDXRef-resource-2",
218+
"name": "from/gitlab",
219+
"downloadLocation": "git+https://from.gitlab.org/from/[email protected]",
220+
"licenseConcluded": "NOASSERTION",
221+
"licenseDeclared": "NOASSERTION",
222+
"copyrightText": "NOASSERTION",
223+
"checksums": [
224+
{
225+
"algorithm": "SHA512",
226+
"checksumValue": "from_gitlab_test_1"
227+
}
228+
]
229+
},
230+
{
231+
"SPDXID": "SPDXRef-resource-3",
232+
"name": "from/gitlab",
233+
"downloadLocation": "git+https://from.gitlab.org/from/[email protected]",
234+
"licenseConcluded": "NOASSERTION",
235+
"licenseDeclared": "NOASSERTION",
236+
"copyrightText": "NOASSERTION",
237+
"checksums": [
238+
{
239+
"algorithm": "SHA512",
240+
"checksumValue": "from_gitlab_test_2"
241+
}
242+
]
243+
},
244+
{
245+
"SPDXID": "SPDXRef-resource-4",
246+
"name": "https://from-git-1.dev",
247+
"downloadLocation": "git+https://[email protected]",
248+
"licenseConcluded": "NOASSERTION",
249+
"licenseDeclared": "NOASSERTION",
250+
"copyrightText": "NOASSERTION"
251+
},
252+
{
253+
"SPDXID": "SPDXRef-resource-5",
254+
"name": "https://from-git-2.dev",
255+
"downloadLocation": "git+https://[email protected]",
256+
"licenseConcluded": "NOASSERTION",
257+
"licenseDeclared": "NOASSERTION",
258+
"copyrightText": "NOASSERTION"
259+
},
260+
{
261+
"SPDXID": "SPDXRef-resource-6",
262+
"name": "distfile-3.2.1.tar.gz",
263+
"packageFileName": "distfile-3.2.1.tar.gz",
264+
"downloadLocation": "https://vcpkg-download-distfile.dev/3.2.1.tar.gz",
265+
"licenseConcluded": "NOASSERTION",
266+
"licenseDeclared": "NOASSERTION",
267+
"copyrightText": "NOASSERTION",
268+
"checksums": [
269+
{
270+
"algorithm": "SHA512",
271+
"checksumValue": "distfile_test_1"
272+
}
273+
]
274+
},
275+
{
276+
"SPDXID": "SPDXRef-resource-7",
277+
"name": "distfile-3.2.1.tar.gz",
278+
"packageFileName": "distfile-3.2.1.tar.gz",
279+
"downloadLocation": "https://vcpkg-download-distfile.dev/3.2.1.tar.gz",
280+
"licenseConcluded": "NOASSERTION",
281+
"licenseDeclared": "NOASSERTION",
282+
"copyrightText": "NOASSERTION",
283+
"checksums": [
284+
{
285+
"algorithm": "SHA512",
286+
"checksumValue": "distfile_test_2"
287+
}
288+
]
289+
},
290+
{
291+
"SPDXID": "SPDXRef-resource-8",
292+
"name": "sourceforge-3.2.1.tar.gz",
293+
"packageFileName": "sourceforge-3.2.1.tar.gz",
294+
"downloadLocation": "https://sourceforge.net/projects/sourceforge/files/sourceforge/sourceforge-3.2.1.tar.gz",
295+
"licenseConcluded": "NOASSERTION",
296+
"licenseDeclared": "NOASSERTION",
297+
"copyrightText": "NOASSERTION",
298+
"checksums": [
299+
{
300+
"algorithm": "SHA512",
301+
"checksumValue": "sourceforge_test_1"
302+
}
303+
]
304+
},
305+
{
306+
"SPDXID": "SPDXRef-resource-9",
307+
"name": "sourceforge-3.2.1.tar.gz",
308+
"packageFileName": "sourceforge-3.2.1.tar.gz",
309+
"downloadLocation": "https://sourceforge.net/projects/sourceforge/files/sourceforge/sourceforge-3.2.1.tar.gz",
310+
"licenseConcluded": "NOASSERTION",
311+
"licenseDeclared": "NOASSERTION",
312+
"copyrightText": "NOASSERTION",
313+
"checksums": [
314+
{
315+
"algorithm": "SHA512",
316+
"checksumValue": "sourceforge_test_2"
317+
}
318+
]
319+
},
320+
{
321+
"SPDXID": "SPDXRef-resource-10",
322+
"name": "from/bitbucket",
323+
"downloadLocation": "git+https://bitbucket.com/from/[email protected]",
324+
"licenseConcluded": "NOASSERTION",
325+
"licenseDeclared": "NOASSERTION",
326+
"copyrightText": "NOASSERTION",
327+
"checksums": [
328+
{
329+
"algorithm": "SHA512",
330+
"checksumValue": "from_bitbucket_test_1"
331+
}
332+
]
333+
},
334+
{
335+
"SPDXID": "SPDXRef-resource-11",
336+
"name": "from/bitbucket",
337+
"downloadLocation": "git+https://bitbucket.com/from/[email protected]",
338+
"licenseConcluded": "NOASSERTION",
339+
"licenseDeclared": "NOASSERTION",
340+
"copyrightText": "NOASSERTION",
341+
"checksums": [
342+
{
343+
"algorithm": "SHA512",
344+
"checksumValue": "from_bitbucket_test_2"
345+
}
346+
]
347+
}
348+
]
349+
})json",
350+
"test")
351+
.value(VCPKG_LINE_INFO);
352+
353+
auto generated_spdx = run_resource_heuristics(portfile_cmake, "3.2.1");
354+
auto spdx_str = Json::stringify(generated_spdx);
355+
auto res = Json::parse(spdx_str, "test").value(VCPKG_LINE_INFO);
356+
Test::check_json_eq(expected.value, res.value);
357+
}
358+
101359
TEST_CASE ("spdx maximum serialization", "[spdx]")
102360
{
103361
PackagesDirAssigner packages_dir_assigner{"test_packages_root"};

src/vcpkg/spdx.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ static void find_all_git(StringView text, Json::Array& packages, StringView vers
233233
}
234234
}
235235

236-
static void find_all_distfile(StringView text, Json::Array& packages)
236+
static void find_all_distfile(StringView text, Json::Array& packages, StringView version_text)
237237
{
238238
auto it = text.begin();
239239
while (it != text.end())
@@ -244,11 +244,12 @@ static void find_all_distfile(StringView text, Json::Array& packages)
244244
it = text.end();
245245
continue;
246246
}
247-
auto url = extract_arg_from_cmake_invocation_args(distfile, CMakeVariableUrls);
248-
auto filename = extract_arg_from_cmake_invocation_args(distfile, CMakeVariableFilename);
247+
auto url = fix_ref_version(extract_arg_from_cmake_invocation_args(distfile, CMakeVariableUrls), version_text);
248+
auto filename =
249+
fix_ref_version(extract_arg_from_cmake_invocation_args(distfile, CMakeVariableFilename), version_text);
249250
auto sha = extract_arg_from_cmake_invocation_args(distfile, CMakeVariableSHA512);
250251
packages.push_back(make_resource(
251-
fmt::format("SPDXRef-resource-{}", packages.size()), filename, url.to_string(), sha, filename));
252+
fmt::format("SPDXRef-resource-{}", packages.size()), filename, std::move(url), sha, filename));
252253
it = distfile.end();
253254
}
254255
}
@@ -266,7 +267,8 @@ static void find_all_sourceforge(StringView text, Json::Array& packages, StringV
266267
}
267268
auto repo = extract_arg_from_cmake_invocation_args(sfg, CMakeVariableRepo);
268269
auto ref = fix_ref_version(extract_arg_from_cmake_invocation_args(sfg, CMakeVariableRef), version_text);
269-
auto filename = extract_arg_from_cmake_invocation_args(sfg, CMakeVariableFilename);
270+
auto filename =
271+
fix_ref_version(extract_arg_from_cmake_invocation_args(sfg, CMakeVariableFilename), version_text);
270272
auto sha = extract_arg_from_cmake_invocation_args(sfg, CMakeVariableSHA512);
271273
auto url = fmt::format("https://sourceforge.net/projects/{}/files/{}/{}", repo, ref, filename);
272274
packages.push_back(make_resource(
@@ -285,7 +287,7 @@ Json::Object vcpkg::run_resource_heuristics(StringView contents, StringView vers
285287
find_all_github(contents, packages, version_text);
286288
find_all_gitlab(contents, packages, version_text);
287289
find_all_git(contents, packages, version_text);
288-
find_all_distfile(contents, packages);
290+
find_all_distfile(contents, packages, version_text);
289291
find_all_sourceforge(contents, packages, version_text);
290292
find_all_bitbucket(contents, packages, version_text);
291293

0 commit comments

Comments
 (0)