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"))