diff --git a/include/vcpkg/build.h b/include/vcpkg/build.h index feefb1dacc..2aa9883df4 100644 --- a/include/vcpkg/build.h +++ b/include/vcpkg/build.h @@ -18,8 +18,8 @@ #include #include -#include -#include +#include +#include #include namespace vcpkg @@ -259,6 +259,8 @@ namespace vcpkg Optional public_abi_override; std::vector passthrough_env_vars; std::vector passthrough_env_vars_tracked; + std::unordered_set ignored_abi_keys; + std::unordered_map additional_abi_entries; Path toolchain_file() const; bool using_vcvars() const; diff --git a/src/vcpkg/build.cpp b/src/vcpkg/build.cpp index 96c0568959..a99294b660 100644 --- a/src/vcpkg/build.cpp +++ b/src/vcpkg/build.cpp @@ -1162,6 +1162,14 @@ namespace vcpkg abi_tag_entries.emplace_back("features", Strings::join(";", sorted_feature_list)); + abi_tag_entries = Util::filter(abi_tag_entries, [&](const AbiEntry& p) { + return !Util::Sets::contains(abi_info.pre_build_info->ignored_abi_keys, p.key); + }); + for (auto&& entry : abi_info.pre_build_info->additional_abi_entries) + { + abi_tag_entries.emplace_back(entry.first, entry.second); + } + Util::sort(abi_tag_entries); const std::string full_abi_info = @@ -1639,6 +1647,8 @@ namespace vcpkg PUBLIC_ABI_OVERRIDE, LOAD_VCVARS_ENV, DISABLE_COMPILER_TRACKING, + IGNORED_ABI_KEYS, + ADDITIONAL_ABI_ENTRIES, }; static const std::vector> VCPKG_OPTIONS = { @@ -1656,6 +1666,8 @@ namespace vcpkg // 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}, + {"VCPKG_IGNORED_ABI_KEYS", VcpkgTripletVar::IGNORED_ABI_KEYS}, + {"VCPKG_ADDITIONAL_ABI_ENTRIES", VcpkgTripletVar::ADDITIONAL_ABI_ENTRIES}, }; std::string empty; @@ -1732,6 +1744,21 @@ namespace vcpkg from_cmake_bool(variable_value, kv.first).value_or_exit(VCPKG_LINE_INFO); } break; + case VcpkgTripletVar::IGNORED_ABI_KEYS: + for (auto&& abi_key : Strings::split(variable_value, ';')) + ignored_abi_keys.emplace(std::move(abi_key)); + break; + case VcpkgTripletVar::ADDITIONAL_ABI_ENTRIES: + for (auto&& abi_entry_str : Strings::split(variable_value, ';')) + { + auto const sep_pos = abi_entry_str.find_first_of(' '); + if (sep_pos != std::string::npos) + { + additional_abi_entries.emplace(abi_entry_str.substr(0, sep_pos), + abi_entry_str.substr(sep_pos + 1)); + } + } + break; } } } diff --git a/src/vcpkg/cmakevars.cpp b/src/vcpkg/cmakevars.cpp index afc55c6c89..1ab8bb229d 100644 --- a/src/vcpkg/cmakevars.cpp +++ b/src/vcpkg/cmakevars.cpp @@ -165,6 +165,8 @@ 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} +VCPKG_IGNORED_ABI_KEYS=${VCPKG_IGNORED_ABI_KEYS} +VCPKG_ADDITIONAL_ABI_ENTRIES=${VCPKG_ADDITIONAL_ABI_ENTRIES} e1e74b5c-18cb-4474-a6bd-5c1c8bc81f3f 8c504940-be29-4cba-9f8f-6cd83e9d87b7") endfunction()