SHA256
3
0
forked from pool/cmake
cmake/fix-avoid-file-static-init.patch

118 lines
4.2 KiB
Diff
Raw Normal View History

From 54510486bd2378cca7cbb8d4034174a29182ca24 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Thu, 20 Jan 2022 14:06:58 -0500
Subject: [PATCH] Avoid file-level static initialization with std::vector
Fixes: #23126
---
Source/cmFileAPIToolchains.cxx | 41 ++++++++++------------
Tests/CMakeLib/testCTestBinPacker.cxx | 5 ++-
Tests/CMakeLib/testCTestResourceGroups.cxx | 2 +-
3 files changed, 22 insertions(+), 26 deletions(-)
diff --git a/Source/cmFileAPIToolchains.cxx b/Source/cmFileAPIToolchains.cxx
index b3540c97b2..fe2972fabf 100644
--- a/Source/cmFileAPIToolchains.cxx
+++ b/Source/cmFileAPIToolchains.cxx
@@ -30,10 +30,6 @@ class Toolchains
cmFileAPI& FileAPI;
unsigned long Version;
- static const std::vector<ToolchainVariable> CompilerVariables;
- static const std::vector<ToolchainVariable> CompilerImplicitVariables;
- static const ToolchainVariable SourceFileExtensionsVariable;
-
Json::Value DumpToolchains();
Json::Value DumpToolchain(std::string const& lang);
Json::Value DumpToolchainVariables(
@@ -48,24 +44,6 @@ public:
Json::Value Dump();
};
-const std::vector<ToolchainVariable> Toolchains::CompilerVariables{
- { "path", "COMPILER", false },
- { "id", "COMPILER_ID", false },
- { "version", "COMPILER_VERSION", false },
- { "target", "COMPILER_TARGET", false },
-};
-
-const std::vector<ToolchainVariable> Toolchains::CompilerImplicitVariables{
- { "includeDirectories", "IMPLICIT_INCLUDE_DIRECTORIES", true },
- { "linkDirectories", "IMPLICIT_LINK_DIRECTORIES", true },
- { "linkFrameworkDirectories", "IMPLICIT_LINK_FRAMEWORK_DIRECTORIES", true },
- { "linkLibraries", "IMPLICIT_LINK_LIBRARIES", true },
-};
-
-const ToolchainVariable Toolchains::SourceFileExtensionsVariable{
- "sourceFileExtensions", "SOURCE_FILE_EXTENSIONS", true
-};
-
Toolchains::Toolchains(cmFileAPI& fileAPI, unsigned long version)
: FileAPI(fileAPI)
, Version(version)
@@ -94,6 +72,25 @@ Json::Value Toolchains::DumpToolchains()
Json::Value Toolchains::DumpToolchain(std::string const& lang)
{
+ static const std::vector<ToolchainVariable> CompilerVariables{
+ { "path", "COMPILER", false },
+ { "id", "COMPILER_ID", false },
+ { "version", "COMPILER_VERSION", false },
+ { "target", "COMPILER_TARGET", false },
+ };
+
+ static const std::vector<ToolchainVariable> CompilerImplicitVariables{
+ { "includeDirectories", "IMPLICIT_INCLUDE_DIRECTORIES", true },
+ { "linkDirectories", "IMPLICIT_LINK_DIRECTORIES", true },
+ { "linkFrameworkDirectories", "IMPLICIT_LINK_FRAMEWORK_DIRECTORIES",
+ true },
+ { "linkLibraries", "IMPLICIT_LINK_LIBRARIES", true },
+ };
+
+ static const ToolchainVariable SourceFileExtensionsVariable{
+ "sourceFileExtensions", "SOURCE_FILE_EXTENSIONS", true
+ };
+
const auto& mf =
this->FileAPI.GetCMakeInstance()->GetGlobalGenerator()->GetMakefiles()[0];
Json::Value toolchain = Json::objectValue;
diff --git a/Tests/CMakeLib/testCTestBinPacker.cxx b/Tests/CMakeLib/testCTestBinPacker.cxx
index abdbefb231..e419155665 100644
--- a/Tests/CMakeLib/testCTestBinPacker.cxx
+++ b/Tests/CMakeLib/testCTestBinPacker.cxx
@@ -16,8 +16,7 @@ struct ExpectedPackResult
std::vector<cmCTestBinPackerAllocation> ExpectedBlockAllocations;
};
-static const std::vector<ExpectedPackResult> expectedResults
-{
+static const ExpectedPackResult expectedResults[] = {
/* clang-format off */
{
{ 2, 2, 2, 2 },
@@ -215,7 +214,7 @@ struct AllocationComparison
bool Equal;
};
-static const std::vector<AllocationComparison> comparisons{
+static const AllocationComparison comparisons[] = {
/* clang-format off */
{ { 0, 1, "0" }, { 0, 1, "0" }, true },
{ { 0, 1, "0" }, { 1, 1, "0" }, false },
diff --git a/Tests/CMakeLib/testCTestResourceGroups.cxx b/Tests/CMakeLib/testCTestResourceGroups.cxx
index c3532a68d7..b764c860c5 100644
--- a/Tests/CMakeLib/testCTestResourceGroups.cxx
+++ b/Tests/CMakeLib/testCTestResourceGroups.cxx
@@ -15,7 +15,7 @@ struct ExpectedParseResult
ExpectedValue;
};
-static const std::vector<ExpectedParseResult> expectedResults{
+static const ExpectedParseResult expectedResults[] = {
/* clang-format off */
{ "threads:2", true, {
{ { "threads", 2, 1 } },
--
GitLab