Add triplet option VCPKG_DISABLE_COMPILER_TRACKING (#110)

* Add NO_COMPILER_TRACKING triplet option

* Use 'disable_compiler_tracking'

* Handle per-port compiler tracking

* Add test for compiler tracking

Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
This commit is contained in:
Kevin Lalumiere 2021-08-19 18:54:07 -04:00 коммит произвёл GitHub
Родитель 0edcc5744f
Коммит 5e55749af9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
6 изменённых файлов: 230 добавлений и 104 удалений

Просмотреть файл

@ -0,0 +1,8 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
if(PORT STREQUAL "rapidjson")
set(VCPKG_DISABLE_COMPILER_TRACKING 1)
endif()

Просмотреть файл

@ -1,19 +1,19 @@
if ($IsLinux) {
# The tests below need a mono installation not currently available on the Linux agents.
return
}
. $PSScriptRoot/../end-to-end-tests-prelude.ps1
# Test simple installation
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--binarycaching", "--x-binarysource=clear;files,$ArchiveRoot,write;nuget,$NuGetRoot,readwrite"))
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--binarycaching", "--x-binarysource=clear;files,$ArchiveRoot,write"))
Throw-IfFailed
Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
# Test simple removal
Run-Vcpkg -TestArgs ($commonArgs + @("remove", "rapidjson"))
Throw-IfFailed
Require-FileNotExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileNotExists "$installRoot/$Triplet/include"
if(-Not $IsLinux) {
# Test simple nuget installation
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--binarycaching", "--x-binarysource=clear;nuget,$NuGetRoot,readwrite"))
Throw-IfFailed
}
# Test restoring from files archive
Remove-Item -Recurse -Force $installRoot
@ -42,46 +42,48 @@ Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileExists "$buildtreesRoot/rapidjson/src"
Require-FileNotExists "$buildtreesRoot/detect_compiler"
# Test restoring from nuget
Remove-Item -Recurse -Force $installRoot
Remove-Item -Recurse -Force $buildtreesRoot
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--binarycaching", "--x-binarysource=clear;nuget,$NuGetRoot"))
Throw-IfFailed
Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
if(-Not $IsLinux) {
# Test restoring from nuget
Remove-Item -Recurse -Force $installRoot
Remove-Item -Recurse -Force $buildtreesRoot
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--binarycaching", "--x-binarysource=clear;nuget,$NuGetRoot"))
Throw-IfFailed
Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
# Test four-phase flow
Remove-Item -Recurse -Force $installRoot -ErrorAction SilentlyContinue
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--dry-run", "--x-write-nuget-packages-config=$TestingRoot/packages.config"))
Throw-IfFailed
Require-FileNotExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
Require-FileExists "$TestingRoot/packages.config"
$fetchNuGetArgs = $commonArgs + @('fetch', 'nuget')
if ($IsLinux -or $IsMacOS) {
mono $(./vcpkg @fetchNuGetArgs) restore $TestingRoot/packages.config -OutputDirectory "$NuGetRoot2" -Source "$NuGetRoot"
} else {
& $(./vcpkg @fetchNuGetArgs) restore $TestingRoot/packages.config -OutputDirectory "$NuGetRoot2" -Source "$NuGetRoot"
}
Throw-IfFailed
Remove-Item -Recurse -Force $NuGetRoot -ErrorAction SilentlyContinue
mkdir $NuGetRoot
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "zlib", "--binarycaching", "--x-binarysource=clear;nuget,$NuGetRoot2;nuget,$NuGetRoot,write"))
Throw-IfFailed
Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileExists "$installRoot/$Triplet/include/zlib.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
Require-FileExists "$buildtreesRoot/zlib/src"
if ((Get-ChildItem $NuGetRoot -Filter '*.nupkg' | Measure-Object).Count -ne 1) {
throw "In '$CurrentTest': did not create exactly 1 NuGet package"
}
# Test four-phase flow
Remove-Item -Recurse -Force $installRoot -ErrorAction SilentlyContinue
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "--dry-run", "--x-write-nuget-packages-config=$TestingRoot/packages.config"))
Throw-IfFailed
Require-FileNotExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
Require-FileExists "$TestingRoot/packages.config"
$fetchNuGetArgs = $commonArgs + @('fetch', 'nuget')
if ($IsLinux -or $IsMacOS) {
mono $(./vcpkg @fetchNuGetArgs) restore $TestingRoot/packages.config -OutputDirectory "$NuGetRoot2" -Source "$NuGetRoot"
} else {
& $(./vcpkg @fetchNuGetArgs) restore $TestingRoot/packages.config -OutputDirectory "$NuGetRoot2" -Source "$NuGetRoot"
}
Throw-IfFailed
Remove-Item -Recurse -Force $NuGetRoot -ErrorAction SilentlyContinue
mkdir $NuGetRoot
Run-Vcpkg -TestArgs ($commonArgs + @("install", "rapidjson", "zlib", "--binarycaching", "--x-binarysource=clear;nuget,$NuGetRoot2;nuget,$NuGetRoot,write"))
Throw-IfFailed
Require-FileExists "$installRoot/$Triplet/include/rapidjson/rapidjson.h"
Require-FileExists "$installRoot/$Triplet/include/zlib.h"
Require-FileNotExists "$buildtreesRoot/rapidjson/src"
Require-FileExists "$buildtreesRoot/zlib/src"
if ((Get-ChildItem $NuGetRoot -Filter '*.nupkg' | Measure-Object).Count -ne 1) {
throw "In '$CurrentTest': did not create exactly 1 NuGet package"
}
# Test export
$CurrentTest = 'Exporting'
Require-FileNotExists "$TestingRoot/vcpkg-export-output"
Require-FileNotExists "$TestingRoot/vcpkg-export.1.0.0.nupkg"
Require-FileNotExists "$TestingRoot/vcpkg-export-output.zip"
Run-Vcpkg -TestArgs ($commonArgs + @("export", "rapidjson", "zlib", "--nuget", "--nuget-id=vcpkg-export", "--nuget-version=1.0.0", "--output=vcpkg-export-output", "--raw", "--zip", "--output-dir=$TestingRoot"))
Require-FileExists "$TestingRoot/vcpkg-export-output"
Require-FileExists "$TestingRoot/vcpkg-export.1.0.0.nupkg"
Require-FileExists "$TestingRoot/vcpkg-export-output.zip"
# Test export
$CurrentTest = 'Exporting'
Require-FileNotExists "$TestingRoot/vcpkg-export-output"
Require-FileNotExists "$TestingRoot/vcpkg-export.1.0.0.nupkg"
Require-FileNotExists "$TestingRoot/vcpkg-export-output.zip"
Run-Vcpkg -TestArgs ($commonArgs + @("export", "rapidjson", "zlib", "--nuget", "--nuget-id=vcpkg-export", "--nuget-version=1.0.0", "--output=vcpkg-export-output", "--raw", "--zip", "--output-dir=$TestingRoot"))
Require-FileExists "$TestingRoot/vcpkg-export-output"
Require-FileExists "$TestingRoot/vcpkg-export.1.0.0.nupkg"
Require-FileExists "$TestingRoot/vcpkg-export-output.zip"
}

