From 5697bcced0a8fad1a59400d240c2defa0429ea1e Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Thu, 12 Mar 2026 10:22:10 +0100 Subject: [PATCH] BT<> and cmLocalGenerator: Add helpers functions * Template remove_BT<> to extract content from BT wrapper * cmLocalGenerator::AppendDefines which take std::set<> and std::vector> as arguments --- Source/cmListFileCache.h | 32 ++++++++++++++++++++++++++++++++ Source/cmLocalGenerator.cxx | 11 +++++++++++ Source/cmLocalGenerator.h | 2 ++ 3 files changed, 45 insertions(+) diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 29dba63de7..ca30279cc5 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -6,12 +6,14 @@ #include #include +#include #include #include #include #include #include +#include #include "cmList.h" #include "cmStack.h" @@ -206,6 +208,36 @@ public: std::ostream& operator<<(std::ostream& os, BT const& s); +namespace cm { +// Helpers for basic type retrieval +template +T remove_BT(BT const& bt) +{ + return bt.Value; +} + +template +std::vector remove_BT(std::vector> const& container) +{ + std::vector result; + for (auto const& entry : container) { + result.emplace_back(entry.Value); + } + + return result; +} +template +std::set remove_BT(std::set> const& container) +{ + std::set result; + for (auto const& entry : container) { + result.emplace(entry.Value); + } + + return result; +} +} + // Wrap type T as a value with potentially multiple backtraces. For purposes // of ordering and equality comparison, only the original value is used. The // backtrace is considered incidental. diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index d7a591c85b..205141e037 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -3914,6 +3914,17 @@ void cmLocalGenerator::AppendDefines(std::set& defines, } } +void cmLocalGenerator::AppendDefines( + std::set& defines, + std::vector> const& defines_vec) const +{ + std::set> tmp; + this->AppendDefines(tmp, defines_vec); + for (BT const& i : tmp) { + defines.emplace(i.Value); + } +} + void cmLocalGenerator::AppendDefines(std::set>& defines, std::string const& defines_list) const { diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index c7091578f7..77f1e30a0f 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -266,6 +266,8 @@ public: */ void AppendDefines(std::set& defines, std::string const& defines_list) const; + void AppendDefines(std::set& defines, + std::vector> const& defines_vec) const; void AppendDefines(std::set>& defines, std::string const& defines_list) const; void AppendDefines(std::set>& defines,