From 917e69ef6819d83e1aef651e2c9b4230dfe31f32 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Thu, 12 Sep 2024 04:34:02 +0000
Subject: [PATCH 01/13] Move vcpkgTools.xml into the tool
---
.../end-to-end-tests-dir/fetch.ps1 | 101 ----
include/vcpkg/tools.h | 1 -
include/vcpkg/tools.test.h | 2 -
src/vcpkg-test/tools.cpp | 75 ---
src/vcpkg.cpp | 2 +-
src/vcpkg/tools.cpp | 484 +++++++++++++++---
src/vcpkg/vcpkgpaths.cpp | 1 -
7 files changed, 416 insertions(+), 250 deletions(-)
delete mode 100644 azure-pipelines/end-to-end-tests-dir/fetch.ps1
diff --git a/azure-pipelines/end-to-end-tests-dir/fetch.ps1 b/azure-pipelines/end-to-end-tests-dir/fetch.ps1
deleted file mode 100644
index 831b70f1cb..0000000000
--- a/azure-pipelines/end-to-end-tests-dir/fetch.ps1
+++ /dev/null
@@ -1,101 +0,0 @@
-. $PSScriptRoot/../end-to-end-tests-prelude.ps1
-
-if (-not $IsMacOS -and -not $IsLinux) {
- "" | Out-File -enc ascii $(Join-Path $TestingRoot .vcpkg-root)
-
- $Scripts = Join-Path $TestingRoot "scripts"
- mkdir $Scripts | Out-Null
-
-@"
-
-
-
- 19.00
- Files\7-Zip\7z.exe
- https://www.7-zip.org/a/7z1900-x64.msi
- 7837a8677a01eed9c3309923f7084bc864063ba214ee169882c5b04a7a8b198ed052c15e981860d9d7952c98f459a4fab87a72fd78e7d0303004dcb86f4324c8
- 7z1900-x64.msi
-
-
- 1.10.2
- ninja.exe
- https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip
- 6004140d92e86afbb17b49c49037ccd0786ce238f340f7d0e62b4b0c29ed0d6ad0bab11feda2094ae849c387d70d63504393714ed0a1f4d3a1f155af7a4f1ba3
- ninja-win-1.10.2.zip
-
-
- 1.10.2
- ninja.exe
- https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip
- 6004140d92e86afbb17b49c49037ccd0786ce238f340f7d0e62b4b0c29ed0d6ad0bab11feda2094ae849c387d70d63504393714ed0a1f4d3a1f155af7a4f1ba3
- ninja-win-1.10.2.zip
-
-
- 3.22.2
- cmake-3.22.2-windows-i386\bin\cmake.exe
- https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-windows-i386.zip
- 969d3d58d56d8fa3cc3acae2b949bf58abab945f70ae292ff20c9060d845dfc094c613c367a924abff47f307cc33af1467cdb9b75bb857868e38b2c7cdc72f79
- cmake-3.22.2-windows-i386.zip
-
-
- 3.22.2
- cmake-3.22.2-macos-universal/CMake.app/Contents/bin/cmake
- https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-macos-universal.tar.gz
- 08104f608ecb9a5cfef38e79f0957d21e425616c0677781445492f82cbfec805113e3b5eb4bc737b707bb26a00678e7bd55e17555a5611c08b0b9b44ac5136ac
- cmake-3.22.2-macos-universal.tar.gz
-
-
- 3.22.2
- cmake-3.22.2-linux-x86_64/bin/cmake
- https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-linux-x86_64.tar.gz
- 579e08b086f6903ef063697fca1dc2692f68a7341dd35998990b772b4221cdb5b1deecfa73bad9d46817ef09e58882b2adff9d64f959c01002c11448a878746b
- cmake-3.22.2linux-x86_64.tar.gz
-
-
- 3.20.4
- usr/local/bin/cmake
- https://pkg.freebsd.org/FreeBSD:13:amd64/quarterly/All/cmake-3.20.4.txz
- 3e5b675d7ff924f92996d912e2365582e687375109ef99c9073fb8196bb329243a406b218cf1358d7cc518988b311ce9e5bf87de4d64f2e6377b7c2bc8894475
- cmake-3.20.4.txz
-
-
-"@ | % { $_ -replace "`r","" } | Out-File -enc ascii $(Join-Path $Scripts "vcpkgTools.xml")
-
- $env:VCPKG_DOWNLOADS = Join-Path $TestingRoot 'down loads'
- Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "7zip", "--vcpkg-root=$TestingRoot"))
- Throw-IfFailed
- Require-FileExists "$TestingRoot/down loads/tools/7zip-19.00-windows/Files/7-Zip/7z.exe"
-
- Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja-testing", "--vcpkg-root=$TestingRoot"))
- Throw-IfFailed
- Require-FileExists "$TestingRoot/down loads/tools/ninja-testing-1.10.2-windows/ninja.exe"
-
- $path = $env:PATH
-
- $env:PATH = "$path;$TestingRoot/down loads/tools/ninja-testing-1.10.2-windows"
- Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
- Throw-IfFailed
- Require-FileNotExists "$TestingRoot/down loads/tools/ninja-1.10.2-windows/ninja.exe"
-
- $env:VCPKG_FORCE_DOWNLOADED_BINARIES = "1"
- Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
- Throw-IfFailed
- Require-FileExists "$TestingRoot/down loads/tools/ninja-1.10.2-windows/ninja.exe"
-
- Remove-Item -Recurse -Force "$TestingRoot/down loads/tools/ninja-1.10.2-windows" -ErrorAction SilentlyContinue
- Remove-Item env:VCPKG_FORCE_DOWNLOADED_BINARIES
-
- $env:VCPKG_FORCE_SYSTEM_BINARIES = "1"
- $env:PATH = "$PSScriptRoot\..\e2e-assets\fetch;$path"
- Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
- Throw-IfFailed
- Require-FileNotExists "$TestingRoot/down loads/tools/ninja-1.10.2-windows/ninja.exe"
-
- Remove-Item env:VCPKG_FORCE_SYSTEM_BINARIES
- $out = Run-VcpkgAndCaptureOutput -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot", "--x-stderr-status"))
- Throw-IfFailed
- & $out --version
- if ($LASTEXITCODE -ne 0) {
- throw 'Couldn''t run resulting ninja'
- }
-}
diff --git a/include/vcpkg/tools.h b/include/vcpkg/tools.h
index 9e0e6b0b6e..5419bab4ff 100644
--- a/include/vcpkg/tools.h
+++ b/include/vcpkg/tools.h
@@ -57,7 +57,6 @@ namespace vcpkg
std::unique_ptr get_tool_cache(const Filesystem& fs,
std::shared_ptr downloader,
Path downloads,
- Path xml_config,
Path tools,
RequireExactVersions abiToolVersionHandling);
}
diff --git a/include/vcpkg/tools.test.h b/include/vcpkg/tools.test.h
index 212d41ba65..62a47eeca1 100644
--- a/include/vcpkg/tools.test.h
+++ b/include/vcpkg/tools.test.h
@@ -29,7 +29,5 @@ namespace vcpkg
Path exe_path(const Path& tools_base_path) const { return tools_base_path / tool_dir_subpath / exe_subpath; }
};
- Optional parse_tool_data_from_xml(StringView XML, StringView XML_PATH, StringView tool, StringView os);
-
Optional> parse_tool_version_string(StringView string_version);
}
diff --git a/src/vcpkg-test/tools.cpp b/src/vcpkg-test/tools.cpp
index cc902cc70c..5eb1077a9d 100644
--- a/src/vcpkg-test/tools.cpp
+++ b/src/vcpkg-test/tools.cpp
@@ -41,81 +41,6 @@ Copyright (C) 2006, 2019 Tatsuhiro Tsujikawa)");
CHECK_FALSE(result.has_value());
}
-TEST_CASE ("parse_tool_data_from_xml", "[tools]")
-{
- const StringView tool_doc = R"(
-
-
-
- 2.7.4
-
-
-
-
-
- 5.11.0
- nuget.exe
- https://dist.nuget.org/win-x86-commandline/v5.11.0/nuget.exe
- 06a337c9404dec392709834ef2cdbdce611e104b510ef40201849595d46d242151749aef65bc2d7ce5ade9ebfda83b64c03ce14c8f35ca9957a17a8c02b8c4b7
-
-
- 16.12.0
- node-v16.12.0-win-x64\node.exe
- https://nodejs.org/dist/v16.12.0/node-v16.12.0-win-x64.7z
- 0bb793fce8140bd59c17f3ac9661b062eac0f611d704117774f5cb2453d717da94b1e8b17d021d47baff598dc023fb7068ed1f8a7678e446260c3db3537fa888
- node-v16.12.0-win-x64.7z
-
-
-)";
-
- {
- auto data = parse_tool_data_from_xml(tool_doc, "vcpkgTools.xml", "tool1", "windows");
- REQUIRE(!data.has_value());
- }
- {
- auto data = parse_tool_data_from_xml(tool_doc, "vcpkgTools.xml", "node", "unknown");
- REQUIRE(!data.has_value());
- }
- {
- auto data = parse_tool_data_from_xml(tool_doc, "vcpkgTools.xml", "node", "windows");
- REQUIRE(data.has_value());
- auto& p = *data.get();
- CHECK(p.is_archive);
- CHECK(p.version == decltype(p.version){16, 12, 0});
- CHECK(p.tool_dir_subpath == "node-16.12.0-windows");
- CHECK(p.exe_subpath == "node-v16.12.0-win-x64\\node.exe");
- CHECK(p.download_subpath == "node-v16.12.0-win-x64.7z");
- CHECK(p.sha512 == "0bb793fce8140bd59c17f3ac9661b062eac0f611d704117774f5cb2453d717da94b1e8b17d021d47baff598dc023"
- "fb7068ed1f8a7678e446260c3db3537fa888");
- CHECK(p.url == "https://nodejs.org/dist/v16.12.0/node-v16.12.0-win-x64.7z");
- }
- {
- auto data = parse_tool_data_from_xml(tool_doc, "vcpkgTools.xml", "nuget", "osx");
- REQUIRE(data.has_value());
- auto& p = *data.get();
- CHECK_FALSE(p.is_archive);
- CHECK(p.version == decltype(p.version){5, 11, 0});
- CHECK(p.tool_dir_subpath == "nuget-5.11.0-osx");
- CHECK(p.exe_subpath == "nuget.exe");
- CHECK(p.download_subpath == "06a337c9-nuget.exe");
- CHECK(p.sha512 == "06a337c9404dec392709834ef2cdbdce611e104b510ef40201849595d46d242151749aef65bc2d7ce5ade9ebfda8"
- "3b64c03ce14c8f35ca9957a17a8c02b8c4b7");
- CHECK(p.url == "https://dist.nuget.org/win-x86-commandline/v5.11.0/nuget.exe");
- }
- {
- auto data = parse_tool_data_from_xml(tool_doc, "vcpkgTools.xml", "git", "linux");
- REQUIRE(data.has_value());
- auto& p = *data.get();
- CHECK_FALSE(p.is_archive);
- CHECK(p.version == decltype(p.version){2, 7, 4});
- CHECK(p.tool_dir_subpath == "git-2.7.4-linux");
- CHECK(p.exe_subpath == "");
- CHECK(p.download_subpath == "");
- CHECK(p.sha512 == "");
- CHECK(p.url == "");
- }
-}
-
TEST_CASE ("extract_prefixed_nonwhitespace", "[tools]")
{
CHECK(extract_prefixed_nonwhitespace("fooutil version ", "fooutil", "fooutil version 1.2", "fooutil.exe")
diff --git a/src/vcpkg.cpp b/src/vcpkg.cpp
index 8b71440aa9..3d2aa53824 100644
--- a/src/vcpkg.cpp
+++ b/src/vcpkg.cpp
@@ -270,7 +270,7 @@ int main(const int argc, const char* const* const argv)
register_console_ctrl_handler();
-#if (defined(__aarch64__) || defined(__arm__) || defined(__s390x__) || defined(__riscv) || \
+#if (defined(__arm__) || defined(__s390x__) || defined(__riscv) || \
((defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) && \
defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \
defined(_M_ARM) || defined(_M_ARM64)) && \
diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp
index a5eecef261..084e5c2b6e 100644
--- a/src/vcpkg/tools.cpp
+++ b/src/vcpkg/tools.cpp
@@ -62,82 +62,442 @@ namespace vcpkg
return std::array{*d1.get(), *d2.get(), *d3.get()};
}
- static Optional parse_tool_data_from_xml(StringView XML, StringView XML_PATH, StringView tool)
+ struct ArchToolData
{
+ StringView tool;
+ StringView os;
+ Optional arch;
+ StringView version;
+ StringView exeRelativePath;
+ StringView url;
+ StringView sha512;
+ StringView archiveName;
+ };
+
+ static Optional get_raw_tool_data(StringView toolname, CPUArchitecture arch, StringView os)
+ {
+ static std::vector tool_data = {
+ {
+ "python3",
+ "windows",
+ nullopt,
+ "3.11.8",
+ "python.exe",
+ "https://www.python.org/ftp/python/3.11.8/python-3.11.8-embed-win32.zip",
+ "c88ef02f0860000dbc59361cfe051e3e8dc7d208ed39bb5bc20a3e8b8711b578926e281a11941787ea61b2ef05b945ab313332"
+ "2dcb85b916f79ac4ada57f6309",
+ "python-3.11.8-embed-win32.zip",
+ },
+ {
+ "python3_with_venv",
+ "windows",
+ nullopt,
+ "3.11.8",
+ "tools/python.exe",
+ "https://www.nuget.org/api/v2/package/python/3.11.8",
+ "8c1abd622fb2795fb87ab5208764fe13f7f4d69f2283b4237ea47b7c14b0989b5b4169f1ac1d3b1f417c6c2cc3d85ce151370d"
+ "ae8efc807c93e57cd67fa3c8cf",
+ "python-3.11.8.nupkg.zip",
+ },
+ {
+ "cmake",
+ "windows",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-windows-i386/bin/cmake.exe",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-windows-i386.zip",
+ "562de7b577c99fe347b00437d14ce375a8e5a60504909cb67d2f73c372d39a2f76d2b42b69e4aeb31a4879e1bcf6f7c2d41f2a"
+ "ce12180ea83ba7af48879d40ab",
+ "cmake-3.29.2-windows-i386.zip",
+ },
+ {
+ "cmake",
+ "osx",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-macos-universal/CMake.app/Contents/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-macos-universal.tar.gz",
+ "26aab0163965f3d560dfd6b1f72c5e77192338237ebe286099fd62f243f1bbd4857b9193118386b801c00dc5cfbc5bc8af8481"
+ "4692fcfadcf56c7d2faab52533",
+ "cmake-3.29.2-macos-universal.tar.gz",
+ },
+ {
+ "cmake",
+ "linux",
+ CPUArchitecture::ARM64,
+ "3.29.2",
+ "cmake-3.29.2-linux-aarch64/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-aarch64.tar.gz",
+ "206b00604caf72f3dc644c7a5ac6a335814520fbf1512b9f2d4a5e8c26025d286bd106d2925ffbc874c754c518cbdb07f16919"
+ "16c39fcfd1202a47f592c8e3b0",
+ "cmake-3.29.2-linux-aarch64.tar.gz",
+ },
+ {
+ "cmake",
+ "linux",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-linux-x86_64/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.tar.gz",
+ "d88082d582f1774a3d89efbf3f31a03b08a663c359d603d87ee7c4afd862d4164d2b0b9f0b32cece8efee3acfa86b44214cd4f"
+ "7606b99b8334183a05d5f06edc",
+ "cmake-3.29.2-linux-x86_64.tar.gz",
+ },
+ {
+ "git",
+ "windows",
+ nullopt,
+ "2.7.4",
+ "mingw64/bin/git.exe",
+ "https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/"
+ "PortableGit-2.43.0-64-bit.7z.exe",
+ "02ec40f55a6de18f305530e9415b6ce0a597359ebb9a58cf727ac84eceb0003b0f437941b76872b6568157a333c8e6e8d865a3"
+ "6faf874fd5f04774deb6a9387a",
+ "PortableGit-2.43.0-32-bit.7z.exe",
+ },
+ {
+ "git",
+ "linux",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ },
+ {
+ "git",
+ "osx",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ },
+ {
+ "git",
+ "freebsd",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ },
+ {
+ "gsutil",
+ "windows",
+ nullopt,
+ "4.65",
+ "google-cloud-sdk/bin/gsutil.cmd",
+ "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/"
+ "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
+ "e2792e17b132aad77f7c0b9fd26faf415e9437923d9227a9e6d253554e6843d29a6ddad0a7fb5e9aea4a130fd4c521e6ece884"
+ "4fd4a4f9e8d580348775425389",
+ "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
+ },
+ {
+ "gsutil",
+ "osx",
+ nullopt,
+ "4.65",
+ "gsutil/gsutil",
+ "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
+ "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
+ "1bc83d112339d8e6096a2f21c8",
+ "gsutil_4.65.tar.gz",
+ },
+ {
+ "gsutil",
+ "linux",
+ nullopt,
+ "4.65",
+ "gsutil/gsutil",
+ "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
+ "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
+ "1bc83d112339d8e6096a2f21c8",
+ "gsutil_4.65.tar.gz",
+ },
+ {
+ "vswhere",
+ "windows",
+ nullopt,
+ "3.1.7",
+ "vswhere.exe",
+ "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe",
+ "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad"
+ "054e82d8c2603964975fc12076",
+ },
+ {
+ "nuget",
+ "windows",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ },
+ {
+ "nuget",
+ "linux",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ },
+ {
+ "nuget",
+ "osx",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ },
+ {
+ "coscli",
+ "windows",
+ nullopt,
+ "0.11.0",
+ "coscli-windows.exe",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-windows.exe",
+ "38a521ec80cdb6944124f4233d7e71eed8cc9f9be2c0c736269915d21c3718ea8131e4516bb6eeada6df331f5fa8f47a299907"
+ "e50ee9edbe0114444520974d06",
+ },
+ {
+ "coscli",
+ "linux",
+ nullopt,
+ "0.11.0",
+ "coscli-linux",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-linux",
+ "9c930a1d308e9581a0e2fdfe3751ea7fe13d6068df90ca6465740ec3eda034202ef71ec54c99e90015ff81aa68aa1489567db5"
+ "e411e222eb7258704bdac7e924",
+ },
+ {
+ "coscli",
+ "osx",
+ nullopt,
+ "0.11.0",
+ "coscli-mac",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-mac",
+ "9556335bfc8bc14bace6dfced45fa77fb07c80f08aa975e047a54efda1d19852aae0ea68a5bc7f04fbd88e3edce5a73512a612"
+ "16b1c5ff4cade224de4a9ab8db",
+ },
+ {
+ "installerbase",
+ "windows",
+ nullopt,
+ "4.4.0",
+ "QtInstallerFramework-win-x86/bin/installerbase.exe",
+ "https://download.qt.io/official_releases/qt-installer-framework/4.4.0/"
+ "installer-framework-opensource-src-4.4.0.zip",
+ "fc713f54bfe2781cb232cd0ae8eddb96833ec178d53a55ec0b01886aa048b13441eb49a1f33282e8eab7259cfe512c890d50b8"
+ "e632d3dbf501a0bf1fd83de947",
+ "installer-framework-opensource-src-4.4.0.zip",
+ },
+ {
+ "7zip_msi",
+ "windows",
+ nullopt,
+ "24.08",
+ "Files/7-Zip/7z.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-x64.msi",
+ "3259bf5e251382333c9d18a3fc01d83491fb41bc4ac4ddb25a02918494594c1074482b6608189a8a89e343d78e34d57420cdef"
+ "f1d7ace5acfdcaacc8776f1be8",
+ "7z2408-x64.msi",
+ },
+ {
+ "7zip",
+ "windows",
+ nullopt,
+ "24.08",
+ "7za.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-extra.7z",
+ "35f55236fccfb576ca014e29d0c35f4a213e53f06683bd2e82f869ed02506e230c8dd623c01d0207244d6a997031f737903456"
+ "b7ad4a44db1717f0a17a78602e",
+ "7z2408-extra.7z",
+ },
+ {
+ "7zr",
+ "windows",
+ nullopt,
+ "24.08",
+ "7zr.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7zr.exe",
+ "424196f2acf5b89807f4038683acc50e7604223fc630245af6bab0e0df923f8b1c49cb09ac709086568c214c3f53dcb7d6c32e"
+ "8a54af222a3ff78cfab9c51670",
+ },
+ {
+ "aria2",
+ "windows",
+ nullopt,
+ "1.37.0",
+ "aria2-1.37.0-win-64bit-build1/aria2c.exe",
+ "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip",
+ "6d78405da9cf5639dbe8174787002161b8124d73880fb57cc8c0a3a63982f84e46df4e626990c58f23452965ad925f0d37cb91"
+ "47e99b25c3d7ca0ea49602f34d",
+ "aria2-1.37.0-win-64bit-build1.zip",
+ },
+ {
+ "aria2",
+ "osx",
+ nullopt,
+ "1.35.0",
+ "aria2-1.35.0/bin/aria2c",
+ "https://github.com/aria2/aria2/releases/download/release-1.35.0/aria2-1.35.0-osx-darwin.tar.bz2",
+ "3bb32b7d55347d1af37c6f4ebf0e20b38ce51c37a1baf92f7ad1762000539a03413dd679a6d902fdb1805fa71917300c9692ac"
+ "eee012eb06ecdff10491137aec",
+ "aria2-1.35.0-osx-darwin.tar.bz2",
+ },
+ {
+ "ninja",
+ "windows",
+ nullopt,
+ "1.11.1",
+ "ninja.exe",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip",
+ "a700e794c32eb67b9f87040db7f1ba3a8e891636696fc54d416b01661c2421ff46fa517c97fd904adacdf8e621df3e68ea3801"
+ "05b909ae8b6651a78ae7eb3199",
+ "ninja-win-1.11.1.zip",
+ },
+ {
+ "ninja",
+ "linux",
+ nullopt,
+ "1.11.1",
+ "ninja",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip",
+ "6403dac9196baffcff614fa73ea530752997c8db6bbfbaa0446b4b09d7327e2aa6e8615d1283c961d3bf0df497e85ba8660414"
+ "9f1505ee75f89d600245a45dde",
+ "ninja-linux-1.11.1.zip",
+ },
+ {
+ "ninja",
+ "osx",
+ nullopt,
+ "1.11.1",
+ "ninja",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-mac.zip",
+ "dad33b0918c60bbf5107951a936175b1610b4894a408f4ba4b47a2f5b328fc982a52a2aed6a0cb75028ee4765af5083bea6661"
+ "1c37516826eb0c851366bb4427",
+ "ninja-mac-1.11.1.zip",
+ },
+ {
+ "powershell-core",
+ "windows",
+ nullopt,
+ "7.2.23",
+ "pwsh.exe",
+ "https://github.com/PowerShell/PowerShell/releases/download/v7.2.23/PowerShell-7.2.23-win-x64.zip",
+ "b374a878df02980d54e17ad7cfc9021e331748c3770f586be61356c257494d1b33899c1167d09a35c210bc084474aefdff972f"
+ "672d16afb43be0562b3589285a",
+ "PowerShell-7.2.23-win-x64.zip",
+ },
+ {
+ "node",
+ "windows",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-win-x64/node.exe",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-win-x64.7z",
+ "7ec4bfe2ea6034e1461e306b6372d62c0c5d1060c453ba76a73a5cec38ac26b5952a744caa9071455329caa58eb0a96d26c688"
+ "54c8915c17610ff27b0cf2c1cf",
+ "node-v16.15.1-win-x64.7z",
+ },
+ {
+ "node",
+ "linux",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-linux-x64/bin/node",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz",
+ "5ad3b4b9caeaa8d31503efa99f5a593118a267dec9d4181d019732126ba248ce9a901207115b3f6b899eb5b3f0373c7f77ea95"
+ "cc92ac625cddf437ee9b8b8919",
+ "node-v16.15.1-linux-x64.tar.gz",
+ },
+ {
+ "node",
+ "osx",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-darwin-x64/bin/node",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-darwin-x64.tar.gz",
+ "90d0612bbe5467b6cf385c91a68b8daad0057e3e0ccacea44567f5b95b14f7481cb79784185ab1463b4bd990e092ff0f910957"
+ "6d1a1934b84e1c816582929611",
+ "node-v16.15.1-darwin-x64.tar.gz",
+ }};
+
+ int default_tool = -1;
+ for (std::size_t i = 0; i < tool_data.size(); i++)
+ {
+ ArchToolData& d = tool_data[i];
+ if (d.tool == toolname && d.arch.has_value() && d.arch.value_or_exit(VCPKG_LINE_INFO) == arch && d.os == os)
+ {
+ return d;
+ }
+ else if (d.tool == toolname && d.os == os && !d.arch.has_value())
+ {
+ default_tool = i;
+ }
+ }
+ if (default_tool >= 0)
+ {
+ return tool_data[default_tool];
+ }
+
+ return nullopt;
+ }
+
+ static Optional get_tool_data(StringView tool)
+ {
+ auto hp = get_host_processor();
#if defined(_WIN32)
- return parse_tool_data_from_xml(XML, XML_PATH, tool, "windows");
+ auto data = get_raw_tool_data(tool, hp, "windows");
#elif defined(__APPLE__)
- return parse_tool_data_from_xml(XML, XML_PATH, tool, "osx");
+ auto data = get_raw_tool_data(tool, hp, "osx");
#elif defined(__linux__)
- return parse_tool_data_from_xml(XML, XML_PATH, tool, "linux");
+ auto data = get_raw_tool_data(tool, hp, "linux");
#elif defined(__FreeBSD__)
- return parse_tool_data_from_xml(XML, XML_PATH, tool, "freebsd");
+ auto data = get_raw_tool_data(tool, hp, "freebsd");
#elif defined(__OpenBSD__)
- return parse_tool_data_from_xml(XML, XML_PATH, tool, "openbsd");
+ auto data = get_raw_tool_data(tool, hp, "openbsd");
#else
return nullopt;
#endif
- }
-
- Optional parse_tool_data_from_xml(StringView XML, StringView XML_PATH, StringView tool, StringView os)
- {
- static const char* XML_VERSION = "2";
- static const std::regex XML_VERSION_REGEX{R"###()###"};
- std::cmatch match_xml_version;
- const bool has_xml_version = std::regex_search(XML.begin(), XML.end(), match_xml_version, XML_VERSION_REGEX);
- Checks::msg_check_exit(VCPKG_LINE_INFO,
- has_xml_version,
- msgCouldNotFindToolVersion,
- msg::version = XML_VERSION,
- msg::path = XML_PATH);
- Checks::msg_check_exit(VCPKG_LINE_INFO,
- XML_VERSION == match_xml_version[1],
- msgVersionConflictXML,
- msg::path = XML_PATH,
- msg::expected_version = XML_VERSION,
- msg::actual_version = match_xml_version[1].str());
-
- const std::regex tool_regex{fmt::format(R"###()###", tool, os)};
- std::cmatch match_tool_entry;
- const bool has_tool_entry = std::regex_search(XML.begin(), XML.end(), match_tool_entry, tool_regex);
- if (!has_tool_entry) return nullopt;
-
- const std::string tool_data =
- Strings::find_exactly_one_enclosed(XML, match_tool_entry[0].str(), "").to_string();
- const std::string version_as_string =
- Strings::find_exactly_one_enclosed(tool_data, "", "").to_string();
- const std::string exe_relative_path =
- Strings::find_exactly_one_enclosed(tool_data, "", "").to_string();
- const std::string url = Strings::find_exactly_one_enclosed(tool_data, "", "").to_string();
- const std::string sha512 = Strings::find_exactly_one_enclosed(tool_data, "", "").to_string();
- auto archive_name = Strings::find_at_most_one_enclosed(tool_data, "", "");
-
- const Optional> version = parse_tool_version_string(version_as_string);
+ if (!data.has_value())
+ {
+ return nullopt;
+ }
+ auto& d = data.value_or_exit(VCPKG_LINE_INFO);
+ const Optional> version = parse_tool_version_string(d.version);
Checks::msg_check_exit(VCPKG_LINE_INFO,
version.has_value(),
msgFailedToParseVersionXML,
msg::tool_name = tool,
- msg::version = version_as_string);
+ msg::version = d.version);
- Path tool_dir_name = fmt::format("{}-{}-{}", tool, version_as_string, os);
+ Path tool_dir_name = fmt::format("{}-{}-{}", tool, d.version, d.os);
Path download_subpath;
- if (auto a = archive_name.get())
+ if (!d.archiveName.empty())
{
- download_subpath = a->to_string();
+ download_subpath = d.archiveName;
}
- else if (!exe_relative_path.empty())
+ else if (!d.exeRelativePath.empty())
{
- download_subpath = Strings::concat(sha512.substr(0, 8), '-', exe_relative_path);
+ download_subpath = Strings::concat(d.sha512.substr(0, 8), '-', d.exeRelativePath);
}
return ToolData{tool.to_string(),
*version.get(),
- exe_relative_path,
- url,
+ d.exeRelativePath,
+ std::string(d.url),
download_subpath,
- archive_name.has_value(),
+ !d.archiveName.empty(),
tool_dir_name,
- sha512};
+ std::string(d.sha512)};
}
struct PathAndVersion
@@ -608,23 +968,19 @@ namespace vcpkg
const Filesystem& fs;
const std::shared_ptr downloader;
const Path downloads;
- const Path xml_config;
const Path tools;
const RequireExactVersions abiToolVersionHandling;
- vcpkg::Lazy xml_config_contents;
vcpkg::Cache path_version_cache;
ToolCacheImpl(const Filesystem& fs,
const std::shared_ptr& downloader,
Path downloads,
- Path xml_config,
Path tools,
RequireExactVersions abiToolVersionHandling)
: fs(fs)
, downloader(downloader)
, downloads(std::move(downloads))
- , xml_config(std::move(xml_config))
, tools(std::move(tools))
, abiToolVersionHandling(abiToolVersionHandling)
{
@@ -718,12 +1074,6 @@ namespace vcpkg
return exe_path;
}
- const std::string& get_config_contents() const
- {
- return xml_config_contents.get_lazy(
- [this]() { return this->fs.read_contents(this->xml_config, VCPKG_LINE_INFO); });
- }
-
virtual const Path& get_tool_path(StringView tool, MessageSink& status_sink) const override
{
return get_tool_pathversion(tool, status_sink).p;
@@ -735,9 +1085,7 @@ namespace vcpkg
get_environment_variable(EnvironmentVariableVcpkgForceSystemBinaries).has_value();
const bool env_force_download_binaries =
get_environment_variable(EnvironmentVariableVcpkgForceDownloadedBinaries).has_value();
- const auto maybe_tool_data =
- parse_tool_data_from_xml(get_config_contents(), xml_config, tool.tool_data_name());
-
+ const auto maybe_tool_data = get_tool_data(tool.tool_data_name());
const bool download_available = maybe_tool_data.has_value() && !maybe_tool_data.get()->url.empty();
// search for system searchable tools unless forcing downloads and download available
const auto system_exe_stems = tool.system_exe_stems();
@@ -755,7 +1103,7 @@ namespace vcpkg
if (auto tool_data = maybe_tool_data.get())
{
- // If there is an entry for the tool in vcpkgTools.xml, use that version as the minimum
+ // If there is an entry for the tool in tools.cpp, use that version as the minimum
min_version = tool_data->version;
if (consider_downloads)
@@ -967,11 +1315,9 @@ namespace vcpkg
std::unique_ptr get_tool_cache(const Filesystem& fs,
std::shared_ptr downloader,
Path downloads,
- Path xml_config,
Path tools,
RequireExactVersions abiToolVersionHandling)
{
- return std::make_unique(
- fs, std::move(downloader), downloads, xml_config, tools, abiToolVersionHandling);
+ return std::make_unique(fs, std::move(downloader), downloads, tools, abiToolVersionHandling);
}
}
diff --git a/src/vcpkg/vcpkgpaths.cpp b/src/vcpkg/vcpkgpaths.cpp
index 77e107f5ce..8b7cdf893d 100644
--- a/src/vcpkg/vcpkgpaths.cpp
+++ b/src/vcpkg/vcpkgpaths.cpp
@@ -561,7 +561,6 @@ namespace vcpkg
, m_tool_cache(get_tool_cache(fs,
m_download_manager,
downloads,
- scripts / "vcpkgTools.xml",
tools,
args.exact_abi_tools_versions.value_or(false) ? RequireExactVersions::YES
: RequireExactVersions::NO))
From 23c303e90ab6a9eba0ba2b63c6ed7966ba60974f Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Mon, 16 Sep 2024 19:24:13 +0000
Subject: [PATCH 02/13] fix
---
src/vcpkg/tools.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp
index 084e5c2b6e..c8d540b8fe 100644
--- a/src/vcpkg/tools.cpp
+++ b/src/vcpkg/tools.cpp
@@ -430,7 +430,8 @@ namespace vcpkg
"node-v16.15.1-darwin-x64.tar.gz",
}};
- int default_tool = -1;
+ size_t default_tool = 0;
+ bool existsDefaultTool = false;
for (std::size_t i = 0; i < tool_data.size(); i++)
{
ArchToolData& d = tool_data[i];
@@ -441,9 +442,10 @@ namespace vcpkg
else if (d.tool == toolname && d.os == os && !d.arch.has_value())
{
default_tool = i;
+ existsDefaultTool = true;
}
}
- if (default_tool >= 0)
+ if (existsDefaultTool)
{
return tool_data[default_tool];
}
From e86a63b3009bff94a31822ba807a9c09ac12ec79 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Mon, 16 Sep 2024 19:48:50 +0000
Subject: [PATCH 03/13] update
---
include/vcpkg/base/message-data.inc.h | 9 ---------
locales/messages.json | 4 ----
2 files changed, 13 deletions(-)
diff --git a/include/vcpkg/base/message-data.inc.h b/include/vcpkg/base/message-data.inc.h
index 94da29347b..67ae4b51b2 100644
--- a/include/vcpkg/base/message-data.inc.h
+++ b/include/vcpkg/base/message-data.inc.h
@@ -911,10 +911,6 @@ DECLARE_MESSAGE(CouldNotFindGitTreeAtCommit,
(msg::package_name, msg::commit_sha),
"",
"could not find the git tree for `versions` in repo {package_name} at commit {commit_sha}")
-DECLARE_MESSAGE(CouldNotFindToolVersion,
- (msg::version, msg::path),
- "",
- "Could not find in {path}")
DECLARE_MESSAGE(CouldNotFindVersionDatabaseFile, (msg::path), "", "Couldn't find the versions database file: {path}")
DECLARE_MESSAGE(CreatedNuGetPackage, (msg::path), "", "Created nupkg: {path}")
DECLARE_MESSAGE(CreateFailureLogsDir, (msg::path), "", "Creating failure logs output directory {path}.")
@@ -2952,11 +2948,6 @@ DECLARE_MESSAGE(VersionCommandHeader,
(msg::version),
"",
"vcpkg package management program version {version}\n\nSee LICENSE.txt for license information.")
-DECLARE_MESSAGE(
- VersionConflictXML,
- (msg::path, msg::expected_version, msg::actual_version),
- "",
- "Expected {path} version: [{expected_version}], but was [{actual_version}]. Please re-run bootstrap-vcpkg.")
DECLARE_MESSAGE(VersionConstraintNotInDatabase1,
(msg::package_name, msg::version),
"",
diff --git a/locales/messages.json b/locales/messages.json
index 3ce795ad03..a5d5b953e7 100644
--- a/locales/messages.json
+++ b/locales/messages.json
@@ -527,8 +527,6 @@
"_CouldNotFindBaselineInCommit.comment": "An example of {url} is https://github.com/microsoft/vcpkg. An example of {commit_sha} is 7cfad47ae9f68b183983090afd6337cd60fd4949. An example of {package_name} is zlib.",
"CouldNotFindGitTreeAtCommit": "could not find the git tree for `versions` in repo {package_name} at commit {commit_sha}",
"_CouldNotFindGitTreeAtCommit.comment": "An example of {package_name} is zlib. An example of {commit_sha} is 7cfad47ae9f68b183983090afd6337cd60fd4949.",
- "CouldNotFindToolVersion": "Could not find in {path}",
- "_CouldNotFindToolVersion.comment": "An example of {version} is 1.3.8. An example of {path} is /foo/bar.",
"CouldNotFindVersionDatabaseFile": "Couldn't find the versions database file: {path}",
"_CouldNotFindVersionDatabaseFile.comment": "An example of {path} is /foo/bar.",
"CreateFailureLogsDir": "Creating failure logs output directory {path}.",
@@ -1574,8 +1572,6 @@
"_VersionBuiltinPortTreeEntryMissing.comment": "{expected} and {actual} are versions like 1.0. An example of {package_name} is zlib.",
"VersionCommandHeader": "vcpkg package management program version {version}\n\nSee LICENSE.txt for license information.",
"_VersionCommandHeader.comment": "An example of {version} is 1.3.8.",
- "VersionConflictXML": "Expected {path} version: [{expected_version}], but was [{actual_version}]. Please re-run bootstrap-vcpkg.",
- "_VersionConflictXML.comment": "An example of {path} is /foo/bar. An example of {expected_version} is 1.3.8. An example of {actual_version} is 1.3.8.",
"VersionConstraintNotInDatabase1": "the \"version>=\" constraint to {package_name} names version {version} which does not exist in the version database. All versions must exist in the version database to be interpreted by vcpkg.",
"_VersionConstraintNotInDatabase1.comment": "An example of {package_name} is zlib. An example of {version} is 1.3.8.",
"VersionConstraintNotInDatabase2": "consider removing the version constraint or choosing a value declared here",
From 65511afe6238f035eefdc9d7e7b6d15504282373 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Mon, 16 Sep 2024 19:58:58 +0000
Subject: [PATCH 04/13] format
---
src/vcpkg.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/vcpkg.cpp b/src/vcpkg.cpp
index 3d2aa53824..1b6b7c22ea 100644
--- a/src/vcpkg.cpp
+++ b/src/vcpkg.cpp
@@ -270,7 +270,7 @@ int main(const int argc, const char* const* const argv)
register_console_ctrl_handler();
-#if (defined(__arm__) || defined(__s390x__) || defined(__riscv) || \
+#if (defined(__arm__) || defined(__s390x__) || defined(__riscv) || \
((defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) && \
defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \
defined(_M_ARM) || defined(_M_ARM64)) && \
From e6ce6bb17a2e523a0b796fabdcc28a191e6c9db9 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Tue, 17 Sep 2024 22:28:30 +0000
Subject: [PATCH 05/13] reviews
---
src/vcpkg/tools.cpp | 36 ++++++++++++++++++++++++------------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp
index c8d540b8fe..cb39740459 100644
--- a/src/vcpkg/tools.cpp
+++ b/src/vcpkg/tools.cpp
@@ -64,19 +64,20 @@ namespace vcpkg
struct ArchToolData
{
- StringView tool;
- StringView os;
+ StringLiteral tool;
+ StringLiteral os;
Optional arch;
- StringView version;
- StringView exeRelativePath;
- StringView url;
- StringView sha512;
- StringView archiveName;
+ StringLiteral version;
+ StringLiteral exeRelativePath;
+ StringLiteral url;
+ StringLiteral sha512;
+ StringLiteral archiveName;
};
- static Optional get_raw_tool_data(StringView toolname, CPUArchitecture arch, StringView os)
+ static Optional get_raw_tool_data(StringView toolname, CPUArchitecture arch, StringView os)
{
- static std::vector tool_data = {
+ const std::size_t NUM_TOOLS = 33;
+ ArchToolData tool_data[NUM_TOOLS] = {
{
"python3",
"windows",
@@ -163,6 +164,7 @@ namespace vcpkg
"",
"",
"",
+ "",
},
{
"git",
@@ -172,6 +174,7 @@ namespace vcpkg
"",
"",
"",
+ "",
},
{
"git",
@@ -181,6 +184,7 @@ namespace vcpkg
"",
"",
"",
+ "",
},
{
"gsutil",
@@ -225,6 +229,7 @@ namespace vcpkg
"https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe",
"40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad"
"054e82d8c2603964975fc12076",
+ "",
},
{
"nuget",
@@ -235,6 +240,7 @@ namespace vcpkg
"https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
"71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
"9e97139cdc86dde16a5ec3e7cf",
+ "",
},
{
"nuget",
@@ -245,6 +251,7 @@ namespace vcpkg
"https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
"71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
"9e97139cdc86dde16a5ec3e7cf",
+ "",
},
{
"nuget",
@@ -255,6 +262,7 @@ namespace vcpkg
"https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
"71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
"9e97139cdc86dde16a5ec3e7cf",
+ "",
},
{
"coscli",
@@ -265,6 +273,7 @@ namespace vcpkg
"https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-windows.exe",
"38a521ec80cdb6944124f4233d7e71eed8cc9f9be2c0c736269915d21c3718ea8131e4516bb6eeada6df331f5fa8f47a299907"
"e50ee9edbe0114444520974d06",
+ "",
},
{
"coscli",
@@ -275,6 +284,7 @@ namespace vcpkg
"https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-linux",
"9c930a1d308e9581a0e2fdfe3751ea7fe13d6068df90ca6465740ec3eda034202ef71ec54c99e90015ff81aa68aa1489567db5"
"e411e222eb7258704bdac7e924",
+ "",
},
{
"coscli",
@@ -285,6 +295,7 @@ namespace vcpkg
"https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-mac",
"9556335bfc8bc14bace6dfced45fa77fb07c80f08aa975e047a54efda1d19852aae0ea68a5bc7f04fbd88e3edce5a73512a612"
"16b1c5ff4cade224de4a9ab8db",
+ "",
},
{
"installerbase",
@@ -329,6 +340,7 @@ namespace vcpkg
"https://github.com/ip7z/7zip/releases/download/24.08/7zr.exe",
"424196f2acf5b89807f4038683acc50e7604223fc630245af6bab0e0df923f8b1c49cb09ac709086568c214c3f53dcb7d6c32e"
"8a54af222a3ff78cfab9c51670",
+ "",
},
{
"aria2",
@@ -432,9 +444,9 @@ namespace vcpkg
size_t default_tool = 0;
bool existsDefaultTool = false;
- for (std::size_t i = 0; i < tool_data.size(); i++)
+ for (std::size_t i = 0; i < NUM_TOOLS; i++)
{
- ArchToolData& d = tool_data[i];
+ const ArchToolData& d = tool_data[i];
if (d.tool == toolname && d.arch.has_value() && d.arch.value_or_exit(VCPKG_LINE_INFO) == arch && d.os == os)
{
return d;
@@ -489,7 +501,7 @@ namespace vcpkg
}
else if (!d.exeRelativePath.empty())
{
- download_subpath = Strings::concat(d.sha512.substr(0, 8), '-', d.exeRelativePath);
+ download_subpath = Strings::concat(StringView{d.sha512}.substr(0, 8), '-', d.exeRelativePath);
}
return ToolData{tool.to_string(),
From db4bf0322904e8abf52ecf8e164a1f3bb7a35751 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Tue, 17 Sep 2024 22:34:37 +0000
Subject: [PATCH 06/13] fix
---
src/vcpkg/tools.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp
index cb39740459..81cada54e3 100644
--- a/src/vcpkg/tools.cpp
+++ b/src/vcpkg/tools.cpp
@@ -446,6 +446,9 @@ namespace vcpkg
bool existsDefaultTool = false;
for (std::size_t i = 0; i < NUM_TOOLS; i++)
{
+ // if possible, find a tool with matching tool name, architecture, and os
+ // otherwise, choose a tool with only matching name and os and nullopt
+ // as architecture (this is the default tool)
const ArchToolData& d = tool_data[i];
if (d.tool == toolname && d.arch.has_value() && d.arch.value_or_exit(VCPKG_LINE_INFO) == arch && d.os == os)
{
From 3722ced4ccfee45780224fd4093bc6f1fc9c5fe6 Mon Sep 17 00:00:00 2001
From: Billy Robert O'Neal III
Date: Mon, 23 Sep 2024 16:23:09 -0700
Subject: [PATCH 07/13] Allow constexpr Optional when constexpr T is
acceptable by propagating trivial destruction.
---
include/vcpkg/base/optional.h | 207 ++++++++++++++++++++--------------
1 file changed, 123 insertions(+), 84 deletions(-)
diff --git a/include/vcpkg/base/optional.h b/include/vcpkg/base/optional.h
index 12c192957c..e10fe9ac6b 100644
--- a/include/vcpkg/base/optional.h
+++ b/include/vcpkg/base/optional.h
@@ -23,205 +23,244 @@ namespace vcpkg
namespace details
{
+ struct EngageTag
+ {
+ };
+
+ template>
+ struct OptionalStorageDtor
+ {
+ bool m_is_present;
+ union
+ {
+ char m_inactive;
+ T m_t;
+ };
+
+ constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
+ template
+ constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
+ : m_is_present(false), m_t(std::forward(args)...)
+ {
+ }
+ };
+
+ template
+ struct OptionalStorageDtor
+ {
+ bool m_is_present;
+ union
+ {
+ char m_inactive;
+ T m_t;
+ };
+
+ constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
+ template
+ constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
+ : m_is_present(false), m_t(std::forward(args)...)
+ {
+ }
+
+ ~OptionalStorageDtor()
+ {
+ if (m_is_present)
+ {
+ m_t.~T();
+ }
+ }
+ };
+
template>
- struct OptionalStorage
+ struct OptionalStorage : OptionalStorageDtor
{
- constexpr OptionalStorage() noexcept : m_is_present(false), m_inactive() { }
+ OptionalStorage() = default;
constexpr OptionalStorage(const T& t) noexcept(std::is_nothrow_copy_constructible_v)
- : m_is_present(true), m_t(t)
+ : OptionalStorageDtor(EngageTag{}, t)
{
}
constexpr OptionalStorage(T&& t) noexcept(std::is_nothrow_move_constructible_v)
- : m_is_present(true), m_t(std::move(t))
+ : OptionalStorageDtor(EngageTag{}, std::move(t))
{
}
template>>
explicit OptionalStorage(Optional&& t) noexcept(std::is_nothrow_constructible_v)
- : m_is_present(false), m_inactive()
+ : OptionalStorageDtor()
{
if (auto p = t.get())
{
- m_is_present = true;
- new (&m_t) T(std::move(*p));
+ this->m_is_present = true;
+ new (&this->m_t) T(std::move(*p));
}
}
template
explicit OptionalStorage(const Optional& t) noexcept(std::is_nothrow_constructible_v)
- : m_is_present(false), m_inactive()
+ : OptionalStorageDtor()
{
if (auto p = t.get())
{
- m_is_present = true;
- new (&m_t) T(*p);
+ this->m_is_present = true;
+ new (&this->m_t) T(*p);
}
}
- ~OptionalStorage()
- {
- if (m_is_present) m_t.~T();
- }
-
OptionalStorage(const OptionalStorage& o) noexcept(std::is_nothrow_copy_constructible_v)
- : m_is_present(o.m_is_present), m_inactive()
+ : OptionalStorageDtor()
{
- if (m_is_present) new (&m_t) T(o.m_t);
+ if (o.m_is_present)
+ {
+ this->m_is_present = true;
+ new (&this->m_t) T(o.m_t);
+ }
}
OptionalStorage(OptionalStorage&& o) noexcept(std::is_nothrow_move_constructible_v)
- : m_is_present(o.m_is_present), m_inactive()
+ : OptionalStorageDtor()
{
- if (m_is_present)
+ if (o.m_is_present)
{
- new (&m_t) T(std::move(o.m_t));
+ this->m_is_present = true;
+ new (&this->m_t) T(std::move(o.m_t));
}
}
OptionalStorage& operator=(const OptionalStorage& o) noexcept(std::is_nothrow_copy_constructible_v &&
std::is_nothrow_copy_assignable_v)
{
- if (m_is_present && o.m_is_present)
+ if (this->m_is_present && o.m_is_present)
{
- m_t = o.m_t;
+ this->m_t = o.m_t;
}
- else if (!m_is_present && o.m_is_present)
+ else if (!this->m_is_present && o.m_is_present)
{
- new (&m_t) T(o.m_t);
- m_is_present = true;
+ new (&this->m_t) T(o.m_t);
+ this->m_is_present = true;
}
- else if (m_is_present && !o.m_is_present)
+ else if (this->m_is_present && !o.m_is_present)
{
destroy();
}
+
return *this;
}
OptionalStorage& operator=(OptionalStorage&& o) noexcept // enforces termination
{
- if (m_is_present && o.m_is_present)
+ if (this->m_is_present && o.m_is_present)
{
- m_t = std::move(o.m_t);
+ this->m_t = std::move(o.m_t);
}
- else if (!m_is_present && o.m_is_present)
+ else if (!this->m_is_present && o.m_is_present)
{
- new (&m_t) T(std::move(o.m_t));
- m_is_present = true;
+ new (&this->m_t) T(std::move(o.m_t));
+ this->m_is_present = true;
}
- else if (m_is_present && !o.m_is_present)
+ else if (this->m_is_present && !o.m_is_present)
{
destroy();
}
return *this;
}
- constexpr bool has_value() const noexcept { return m_is_present; }
+ constexpr bool has_value() const noexcept { return this->m_is_present; }
const T& value() const noexcept { return this->m_t; }
T& value() noexcept { return this->m_t; }
- const T* get() const& noexcept { return m_is_present ? &m_t : nullptr; }
- T* get() & noexcept { return m_is_present ? &m_t : nullptr; }
+ const T* get() const& noexcept { return this->m_is_present ? &this->m_t : nullptr; }
+ T* get() & noexcept { return this->m_is_present ? &this->m_t : nullptr; }
const T* get() const&& = delete;
T* get() && = delete;
void destroy() noexcept // enforces termination
{
- m_is_present = false;
- m_t.~T();
- m_inactive = '\0';
+ this->m_is_present = false;
+ this->m_t.~T();
+ this->m_inactive = '\0';
}
template
T& emplace(Args&&... args) noexcept(std::is_nothrow_constructible_v)
{
- if (m_is_present) destroy();
- new (&m_t) T(static_cast(args)...);
- m_is_present = true;
- return m_t;
+ if (this->m_is_present) destroy();
+ new (&this->m_t) T(static_cast(args)...);
+ this->m_is_present = true;
+ return this->m_t;
}
-
- private:
- bool m_is_present;
- union
- {
- char m_inactive;
- T m_t;
- };
};
template
- struct OptionalStorage
+ struct OptionalStorage : OptionalStorageDtor
{
- constexpr OptionalStorage() noexcept : m_is_present(false), m_inactive() { }
+ OptionalStorage() = default;
constexpr OptionalStorage(T&& t) noexcept(std::is_nothrow_move_constructible_v)
- : m_is_present(true), m_t(std::move(t))
+ : OptionalStorageDtor(EngageTag{}, std::move(t))
{
}
-
- ~OptionalStorage()
+ template>>
+ explicit OptionalStorage(Optional&& t) noexcept(std::is_nothrow_constructible_v)
+ : OptionalStorageDtor()
{
- if (m_is_present) m_t.~T();
+ if (auto p = t.get())
+ {
+ this->m_is_present = true;
+ new (&this->m_t) T(std::move(*p));
+ }
}
-
OptionalStorage(OptionalStorage&& o) noexcept(std::is_nothrow_move_constructible_v)
- : m_is_present(o.m_is_present), m_inactive()
+ : OptionalStorageDtor()
{
- if (m_is_present)
+ if (o.m_is_present)
{
- new (&m_t) T(std::move(o.m_t));
+ this->m_is_present = true;
+ new (&this->m_t) T(std::move(o.m_t));
}
}
OptionalStorage& operator=(OptionalStorage&& o) noexcept // enforces termination
{
- if (m_is_present && o.m_is_present)
+ if (this->m_is_present && o.m_is_present)
{
- m_t = std::move(o.m_t);
+ this->m_t = std::move(o.m_t);
}
- else if (!m_is_present && o.m_is_present)
+ else if (!this->m_is_present && o.m_is_present)
{
- m_is_present = true;
- new (&m_t) T(std::move(o.m_t));
+ this->m_is_present = true;
+ new (&this->m_t) T(std::move(o.m_t));
}
- else if (m_is_present && !o.m_is_present)
+ else if (this->m_is_present && !o.m_is_present)
{
destroy();
}
+
return *this;
}
- constexpr bool has_value() const noexcept { return m_is_present; }
+ constexpr bool has_value() const noexcept { return this->m_is_present; }
const T& value() const noexcept { return this->m_t; }
T& value() noexcept { return this->m_t; }
- const T* get() const& noexcept { return m_is_present ? &m_t : nullptr; }
- T* get() & noexcept { return m_is_present ? &m_t : nullptr; }
+ const T* get() const& noexcept { return this->m_is_present ? &this->m_t : nullptr; }
+ T* get() & noexcept { return this->m_is_present ? &this->m_t : nullptr; }
const T* get() const&& = delete;
T* get() && = delete;
template
T& emplace(Args&&... args) noexcept(std::is_nothrow_constructible_v)
{
- if (m_is_present) destroy();
- new (&m_t) T(static_cast(args)...);
- m_is_present = true;
- return m_t;
+ if (this->m_is_present) destroy();
+ new (&this->m_t) T(static_cast(args)...);
+ this->m_is_present = true;
+ return this->m_t;
}
void destroy() noexcept
{
- m_is_present = false;
- m_t.~T();
- m_inactive = '\0';
+ this->m_is_present = false;
+ this->m_t.~T();
+ this->m_inactive = '\0';
}
-
- private:
- bool m_is_present;
- union
- {
- char m_inactive;
- T m_t;
- };
};
template
From 7126108d65ff28d2d09ae8403c0244ba557992fd Mon Sep 17 00:00:00 2001
From: Billy Robert O'Neal III
Date: Mon, 23 Sep 2024 16:29:39 -0700
Subject: [PATCH 08/13] Make the table be static data, deduplicate part of the
expression in the search loop, and get rid of magic numbers that is the
length of the table.
---
src/vcpkg/tools.cpp | 806 ++++++++++++++++++++++----------------------
1 file changed, 408 insertions(+), 398 deletions(-)
diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp
index 81cada54e3..dfdfdef11a 100644
--- a/src/vcpkg/tools.cpp
+++ b/src/vcpkg/tools.cpp
@@ -74,398 +74,409 @@ namespace vcpkg
StringLiteral archiveName;
};
- static Optional get_raw_tool_data(StringView toolname, CPUArchitecture arch, StringView os)
+ static constexpr ArchToolData tool_data_table[] = {
+ {
+ "python3",
+ "windows",
+ nullopt,
+ "3.11.8",
+ "python.exe",
+ "https://www.python.org/ftp/python/3.11.8/python-3.11.8-embed-win32.zip",
+ "c88ef02f0860000dbc59361cfe051e3e8dc7d208ed39bb5bc20a3e8b8711b578926e281a11941787ea61b2ef05b945ab313332"
+ "2dcb85b916f79ac4ada57f6309",
+ "python-3.11.8-embed-win32.zip",
+ },
+ {
+ "python3_with_venv",
+ "windows",
+ nullopt,
+ "3.11.8",
+ "tools/python.exe",
+ "https://www.nuget.org/api/v2/package/python/3.11.8",
+ "8c1abd622fb2795fb87ab5208764fe13f7f4d69f2283b4237ea47b7c14b0989b5b4169f1ac1d3b1f417c6c2cc3d85ce151370d"
+ "ae8efc807c93e57cd67fa3c8cf",
+ "python-3.11.8.nupkg.zip",
+ },
+ {
+ "cmake",
+ "windows",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-windows-i386/bin/cmake.exe",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-windows-i386.zip",
+ "562de7b577c99fe347b00437d14ce375a8e5a60504909cb67d2f73c372d39a2f76d2b42b69e4aeb31a4879e1bcf6f7c2d41f2a"
+ "ce12180ea83ba7af48879d40ab",
+ "cmake-3.29.2-windows-i386.zip",
+ },
+ {
+ "cmake",
+ "osx",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-macos-universal/CMake.app/Contents/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-macos-universal.tar.gz",
+ "26aab0163965f3d560dfd6b1f72c5e77192338237ebe286099fd62f243f1bbd4857b9193118386b801c00dc5cfbc5bc8af8481"
+ "4692fcfadcf56c7d2faab52533",
+ "cmake-3.29.2-macos-universal.tar.gz",
+ },
+ {
+ "cmake",
+ "linux",
+ CPUArchitecture::ARM64,
+ "3.29.2",
+ "cmake-3.29.2-linux-aarch64/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-aarch64.tar.gz",
+ "206b00604caf72f3dc644c7a5ac6a335814520fbf1512b9f2d4a5e8c26025d286bd106d2925ffbc874c754c518cbdb07f16919"
+ "16c39fcfd1202a47f592c8e3b0",
+ "cmake-3.29.2-linux-aarch64.tar.gz",
+ },
+ {
+ "cmake",
+ "linux",
+ nullopt,
+ "3.29.2",
+ "cmake-3.29.2-linux-x86_64/bin/cmake",
+ "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.tar.gz",
+ "d88082d582f1774a3d89efbf3f31a03b08a663c359d603d87ee7c4afd862d4164d2b0b9f0b32cece8efee3acfa86b44214cd4f"
+ "7606b99b8334183a05d5f06edc",
+ "cmake-3.29.2-linux-x86_64.tar.gz",
+ },
+ {
+ "git",
+ "windows",
+ nullopt,
+ "2.7.4",
+ "mingw64/bin/git.exe",
+ "https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/"
+ "PortableGit-2.43.0-64-bit.7z.exe",
+ "02ec40f55a6de18f305530e9415b6ce0a597359ebb9a58cf727ac84eceb0003b0f437941b76872b6568157a333c8e6e8d865a3"
+ "6faf874fd5f04774deb6a9387a",
+ "PortableGit-2.43.0-32-bit.7z.exe",
+ },
+ {
+ "git",
+ "linux",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ "",
+ },
+ {
+ "git",
+ "osx",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ "",
+ },
+ {
+ "git",
+ "freebsd",
+ nullopt,
+ "2.7.4",
+ "",
+ "",
+ "",
+ "",
+ },
+ {
+ "gsutil",
+ "windows",
+ nullopt,
+ "4.65",
+ "google-cloud-sdk/bin/gsutil.cmd",
+ "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/"
+ "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
+ "e2792e17b132aad77f7c0b9fd26faf415e9437923d9227a9e6d253554e6843d29a6ddad0a7fb5e9aea4a130fd4c521e6ece884"
+ "4fd4a4f9e8d580348775425389",
+ "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
+ },
+ {
+ "gsutil",
+ "osx",
+ nullopt,
+ "4.65",
+ "gsutil/gsutil",
+ "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
+ "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
+ "1bc83d112339d8e6096a2f21c8",
+ "gsutil_4.65.tar.gz",
+ },
+ {
+ "gsutil",
+ "linux",
+ nullopt,
+ "4.65",
+ "gsutil/gsutil",
+ "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
+ "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
+ "1bc83d112339d8e6096a2f21c8",
+ "gsutil_4.65.tar.gz",
+ },
+ {
+ "vswhere",
+ "windows",
+ nullopt,
+ "3.1.7",
+ "vswhere.exe",
+ "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe",
+ "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad"
+ "054e82d8c2603964975fc12076",
+ "",
+ },
+ {
+ "nuget",
+ "windows",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ "",
+ },
+ {
+ "nuget",
+ "linux",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ "",
+ },
+ {
+ "nuget",
+ "osx",
+ nullopt,
+ "6.10.0",
+ "nuget.exe",
+ "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
+ "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
+ "9e97139cdc86dde16a5ec3e7cf",
+ "",
+ },
+ {
+ "coscli",
+ "windows",
+ nullopt,
+ "0.11.0",
+ "coscli-windows.exe",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-windows.exe",
+ "38a521ec80cdb6944124f4233d7e71eed8cc9f9be2c0c736269915d21c3718ea8131e4516bb6eeada6df331f5fa8f47a299907"
+ "e50ee9edbe0114444520974d06",
+ "",
+ },
+ {
+ "coscli",
+ "linux",
+ nullopt,
+ "0.11.0",
+ "coscli-linux",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-linux",
+ "9c930a1d308e9581a0e2fdfe3751ea7fe13d6068df90ca6465740ec3eda034202ef71ec54c99e90015ff81aa68aa1489567db5"
+ "e411e222eb7258704bdac7e924",
+ "",
+ },
+ {
+ "coscli",
+ "osx",
+ nullopt,
+ "0.11.0",
+ "coscli-mac",
+ "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-mac",
+ "9556335bfc8bc14bace6dfced45fa77fb07c80f08aa975e047a54efda1d19852aae0ea68a5bc7f04fbd88e3edce5a73512a612"
+ "16b1c5ff4cade224de4a9ab8db",
+ "",
+ },
+ {
+ "installerbase",
+ "windows",
+ nullopt,
+ "4.4.0",
+ "QtInstallerFramework-win-x86/bin/installerbase.exe",
+ "https://download.qt.io/official_releases/qt-installer-framework/4.4.0/"
+ "installer-framework-opensource-src-4.4.0.zip",
+ "fc713f54bfe2781cb232cd0ae8eddb96833ec178d53a55ec0b01886aa048b13441eb49a1f33282e8eab7259cfe512c890d50b8"
+ "e632d3dbf501a0bf1fd83de947",
+ "installer-framework-opensource-src-4.4.0.zip",
+ },
+ {
+ "7zip_msi",
+ "windows",
+ nullopt,
+ "24.08",
+ "Files/7-Zip/7z.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-x64.msi",
+ "3259bf5e251382333c9d18a3fc01d83491fb41bc4ac4ddb25a02918494594c1074482b6608189a8a89e343d78e34d57420cdef"
+ "f1d7ace5acfdcaacc8776f1be8",
+ "7z2408-x64.msi",
+ },
+ {
+ "7zip",
+ "windows",
+ nullopt,
+ "24.08",
+ "7za.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-extra.7z",
+ "35f55236fccfb576ca014e29d0c35f4a213e53f06683bd2e82f869ed02506e230c8dd623c01d0207244d6a997031f737903456"
+ "b7ad4a44db1717f0a17a78602e",
+ "7z2408-extra.7z",
+ },
+ {
+ "7zr",
+ "windows",
+ nullopt,
+ "24.08",
+ "7zr.exe",
+ "https://github.com/ip7z/7zip/releases/download/24.08/7zr.exe",
+ "424196f2acf5b89807f4038683acc50e7604223fc630245af6bab0e0df923f8b1c49cb09ac709086568c214c3f53dcb7d6c32e"
+ "8a54af222a3ff78cfab9c51670",
+ "",
+ },
+ {
+ "aria2",
+ "windows",
+ nullopt,
+ "1.37.0",
+ "aria2-1.37.0-win-64bit-build1/aria2c.exe",
+ "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip",
+ "6d78405da9cf5639dbe8174787002161b8124d73880fb57cc8c0a3a63982f84e46df4e626990c58f23452965ad925f0d37cb91"
+ "47e99b25c3d7ca0ea49602f34d",
+ "aria2-1.37.0-win-64bit-build1.zip",
+ },
+ {
+ "aria2",
+ "osx",
+ nullopt,
+ "1.35.0",
+ "aria2-1.35.0/bin/aria2c",
+ "https://github.com/aria2/aria2/releases/download/release-1.35.0/aria2-1.35.0-osx-darwin.tar.bz2",
+ "3bb32b7d55347d1af37c6f4ebf0e20b38ce51c37a1baf92f7ad1762000539a03413dd679a6d902fdb1805fa71917300c9692ac"
+ "eee012eb06ecdff10491137aec",
+ "aria2-1.35.0-osx-darwin.tar.bz2",
+ },
+ {
+ "ninja",
+ "windows",
+ nullopt,
+ "1.11.1",
+ "ninja.exe",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip",
+ "a700e794c32eb67b9f87040db7f1ba3a8e891636696fc54d416b01661c2421ff46fa517c97fd904adacdf8e621df3e68ea3801"
+ "05b909ae8b6651a78ae7eb3199",
+ "ninja-win-1.11.1.zip",
+ },
+ {
+ "ninja",
+ "linux",
+ nullopt,
+ "1.11.1",
+ "ninja",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip",
+ "6403dac9196baffcff614fa73ea530752997c8db6bbfbaa0446b4b09d7327e2aa6e8615d1283c961d3bf0df497e85ba8660414"
+ "9f1505ee75f89d600245a45dde",
+ "ninja-linux-1.11.1.zip",
+ },
+ {
+ "ninja",
+ "osx",
+ nullopt,
+ "1.11.1",
+ "ninja",
+ "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-mac.zip",
+ "dad33b0918c60bbf5107951a936175b1610b4894a408f4ba4b47a2f5b328fc982a52a2aed6a0cb75028ee4765af5083bea6661"
+ "1c37516826eb0c851366bb4427",
+ "ninja-mac-1.11.1.zip",
+ },
+ {
+ "powershell-core",
+ "windows",
+ nullopt,
+ "7.2.23",
+ "pwsh.exe",
+ "https://github.com/PowerShell/PowerShell/releases/download/v7.2.23/PowerShell-7.2.23-win-x64.zip",
+ "b374a878df02980d54e17ad7cfc9021e331748c3770f586be61356c257494d1b33899c1167d09a35c210bc084474aefdff972f"
+ "672d16afb43be0562b3589285a",
+ "PowerShell-7.2.23-win-x64.zip",
+ },
+ {
+ "node",
+ "windows",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-win-x64/node.exe",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-win-x64.7z",
+ "7ec4bfe2ea6034e1461e306b6372d62c0c5d1060c453ba76a73a5cec38ac26b5952a744caa9071455329caa58eb0a96d26c688"
+ "54c8915c17610ff27b0cf2c1cf",
+ "node-v16.15.1-win-x64.7z",
+ },
+ {
+ "node",
+ "linux",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-linux-x64/bin/node",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz",
+ "5ad3b4b9caeaa8d31503efa99f5a593118a267dec9d4181d019732126ba248ce9a901207115b3f6b899eb5b3f0373c7f77ea95"
+ "cc92ac625cddf437ee9b8b8919",
+ "node-v16.15.1-linux-x64.tar.gz",
+ },
+ {
+ "node",
+ "osx",
+ nullopt,
+ "16.15.1",
+ "node-v16.15.1-darwin-x64/bin/node",
+ "https://nodejs.org/dist/v16.15.1/node-v16.15.1-darwin-x64.tar.gz",
+ "90d0612bbe5467b6cf385c91a68b8daad0057e3e0ccacea44567f5b95b14f7481cb79784185ab1463b4bd990e092ff0f910957"
+ "6d1a1934b84e1c816582929611",
+ "node-v16.15.1-darwin-x64.tar.gz",
+ },
+ };
+
+ static const ArchToolData* get_raw_tool_data(StringView toolname, CPUArchitecture arch, StringView os)
{
- const std::size_t NUM_TOOLS = 33;
- ArchToolData tool_data[NUM_TOOLS] = {
- {
- "python3",
- "windows",
- nullopt,
- "3.11.8",
- "python.exe",
- "https://www.python.org/ftp/python/3.11.8/python-3.11.8-embed-win32.zip",
- "c88ef02f0860000dbc59361cfe051e3e8dc7d208ed39bb5bc20a3e8b8711b578926e281a11941787ea61b2ef05b945ab313332"
- "2dcb85b916f79ac4ada57f6309",
- "python-3.11.8-embed-win32.zip",
- },
- {
- "python3_with_venv",
- "windows",
- nullopt,
- "3.11.8",
- "tools/python.exe",
- "https://www.nuget.org/api/v2/package/python/3.11.8",
- "8c1abd622fb2795fb87ab5208764fe13f7f4d69f2283b4237ea47b7c14b0989b5b4169f1ac1d3b1f417c6c2cc3d85ce151370d"
- "ae8efc807c93e57cd67fa3c8cf",
- "python-3.11.8.nupkg.zip",
- },
- {
- "cmake",
- "windows",
- nullopt,
- "3.29.2",
- "cmake-3.29.2-windows-i386/bin/cmake.exe",
- "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-windows-i386.zip",
- "562de7b577c99fe347b00437d14ce375a8e5a60504909cb67d2f73c372d39a2f76d2b42b69e4aeb31a4879e1bcf6f7c2d41f2a"
- "ce12180ea83ba7af48879d40ab",
- "cmake-3.29.2-windows-i386.zip",
- },
- {
- "cmake",
- "osx",
- nullopt,
- "3.29.2",
- "cmake-3.29.2-macos-universal/CMake.app/Contents/bin/cmake",
- "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-macos-universal.tar.gz",
- "26aab0163965f3d560dfd6b1f72c5e77192338237ebe286099fd62f243f1bbd4857b9193118386b801c00dc5cfbc5bc8af8481"
- "4692fcfadcf56c7d2faab52533",
- "cmake-3.29.2-macos-universal.tar.gz",
- },
- {
- "cmake",
- "linux",
- CPUArchitecture::ARM64,
- "3.29.2",
- "cmake-3.29.2-linux-aarch64/bin/cmake",
- "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-aarch64.tar.gz",
- "206b00604caf72f3dc644c7a5ac6a335814520fbf1512b9f2d4a5e8c26025d286bd106d2925ffbc874c754c518cbdb07f16919"
- "16c39fcfd1202a47f592c8e3b0",
- "cmake-3.29.2-linux-aarch64.tar.gz",
- },
- {
- "cmake",
- "linux",
- nullopt,
- "3.29.2",
- "cmake-3.29.2-linux-x86_64/bin/cmake",
- "https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.tar.gz",
- "d88082d582f1774a3d89efbf3f31a03b08a663c359d603d87ee7c4afd862d4164d2b0b9f0b32cece8efee3acfa86b44214cd4f"
- "7606b99b8334183a05d5f06edc",
- "cmake-3.29.2-linux-x86_64.tar.gz",
- },
- {
- "git",
- "windows",
- nullopt,
- "2.7.4",
- "mingw64/bin/git.exe",
- "https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/"
- "PortableGit-2.43.0-64-bit.7z.exe",
- "02ec40f55a6de18f305530e9415b6ce0a597359ebb9a58cf727ac84eceb0003b0f437941b76872b6568157a333c8e6e8d865a3"
- "6faf874fd5f04774deb6a9387a",
- "PortableGit-2.43.0-32-bit.7z.exe",
- },
- {
- "git",
- "linux",
- nullopt,
- "2.7.4",
- "",
- "",
- "",
- "",
- },
- {
- "git",
- "osx",
- nullopt,
- "2.7.4",
- "",
- "",
- "",
- "",
- },
- {
- "git",
- "freebsd",
- nullopt,
- "2.7.4",
- "",
- "",
- "",
- "",
- },
- {
- "gsutil",
- "windows",
- nullopt,
- "4.65",
- "google-cloud-sdk/bin/gsutil.cmd",
- "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/"
- "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
- "e2792e17b132aad77f7c0b9fd26faf415e9437923d9227a9e6d253554e6843d29a6ddad0a7fb5e9aea4a130fd4c521e6ece884"
- "4fd4a4f9e8d580348775425389",
- "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip",
- },
- {
- "gsutil",
- "osx",
- nullopt,
- "4.65",
- "gsutil/gsutil",
- "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
- "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
- "1bc83d112339d8e6096a2f21c8",
- "gsutil_4.65.tar.gz",
- },
- {
- "gsutil",
- "linux",
- nullopt,
- "4.65",
- "gsutil/gsutil",
- "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz",
- "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd5"
- "1bc83d112339d8e6096a2f21c8",
- "gsutil_4.65.tar.gz",
- },
- {
- "vswhere",
- "windows",
- nullopt,
- "3.1.7",
- "vswhere.exe",
- "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe",
- "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad"
- "054e82d8c2603964975fc12076",
- "",
- },
- {
- "nuget",
- "windows",
- nullopt,
- "6.10.0",
- "nuget.exe",
- "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
- "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
- "9e97139cdc86dde16a5ec3e7cf",
- "",
- },
- {
- "nuget",
- "linux",
- nullopt,
- "6.10.0",
- "nuget.exe",
- "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
- "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
- "9e97139cdc86dde16a5ec3e7cf",
- "",
- },
- {
- "nuget",
- "osx",
- nullopt,
- "6.10.0",
- "nuget.exe",
- "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe",
- "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead9"
- "9e97139cdc86dde16a5ec3e7cf",
- "",
- },
- {
- "coscli",
- "windows",
- nullopt,
- "0.11.0",
- "coscli-windows.exe",
- "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-windows.exe",
- "38a521ec80cdb6944124f4233d7e71eed8cc9f9be2c0c736269915d21c3718ea8131e4516bb6eeada6df331f5fa8f47a299907"
- "e50ee9edbe0114444520974d06",
- "",
- },
- {
- "coscli",
- "linux",
- nullopt,
- "0.11.0",
- "coscli-linux",
- "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-linux",
- "9c930a1d308e9581a0e2fdfe3751ea7fe13d6068df90ca6465740ec3eda034202ef71ec54c99e90015ff81aa68aa1489567db5"
- "e411e222eb7258704bdac7e924",
- "",
- },
- {
- "coscli",
- "osx",
- nullopt,
- "0.11.0",
- "coscli-mac",
- "https://github.com/tencentyun/coscli/releases/download/v0.11.0-beta/coscli-mac",
- "9556335bfc8bc14bace6dfced45fa77fb07c80f08aa975e047a54efda1d19852aae0ea68a5bc7f04fbd88e3edce5a73512a612"
- "16b1c5ff4cade224de4a9ab8db",
- "",
- },
- {
- "installerbase",
- "windows",
- nullopt,
- "4.4.0",
- "QtInstallerFramework-win-x86/bin/installerbase.exe",
- "https://download.qt.io/official_releases/qt-installer-framework/4.4.0/"
- "installer-framework-opensource-src-4.4.0.zip",
- "fc713f54bfe2781cb232cd0ae8eddb96833ec178d53a55ec0b01886aa048b13441eb49a1f33282e8eab7259cfe512c890d50b8"
- "e632d3dbf501a0bf1fd83de947",
- "installer-framework-opensource-src-4.4.0.zip",
- },
- {
- "7zip_msi",
- "windows",
- nullopt,
- "24.08",
- "Files/7-Zip/7z.exe",
- "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-x64.msi",
- "3259bf5e251382333c9d18a3fc01d83491fb41bc4ac4ddb25a02918494594c1074482b6608189a8a89e343d78e34d57420cdef"
- "f1d7ace5acfdcaacc8776f1be8",
- "7z2408-x64.msi",
- },
- {
- "7zip",
- "windows",
- nullopt,
- "24.08",
- "7za.exe",
- "https://github.com/ip7z/7zip/releases/download/24.08/7z2408-extra.7z",
- "35f55236fccfb576ca014e29d0c35f4a213e53f06683bd2e82f869ed02506e230c8dd623c01d0207244d6a997031f737903456"
- "b7ad4a44db1717f0a17a78602e",
- "7z2408-extra.7z",
- },
- {
- "7zr",
- "windows",
- nullopt,
- "24.08",
- "7zr.exe",
- "https://github.com/ip7z/7zip/releases/download/24.08/7zr.exe",
- "424196f2acf5b89807f4038683acc50e7604223fc630245af6bab0e0df923f8b1c49cb09ac709086568c214c3f53dcb7d6c32e"
- "8a54af222a3ff78cfab9c51670",
- "",
- },
- {
- "aria2",
- "windows",
- nullopt,
- "1.37.0",
- "aria2-1.37.0-win-64bit-build1/aria2c.exe",
- "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip",
- "6d78405da9cf5639dbe8174787002161b8124d73880fb57cc8c0a3a63982f84e46df4e626990c58f23452965ad925f0d37cb91"
- "47e99b25c3d7ca0ea49602f34d",
- "aria2-1.37.0-win-64bit-build1.zip",
- },
- {
- "aria2",
- "osx",
- nullopt,
- "1.35.0",
- "aria2-1.35.0/bin/aria2c",
- "https://github.com/aria2/aria2/releases/download/release-1.35.0/aria2-1.35.0-osx-darwin.tar.bz2",
- "3bb32b7d55347d1af37c6f4ebf0e20b38ce51c37a1baf92f7ad1762000539a03413dd679a6d902fdb1805fa71917300c9692ac"
- "eee012eb06ecdff10491137aec",
- "aria2-1.35.0-osx-darwin.tar.bz2",
- },
- {
- "ninja",
- "windows",
- nullopt,
- "1.11.1",
- "ninja.exe",
- "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip",
- "a700e794c32eb67b9f87040db7f1ba3a8e891636696fc54d416b01661c2421ff46fa517c97fd904adacdf8e621df3e68ea3801"
- "05b909ae8b6651a78ae7eb3199",
- "ninja-win-1.11.1.zip",
- },
- {
- "ninja",
- "linux",
- nullopt,
- "1.11.1",
- "ninja",
- "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip",
- "6403dac9196baffcff614fa73ea530752997c8db6bbfbaa0446b4b09d7327e2aa6e8615d1283c961d3bf0df497e85ba8660414"
- "9f1505ee75f89d600245a45dde",
- "ninja-linux-1.11.1.zip",
- },
- {
- "ninja",
- "osx",
- nullopt,
- "1.11.1",
- "ninja",
- "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-mac.zip",
- "dad33b0918c60bbf5107951a936175b1610b4894a408f4ba4b47a2f5b328fc982a52a2aed6a0cb75028ee4765af5083bea6661"
- "1c37516826eb0c851366bb4427",
- "ninja-mac-1.11.1.zip",
- },
- {
- "powershell-core",
- "windows",
- nullopt,
- "7.2.23",
- "pwsh.exe",
- "https://github.com/PowerShell/PowerShell/releases/download/v7.2.23/PowerShell-7.2.23-win-x64.zip",
- "b374a878df02980d54e17ad7cfc9021e331748c3770f586be61356c257494d1b33899c1167d09a35c210bc084474aefdff972f"
- "672d16afb43be0562b3589285a",
- "PowerShell-7.2.23-win-x64.zip",
- },
- {
- "node",
- "windows",
- nullopt,
- "16.15.1",
- "node-v16.15.1-win-x64/node.exe",
- "https://nodejs.org/dist/v16.15.1/node-v16.15.1-win-x64.7z",
- "7ec4bfe2ea6034e1461e306b6372d62c0c5d1060c453ba76a73a5cec38ac26b5952a744caa9071455329caa58eb0a96d26c688"
- "54c8915c17610ff27b0cf2c1cf",
- "node-v16.15.1-win-x64.7z",
- },
- {
- "node",
- "linux",
- nullopt,
- "16.15.1",
- "node-v16.15.1-linux-x64/bin/node",
- "https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz",
- "5ad3b4b9caeaa8d31503efa99f5a593118a267dec9d4181d019732126ba248ce9a901207115b3f6b899eb5b3f0373c7f77ea95"
- "cc92ac625cddf437ee9b8b8919",
- "node-v16.15.1-linux-x64.tar.gz",
- },
- {
- "node",
- "osx",
- nullopt,
- "16.15.1",
- "node-v16.15.1-darwin-x64/bin/node",
- "https://nodejs.org/dist/v16.15.1/node-v16.15.1-darwin-x64.tar.gz",
- "90d0612bbe5467b6cf385c91a68b8daad0057e3e0ccacea44567f5b95b14f7481cb79784185ab1463b4bd990e092ff0f910957"
- "6d1a1934b84e1c816582929611",
- "node-v16.15.1-darwin-x64.tar.gz",
- }};
-
- size_t default_tool = 0;
- bool existsDefaultTool = false;
- for (std::size_t i = 0; i < NUM_TOOLS; i++)
- {
- // if possible, find a tool with matching tool name, architecture, and os
- // otherwise, choose a tool with only matching name and os and nullopt
- // as architecture (this is the default tool)
- const ArchToolData& d = tool_data[i];
- if (d.tool == toolname && d.arch.has_value() && d.arch.value_or_exit(VCPKG_LINE_INFO) == arch && d.os == os)
- {
- return d;
- }
- else if (d.tool == toolname && d.os == os && !d.arch.has_value())
+ const ArchToolData* default_tool = nullptr;
+ for (auto&& d : tool_data_table)
+ {
+ if (d.tool == toolname && d.os == os)
{
- default_tool = i;
- existsDefaultTool = true;
+ // if the tool data record declares an architecture matching the one we're looking for, that's an exact
+ // match and we've found the right one
+ if (auto d_arch = d.arch.get())
+ {
+ if (*d_arch == arch)
+ {
+ return &d;
+ }
+ }
+ else
+ {
+ // if the tool data record does not declare an architecture, we merely record a 'default tool' in
+ // case a more specific entry naming an architecture is seen
+ if (default_tool)
+ {
+ Checks::unreachable(VCPKG_LINE_INFO,
+ "there should be only one tool entry with an undeclared architecture");
+ }
+
+ default_tool = &d;
+ }
}
}
- if (existsDefaultTool)
+
+ if (default_tool)
{
- return tool_data[default_tool];
+ return default_tool;
}
- return nullopt;
+ return nullptr;
}
static Optional get_tool_data(StringView tool)
@@ -484,37 +495,36 @@ namespace vcpkg
#else
return nullopt;
#endif
- if (!data.has_value())
+ if (!data)
{
return nullopt;
}
- auto& d = data.value_or_exit(VCPKG_LINE_INFO);
- const Optional> version = parse_tool_version_string(d.version);
+ const Optional> version = parse_tool_version_string(data->version);
Checks::msg_check_exit(VCPKG_LINE_INFO,
version.has_value(),
msgFailedToParseVersionXML,
msg::tool_name = tool,
- msg::version = d.version);
+ msg::version = data->version);
- Path tool_dir_name = fmt::format("{}-{}-{}", tool, d.version, d.os);
+ Path tool_dir_name = fmt::format("{}-{}-{}", tool, data->version, data->os);
Path download_subpath;
- if (!d.archiveName.empty())
+ if (!data->archiveName.empty())
{
- download_subpath = d.archiveName;
+ download_subpath = data->archiveName;
}
- else if (!d.exeRelativePath.empty())
+ else if (!data->exeRelativePath.empty())
{
- download_subpath = Strings::concat(StringView{d.sha512}.substr(0, 8), '-', d.exeRelativePath);
+ download_subpath = Strings::concat(StringView{data->sha512}.substr(0, 8), '-', data->exeRelativePath);
}
return ToolData{tool.to_string(),
*version.get(),
- d.exeRelativePath,
- std::string(d.url),
+ data->exeRelativePath,
+ data->url.to_string(),
download_subpath,
- !d.archiveName.empty(),
+ !data->archiveName.empty(),
tool_dir_name,
- std::string(d.sha512)};
+ data->sha512.to_string()};
}
struct PathAndVersion
From c340da3dfc965fb5b4a6ac452962800c464970b3 Mon Sep 17 00:00:00 2001
From: Billy Robert O'Neal III
Date: Mon, 23 Sep 2024 16:42:57 -0700
Subject: [PATCH 09/13] =?UTF-8?q?Fixup=20optional=20=F0=9F=98=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
include/vcpkg/base/optional.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/vcpkg/base/optional.h b/include/vcpkg/base/optional.h
index e10fe9ac6b..392da7cdb5 100644
--- a/include/vcpkg/base/optional.h
+++ b/include/vcpkg/base/optional.h
@@ -40,7 +40,7 @@ namespace vcpkg
constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
template
constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
- : m_is_present(false), m_t(std::forward(args)...)
+ : m_is_present(true), m_t(std::forward(args)...)
{
}
};
@@ -58,7 +58,7 @@ namespace vcpkg
constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
template
constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
- : m_is_present(false), m_t(std::forward(args)...)
+ : m_is_present(true), m_t(std::forward(args)...)
{
}
From 6c41ed578d6a80aeb6682e0f1d2945adb701a19e Mon Sep 17 00:00:00 2001
From: Billy Robert O'Neal III
Date: Mon, 23 Sep 2024 16:44:04 -0700
Subject: [PATCH 10/13] clang-format
---
include/vcpkg/base/optional.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/vcpkg/base/optional.h b/include/vcpkg/base/optional.h
index 392da7cdb5..c18619deb9 100644
--- a/include/vcpkg/base/optional.h
+++ b/include/vcpkg/base/optional.h
@@ -39,7 +39,8 @@ namespace vcpkg
constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
template
- constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
+ constexpr OptionalStorageDtor(EngageTag,
+ Args&&... args) noexcept(std::is_nothrow_constructible_v)
: m_is_present(true), m_t(std::forward(args)...)
{
}
@@ -57,7 +58,8 @@ namespace vcpkg
constexpr OptionalStorageDtor() : m_is_present(false), m_inactive() { }
template
- constexpr OptionalStorageDtor(EngageTag, Args&&... args) noexcept(std::is_nothrow_constructible_v)
+ constexpr OptionalStorageDtor(EngageTag,
+ Args&&... args) noexcept(std::is_nothrow_constructible_v)
: m_is_present(true), m_t(std::forward(args)...)
{
}
From 7e6947cb270dde57caaabed01cec47e293b966cc Mon Sep 17 00:00:00 2001
From: Billy Robert O'Neal III
Date: Tue, 24 Sep 2024 13:36:46 -0700
Subject: [PATCH 11/13] Suppress -Werror=unused-but-set-variable in optional
tests.
---
src/vcpkg-test/optional.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/vcpkg-test/optional.cpp b/src/vcpkg-test/optional.cpp
index 88c3211001..2bb85b642d 100644
--- a/src/vcpkg-test/optional.cpp
+++ b/src/vcpkg-test/optional.cpp
@@ -65,6 +65,7 @@ TEST_CASE ("value conversion", "[optional]")
Optional j = 1;
Optional i = j;
+ (void)i;
Optional cstr = "hello, world!";
Optional cppstr = cstr;
@@ -89,9 +90,12 @@ TEST_CASE ("optional.map", "[optional]")
const Optional> move_only;
Optional m = move_only.map([](auto&& p) { return p.get(); });
+ (void)m;
Optional> n =
move_only.map([](auto&& p) -> Optional { return p ? Optional{p.get()} : nullopt; });
+ (void)n;
Optional o = move_only.map([](auto&&) { return nullopt; });
+ (void)o;
Optional five = 5;
From 8b5511c52b3e8daef74b13b8d43af832c6a8d9bb Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Thu, 3 Oct 2024 09:09:19 +0000
Subject: [PATCH 12/13] fix
---
.../end-to-end-tests-dir/fetch.ps1 | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
create mode 100644 azure-pipelines/end-to-end-tests-dir/fetch.ps1
diff --git a/azure-pipelines/end-to-end-tests-dir/fetch.ps1 b/azure-pipelines/end-to-end-tests-dir/fetch.ps1
new file mode 100644
index 0000000000..c4d4ce2244
--- /dev/null
+++ b/azure-pipelines/end-to-end-tests-dir/fetch.ps1
@@ -0,0 +1,51 @@
+. $PSScriptRoot/../end-to-end-tests-prelude.ps1
+
+if (-not $IsMacOS -and -not $IsLinux) {
+ "" | Out-File -enc ascii $(Join-Path $TestingRoot .vcpkg-root)
+
+ $Scripts = Join-Path $TestingRoot "scripts"
+ mkdir $Scripts | Out-Null
+
+ $7zip_version = "24.08"
+ $ninja_version = "1.11.1"
+
+ $env:VCPKG_DOWNLOADS = Join-Path $TestingRoot 'down loads'
+ Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "7zip", "--vcpkg-root=$TestingRoot"))
+ Throw-IfFailed
+ Require-FileExists "$TestingRoot/down loads/tools/7zip-${7zip_version}-windows/7za.exe"
+
+ Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
+ Throw-IfFailed
+ Require-FileExists "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe"
+
+ mkdir "$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows" | Out-Null
+ Move-Item -Path "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe" -Destination "$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows/ninja.exe"
+ $path = $env:PATH
+
+ $env:PATH = "$path;$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows"
+ Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
+ Throw-IfFailed
+ Require-FileNotExists "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe"
+
+ $env:VCPKG_FORCE_DOWNLOADED_BINARIES = "1"
+ Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
+ Throw-IfFailed
+ Require-FileExists "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe"
+
+ Remove-Item -Recurse -Force "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows" -ErrorAction SilentlyContinue
+ Remove-Item env:VCPKG_FORCE_DOWNLOADED_BINARIES
+
+ $env:VCPKG_FORCE_SYSTEM_BINARIES = "1"
+ $env:PATH = "$PSScriptRoot\..\e2e-assets\fetch;$path"
+ Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))
+ Throw-IfFailed
+ Require-FileNotExists "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe"
+
+ Remove-Item env:VCPKG_FORCE_SYSTEM_BINARIES
+ $out = Run-VcpkgAndCaptureOutput -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot", "--x-stderr-status"))
+ Throw-IfFailed
+ & $out --version
+ if ($LASTEXITCODE -ne 0) {
+ throw 'Couldn''t run resulting ninja'
+ }
+}
From b183ea6dc0df00851de0d52de8b0140abc385c38 Mon Sep 17 00:00:00 2001
From: data-queue <144965964+data-queue@users.noreply.github.com>
Date: Thu, 3 Oct 2024 09:31:25 +0000
Subject: [PATCH 13/13] fix
---
azure-pipelines/end-to-end-tests-dir/fetch.ps1 | 2 ++
1 file changed, 2 insertions(+)
diff --git a/azure-pipelines/end-to-end-tests-dir/fetch.ps1 b/azure-pipelines/end-to-end-tests-dir/fetch.ps1
index c4d4ce2244..1ed49fc174 100644
--- a/azure-pipelines/end-to-end-tests-dir/fetch.ps1
+++ b/azure-pipelines/end-to-end-tests-dir/fetch.ps1
@@ -10,6 +10,7 @@ if (-not $IsMacOS -and -not $IsLinux) {
$ninja_version = "1.11.1"
$env:VCPKG_DOWNLOADS = Join-Path $TestingRoot 'down loads'
+ $env:VCPKG_FORCE_DOWNLOADED_BINARIES = "1"
Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "7zip", "--vcpkg-root=$TestingRoot"))
Throw-IfFailed
Require-FileExists "$TestingRoot/down loads/tools/7zip-${7zip_version}-windows/7za.exe"
@@ -21,6 +22,7 @@ if (-not $IsMacOS -and -not $IsLinux) {
mkdir "$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows" | Out-Null
Move-Item -Path "$TestingRoot/down loads/tools/ninja-${ninja_version}-windows/ninja.exe" -Destination "$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows/ninja.exe"
$path = $env:PATH
+ Remove-Item env:VCPKG_FORCE_DOWNLOADED_BINARIES
$env:PATH = "$path;$TestingRoot/down loads/tools/ninja-testing-${ninja_version}-windows"
Run-Vcpkg -TestArgs ($commonArgs + @("fetch", "ninja", "--vcpkg-root=$TestingRoot"))