Просмотреть файл

@ -0,0 +1,31 @@
if ($Triplet -ne "x64-linux") {
return
}
. $PSScriptRoot/../end-to-end-tests-prelude.ps1
$args = $commonArgs + @("--overlay-triplets=$PSScriptRoot/../e2e_ports/compilertracking", "--binarysource=clear;files,$ArchiveRoot,readwrite")
# Test simple installation
Run-Vcpkg -TestArgs ($args + @("install", "tinyxml"))
Throw-IfFailed
if (-Not (select-string "^triplet_abi [0-9a-f]+-[0-9a-f]+-[0-9a-f]+$" "$installRoot/x64-linux/share/tinyxml/vcpkg_abi_info.txt")) {
throw "Expected tinyxml to perform compiler detection"
}
Remove-Item -Recurse -Force $installRoot
Run-Vcpkg -TestArgs ($args + @("install", "rapidjson"))
Throw-IfFailed
if (-Not (select-string "^triplet_abi [0-9a-f]+-[0-9a-f]+$" "$installRoot/x64-linux/share/rapidjson/vcpkg_abi_info.txt")) {
throw "Expected rapidjson to not perform compiler detection"
}
Remove-Item -Recurse -Force $installRoot
Run-Vcpkg -TestArgs ($args + @("install", "rapidjson", "tinyxml"))
Throw-IfFailed
if (-Not (select-string "^triplet_abi [0-9a-f]+-[0-9a-f]+-[0-9a-f]+$" "$installRoot/x64-linux/share/tinyxml/vcpkg_abi_info.txt")) {
throw "Expected tinyxml to perform compiler detection"
}
if (-Not (select-string "^triplet_abi [0-9a-f]+-[0-9a-f]+$" "$installRoot/x64-linux/share/rapidjson/vcpkg_abi_info.txt")) {
throw "Expected rapidjson to not perform compiler detection"
}

Просмотреть файл

@ -221,6 +221,7 @@ namespace vcpkg::Build
Triplet triplet;
bool load_vcvars_env = false;
bool disable_compiler_tracking = false;
std::string target_architecture;
std::string cmake_system_name;
std::string cmake_system_version;
@ -369,12 +370,15 @@ namespace vcpkg::Build
struct TripletMapEntry
{
std::string hash;
Cache<std::string, std::string> compiler_hashes;
Cache<std::string, std::string> triplet_infos;
Cache<std::string, std::string> triplet_infos_without_compiler;
Cache<std::string, CompilerInfo> compiler_info;
};
Cache<Path, TripletMapEntry> m_triplet_cache;
Cache<Path, std::string> m_toolchain_cache;
const TripletMapEntry& get_triplet_cache(const Filesystem& fs, const Path& p);
#if defined(_WIN32)
struct EnvMapEntry
{

Просмотреть файл

@ -492,20 +492,37 @@ namespace vcpkg::Build
static CompilerInfo load_compiler_info(const VcpkgPaths& paths, const AbiInfo& abi_info);
static const std::string& get_toolchain_cache(Cache<Path, std::string>& cache,
const Path& tcfile,
const Filesystem& fs)
{
return cache.get_lazy(
tcfile, [&]() { return Hash::get_file_hash(VCPKG_LINE_INFO, fs, tcfile, Hash::Algorithm::Sha256); });
}
const EnvCache::TripletMapEntry& EnvCache::get_triplet_cache(const Filesystem& fs, const Path& p)
{
return m_triplet_cache.get_lazy(p, [&]() -> TripletMapEntry {
return TripletMapEntry{Hash::get_file_hash(VCPKG_LINE_INFO, fs, p, Hash::Algorithm::Sha256)};
});
}
const CompilerInfo& EnvCache::get_compiler_info(const VcpkgPaths& paths, const AbiInfo& abi_info)
{
const auto& fs = paths.get_filesystem();
Checks::check_exit(VCPKG_LINE_INFO, abi_info.pre_build_info != nullptr);
if (!m_compiler_tracking || abi_info.pre_build_info->disable_compiler_tracking)
{
static CompilerInfo empty_ci;
return empty_ci;
}
const auto& fs = paths.get_filesystem();
const auto triplet_file_path = paths.get_triplet_file_path(abi_info.pre_build_info->triplet);
auto tcfile = abi_info.pre_build_info->toolchain_file();
auto&& toolchain_hash = m_toolchain_cache.get_lazy(
tcfile, [&]() { return Hash::get_file_hash(VCPKG_LINE_INFO, fs, tcfile, Hash::Algorithm::Sha256); });
auto&& toolchain_hash = get_toolchain_cache(m_toolchain_cache, abi_info.pre_build_info->toolchain_file(), fs);
auto&& triplet_entry = m_triplet_cache.get_lazy(triplet_file_path, [&]() -> TripletMapEntry {
return TripletMapEntry{
Hash::get_file_hash(VCPKG_LINE_INFO, fs, triplet_file_path, Hash::Algorithm::Sha256)};
});
auto&& triplet_entry = get_triplet_cache(fs, triplet_file_path);
return triplet_entry.compiler_info.get_lazy(toolchain_hash, [&]() -> CompilerInfo {
if (m_compiler_tracking)
@ -525,35 +542,23 @@ namespace vcpkg::Build
Checks::check_exit(VCPKG_LINE_INFO, abi_info.pre_build_info != nullptr);
const auto triplet_file_path = paths.get_triplet_file_path(abi_info.pre_build_info->triplet);
auto tcfile = abi_info.pre_build_info->toolchain_file();
auto&& toolchain_hash = m_toolchain_cache.get_lazy(
tcfile, [&]() { return Hash::get_file_hash(VCPKG_LINE_INFO, fs, tcfile, Hash::Algorithm::Sha256); });
auto&& toolchain_hash = get_toolchain_cache(m_toolchain_cache, abi_info.pre_build_info->toolchain_file(), fs);
auto&& triplet_entry = m_triplet_cache.get_lazy(triplet_file_path, [&]() -> TripletMapEntry {
return TripletMapEntry{
Hash::get_file_hash(VCPKG_LINE_INFO, fs, triplet_file_path, Hash::Algorithm::Sha256)};
});
auto&& triplet_entry = get_triplet_cache(fs, triplet_file_path);
return triplet_entry.compiler_hashes.get_lazy(toolchain_hash, [&]() -> std::string {
if (m_compiler_tracking)
{
auto& compiler_info = triplet_entry.compiler_info.get_lazy(toolchain_hash, [&]() -> CompilerInfo {
if (m_compiler_tracking)
{
return load_compiler_info(paths, abi_info);
}
else
{
return CompilerInfo{};
}
});
if (m_compiler_tracking && !abi_info.pre_build_info->disable_compiler_tracking)
{
return triplet_entry.triplet_infos.get_lazy(toolchain_hash, [&]() -> std::string {
auto& compiler_info = get_compiler_info(paths, abi_info);
return Strings::concat(triplet_entry.hash, '-', toolchain_hash, '-', compiler_info.hash);
}
else
{
return triplet_entry.hash + "-" + toolchain_hash;
}
});
});
}
else
{
return triplet_entry.triplet_infos_without_compiler.get_lazy(toolchain_hash, [&]() -> std::string {
return Strings::concat(triplet_entry.hash, '-', toolchain_hash);
});
}
}
vcpkg::Command make_build_env_cmd(const PreBuildInfo& pre_build_info,
@ -1400,6 +1405,28 @@ namespace vcpkg::Build
return inner_create_buildinfo(*pghs.get());
}
static ExpectedS<bool> from_cmake_bool(StringView value, StringView name)
{
if (value == "1" || Strings::case_insensitive_ascii_equals(value, "on") ||
Strings::case_insensitive_ascii_equals(value, "true"))
{
return true;
}
else if (value == "0" || Strings::case_insensitive_ascii_equals(value, "off") ||
Strings::case_insensitive_ascii_equals(value, "false"))
{
return false;
}
else
{
return Strings::concat("Error: Unknown boolean setting for ",
name,
": \"",
value,
"\". Valid settings are '', '1', '0', 'ON', 'OFF', 'TRUE', and 'FALSE'.");
}
}
PreBuildInfo::PreBuildInfo(const VcpkgPaths& paths,
Triplet triplet,
const std::unordered_map<std::string, std::string>& cmakevars)
@ -1418,6 +1445,7 @@ namespace vcpkg::Build
ENV_PASSTHROUGH_UNTRACKED,
PUBLIC_ABI_OVERRIDE,
LOAD_VCVARS_ENV,
DISABLE_COMPILER_TRACKING,
};
static const std::vector<std::pair<std::string, VcpkgTripletVar>> VCPKG_OPTIONS = {
@ -1431,7 +1459,9 @@ namespace vcpkg::Build
{"VCPKG_ENV_PASSTHROUGH", VcpkgTripletVar::ENV_PASSTHROUGH},
{"VCPKG_ENV_PASSTHROUGH_UNTRACKED", VcpkgTripletVar::ENV_PASSTHROUGH_UNTRACKED},
{"VCPKG_PUBLIC_ABI_OVERRIDE", VcpkgTripletVar::PUBLIC_ABI_OVERRIDE},
// Note: this value must come after VCPKG_CHAINLOAD_TOOLCHAIN_FILE because its default depends upon it.
{"VCPKG_LOAD_VCVARS_ENV", VcpkgTripletVar::LOAD_VCVARS_ENV},
{"VCPKG_DISABLE_COMPILER_TRACKING", VcpkgTripletVar::DISABLE_COMPILER_TRACKING},
};
std::string empty;
@ -1489,25 +1519,22 @@ namespace vcpkg::Build
case VcpkgTripletVar::LOAD_VCVARS_ENV:
if (variable_value.empty())
{
load_vcvars_env = true;
if (external_toolchain_file) load_vcvars_env = false;
}
else if (variable_value == "1" || Strings::case_insensitive_ascii_equals(variable_value, "on") ||
Strings::case_insensitive_ascii_equals(variable_value, "true"))
{
load_vcvars_env = true;
}
else if (variable_value == "0" || Strings::case_insensitive_ascii_equals(variable_value, "off") ||
Strings::case_insensitive_ascii_equals(variable_value, "false"))
{
load_vcvars_env = false;
load_vcvars_env = !external_toolchain_file.has_value();
}
else
{
Checks::exit_with_message(VCPKG_LINE_INFO,
"Unknown boolean setting for VCPKG_LOAD_VCVARS_ENV: %s. Valid "
"settings are '', '1', '0', 'ON', 'OFF', 'TRUE', and 'FALSE'.",
variable_value);
load_vcvars_env = from_cmake_bool(variable_value, kv.first).value_or_exit(VCPKG_LINE_INFO);
}
break;
case VcpkgTripletVar::DISABLE_COMPILER_TRACKING:
if (variable_value.empty())
{
disable_compiler_tracking = false;
}
else
{
disable_compiler_tracking =
from_cmake_bool(variable_value, kv.first).value_or_exit(VCPKG_LINE_INFO);
}
break;
}

Просмотреть файл

@ -62,8 +62,6 @@ namespace vcpkg::CMakeVars
std::vector<std::vector<std::pair<std::string, std::string>>>& vars) const;
const VcpkgPaths& paths;
const Path get_tags_path = paths.scripts / "vcpkg_get_tags.cmake";
const Path get_dep_info_path = paths.scripts / "vcpkg_get_dep_info.cmake";
mutable std::unordered_map<PackageSpec, std::unordered_map<std::string, std::string>> dep_resolution_vars;
mutable std::unordered_map<PackageSpec, std::unordered_map<std::string, std::string>> tag_vars;
mutable std::unordered_map<Triplet, std::unordered_map<std::string, std::string>> generic_triplet_vars;
@ -121,7 +119,42 @@ endmacro()
}
std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets);
Strings::append(extraction_file, "\ninclude(\"" + get_tags_path.generic_u8string() + "\")\n\n");
Strings::append(extraction_file, R"(
function(vcpkg_get_tags PORT FEATURES VCPKG_TRIPLET_ID VCPKG_ABI_SETTINGS_FILE)
message("d8187afd-ea4a-4fc3-9aa4-a6782e1ed9af")
vcpkg_triplet_file(${VCPKG_TRIPLET_ID})
# GUID used as a flag - "cut here line"
message("c35112b6-d1ba-415b-aa5d-81de856ef8eb
VCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}
VCPKG_CMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}
VCPKG_CMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}
VCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}
VCPKG_VISUAL_STUDIO_PATH=${VCPKG_VISUAL_STUDIO_PATH}
VCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}
VCPKG_BUILD_TYPE=${VCPKG_BUILD_TYPE}
VCPKG_LIBRARY_LINKAGE=${VCPKG_LIBRARY_LINKAGE}
VCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}
e1e74b5c-18cb-4474-a6bd-5c1c8bc81f3f")
# Just to enforce the user didn't set it in the triplet file
if (DEFINED VCPKG_PUBLIC_ABI_OVERRIDE)
set(VCPKG_PUBLIC_ABI_OVERRIDE)
message(WARNING "VCPKG_PUBLIC_ABI_OVERRIDE set in the triplet will be ignored.")
endif()
include("${VCPKG_ABI_SETTINGS_FILE}" OPTIONAL)
message("c35112b6-d1ba-415b-aa5d-81de856ef8eb
VCPKG_PUBLIC_ABI_OVERRIDE=${VCPKG_PUBLIC_ABI_OVERRIDE}
VCPKG_ENV_PASSTHROUGH=${VCPKG_ENV_PASSTHROUGH}
VCPKG_ENV_PASSTHROUGH_UNTRACKED=${VCPKG_ENV_PASSTHROUGH_UNTRACKED}
VCPKG_LOAD_VCVARS_ENV=${VCPKG_LOAD_VCVARS_ENV}
VCPKG_DISABLE_COMPILER_TRACKING=${VCPKG_DISABLE_COMPILER_TRACKING}
e1e74b5c-18cb-4474-a6bd-5c1c8bc81f3f
8c504940-be29-4cba-9f8f-6cd83e9d87b7")
endfunction()
)");
for (const auto& spec_abi_setting : spec_abi_settings)
{
@ -158,7 +191,28 @@ endmacro()
std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets);
Strings::append(extraction_file, "\ninclude(\"" + get_dep_info_path.generic_u8string() + "\")\n\n");
Strings::append(extraction_file, R"(
function(vcpkg_get_dep_info PORT VCPKG_TRIPLET_ID)
message("d8187afd-ea4a-4fc3-9aa4-a6782e1ed9af")
vcpkg_triplet_file(${VCPKG_TRIPLET_ID})
# GUID used as a flag - "cut here line"
message("c35112b6-d1ba-415b-aa5d-81de856ef8eb
VCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}
VCPKG_CMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}
VCPKG_CMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}
VCPKG_LIBRARY_LINKAGE=${VCPKG_LIBRARY_LINKAGE}
VCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}
VCPKG_DEP_INFO_OVERRIDE_VARS=${VCPKG_DEP_INFO_OVERRIDE_VARS}
CMAKE_HOST_SYSTEM_NAME=${CMAKE_HOST_SYSTEM_NAME}
CMAKE_HOST_SYSTEM_PROCESSOR=${CMAKE_HOST_SYSTEM_PROCESSOR}
CMAKE_HOST_SYSTEM_VERSION=${CMAKE_HOST_SYSTEM_VERSION}
CMAKE_HOST_SYSTEM=${CMAKE_HOST_SYSTEM}
e1e74b5c-18cb-4474-a6bd-5c1c8bc81f3f
8c504940-be29-4cba-9f8f-6cd83e9d87b7")
endfunction()
)");
for (const PackageSpec& spec : specs)
{