summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorArctic Lampyrid <ArcticLampyrid@outlook.com>2024-03-19 03:32:22 (GMT)
committerArctic Lampyrid <ArcticLampyrid@outlook.com>2024-03-19 18:30:53 (GMT)
commitf578515d0298d73552c5c2c01a8a4195862cde60 (patch)
tree0416ee0be88c6d0261bf80fe6b4d6ffad66318a3 /Source
parentc61bbf48c5593633c46938545085d991cb953a69 (diff)
downloadCMake-f578515d0298d73552c5c2c01a8a4195862cde60.zip
CMake-f578515d0298d73552c5c2c01a8a4195862cde60.tar.gz
CMake-f578515d0298d73552c5c2c01a8a4195862cde60.tar.bz2
cmGlobCacheEntry: Add helper to carry CONFIGURE_DEPENDS glob cache arguments
Diffstat (limited to 'Source')
-rw-r--r--Source/cmFileAPICMakeFiles.cxx2
-rw-r--r--Source/cmFileCommand.cxx14
-rw-r--r--Source/cmGlobCacheEntry.h30
-rw-r--r--Source/cmGlobVerificationManager.cxx14
-rw-r--r--Source/cmGlobVerificationManager.h6
-rw-r--r--Source/cmState.cxx15
-rw-r--r--Source/cmState.h6
-rw-r--r--Source/cmake.cxx11
-rw-r--r--Source/cmake.h6
9 files changed, 66 insertions, 38 deletions
diff --git a/Source/cmFileAPICMakeFiles.cxx b/Source/cmFileAPICMakeFiles.cxx
index e208ca8..b62fe04 100644
--- a/Source/cmFileAPICMakeFiles.cxx
+++ b/Source/cmFileAPICMakeFiles.cxx
@@ -4,11 +4,13 @@
#include <memory>
#include <string>
+#include <utility>
#include <vector>
#include <cm3p/json/value.h>
#include "cmFileAPI.h"
+#include "cmGlobCacheEntry.h"
#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
#include "cmMakefile.h"
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index a0282f6..115c332 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -41,6 +41,7 @@
#include "cmFileTimes.h"
#include "cmGeneratedFileStream.h"
#include "cmGeneratorExpression.h"
+#include "cmGlobCacheEntry.h"
#include "cmGlobalGenerator.h"
#include "cmHexFileConverter.h"
#include "cmList.h"
@@ -810,11 +811,16 @@ bool HandleGlobImpl(std::vector<std::string> const& args, bool recurse,
std::sort(foundFiles.begin(), foundFiles.end());
foundFiles.erase(std::unique(foundFiles.begin(), foundFiles.end()),
foundFiles.end());
- cm->AddGlobCacheEntry(
- recurse, (recurse ? g.GetRecurseListDirs() : g.GetListDirs()),
+ auto entry = cmGlobCacheEntry{
+ recurse,
+ (recurse ? g.GetRecurseListDirs() : g.GetListDirs()),
(recurse ? g.GetRecurseThroughSymlinks() : false),
- (g.GetRelative() ? g.GetRelative() : ""), expr, foundFiles, variable,
- status.GetMakefile().GetBacktrace());
+ (g.GetRelative() ? g.GetRelative() : ""),
+ expr,
+ foundFiles
+ };
+ cm->AddGlobCacheEntry(entry, variable,
+ status.GetMakefile().GetBacktrace());
} else {
warnConfigureLate = true;
}
diff --git a/Source/cmGlobCacheEntry.h b/Source/cmGlobCacheEntry.h
new file mode 100644
index 0000000..acc410d
--- /dev/null
+++ b/Source/cmGlobCacheEntry.h
@@ -0,0 +1,30 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#pragma once
+
+#include "cmConfigure.h" // IWYU pragma: keep
+
+#include <string>
+#include <vector>
+
+struct cmGlobCacheEntry
+{
+ const bool Recurse;
+ const bool ListDirectories;
+ const bool FollowSymlinks;
+ const std::string Relative;
+ const std::string Expression;
+ std::vector<std::string> Files;
+
+ cmGlobCacheEntry(bool recurse, bool listDirectories, bool followSymlinks,
+ std::string relative, std::string expression,
+ std::vector<std::string> files)
+ : Recurse(recurse)
+ , ListDirectories(listDirectories)
+ , FollowSymlinks(followSymlinks)
+ , Relative(std::move(relative))
+ , Expression(std::move(expression))
+ , Files(std::move(files))
+ {
+ }
+};
diff --git a/Source/cmGlobVerificationManager.cxx b/Source/cmGlobVerificationManager.cxx
index 89c5b01..63c9baa 100644
--- a/Source/cmGlobVerificationManager.cxx
+++ b/Source/cmGlobVerificationManager.cxx
@@ -7,6 +7,7 @@
#include "cmsys/FStream.hxx"
#include "cmGeneratedFileStream.h"
+#include "cmGlobCacheEntry.h"
#include "cmListFileCache.h"
#include "cmMessageType.h"
#include "cmMessenger.h"
@@ -145,19 +146,18 @@ void cmGlobVerificationManager::CacheEntryKey::PrintGlobCommand(
}
void cmGlobVerificationManager::AddCacheEntry(
- const bool recurse, const bool listDirectories, const bool followSymlinks,
- const std::string& relative, const std::string& expression,
- const std::vector<std::string>& files, const std::string& variable,
+ const cmGlobCacheEntry& entry, const std::string& variable,
const cmListFileBacktrace& backtrace, cmMessenger* messenger)
{
- CacheEntryKey key = CacheEntryKey(recurse, listDirectories, followSymlinks,
- relative, expression);
+ CacheEntryKey key =
+ CacheEntryKey(entry.Recurse, entry.ListDirectories, entry.FollowSymlinks,
+ entry.Relative, entry.Expression);
CacheEntryValue& value = this->Cache[key];
if (!value.Initialized) {
- value.Files = files;
+ value.Files = entry.Files;
value.Initialized = true;
value.Backtraces.emplace_back(variable, backtrace);
- } else if (value.Initialized && value.Files != files) {
+ } else if (value.Initialized && value.Files != entry.Files) {
std::ostringstream message;
message << std::boolalpha;
message << "The glob expression\n ";
diff --git a/Source/cmGlobVerificationManager.h b/Source/cmGlobVerificationManager.h
index 52d71aa..b7d8168 100644
--- a/Source/cmGlobVerificationManager.h
+++ b/Source/cmGlobVerificationManager.h
@@ -13,6 +13,7 @@
#include "cmListFileCache.h"
class cmMessenger;
+struct cmGlobCacheEntry;
/** \class cmGlobVerificationManager
* \brief Class for expressing build-time dependencies on glob expressions.
@@ -28,10 +29,7 @@ protected:
bool SaveVerificationScript(const std::string& path, cmMessenger* messenger);
//! Add an entry into the glob cache
- void AddCacheEntry(bool recurse, bool listDirectories, bool followSymlinks,
- const std::string& relative,
- const std::string& expression,
- const std::vector<std::string>& files,
+ void AddCacheEntry(const cmGlobCacheEntry& entry,
const std::string& variable,
const cmListFileBacktrace& bt, cmMessenger* messenger);
diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index d104268..8c881c5 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -16,6 +16,7 @@
#include "cmCommand.h"
#include "cmDefinitions.h"
#include "cmExecutionStatus.h"
+#include "cmGlobCacheEntry.h"
#include "cmGlobVerificationManager.h"
#include "cmList.h"
#include "cmListFileCache.h"
@@ -238,15 +239,13 @@ bool cmState::SaveVerificationScript(const std::string& path,
messenger);
}
-void cmState::AddGlobCacheEntry(
- bool recurse, bool listDirectories, bool followSymlinks,
- const std::string& relative, const std::string& expression,
- const std::vector<std::string>& files, const std::string& variable,
- cmListFileBacktrace const& backtrace, cmMessenger* messenger)
+void cmState::AddGlobCacheEntry(const cmGlobCacheEntry& entry,
+ const std::string& variable,
+ cmListFileBacktrace const& backtrace,
+ cmMessenger* messenger)
{
- this->GlobVerificationManager->AddCacheEntry(
- recurse, listDirectories, followSymlinks, relative, expression, files,
- variable, backtrace, messenger);
+ this->GlobVerificationManager->AddCacheEntry(entry, variable, backtrace,
+ messenger);
}
void cmState::RemoveCacheEntry(std::string const& key)
diff --git a/Source/cmState.h b/Source/cmState.h
index ae0d52b..3837556 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -34,6 +34,7 @@ class cmStateSnapshot;
class cmMessenger;
class cmExecutionStatus;
class cmListFileBacktrace;
+struct cmGlobCacheEntry;
struct cmListFileArgument;
template <typename T>
@@ -263,10 +264,7 @@ private:
std::string const& GetGlobVerifyScript() const;
std::string const& GetGlobVerifyStamp() const;
bool SaveVerificationScript(const std::string& path, cmMessenger* messenger);
- void AddGlobCacheEntry(bool recurse, bool listDirectories,
- bool followSymlinks, const std::string& relative,
- const std::string& expression,
- const std::vector<std::string>& files,
+ void AddGlobCacheEntry(const cmGlobCacheEntry& entry,
const std::string& variable,
cmListFileBacktrace const& bt,
cmMessenger* messenger);
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 88fac8d..43a0b06 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -48,6 +48,7 @@
#include "cmExternalMakefileProjectGenerator.h"
#include "cmFileTimeCache.h"
#include "cmGeneratorTarget.h"
+#include "cmGlobCacheEntry.h"
#include "cmGlobalGenerator.h"
#include "cmGlobalGeneratorFactory.h"
#include "cmLinkLineComputer.h"
@@ -2949,16 +2950,12 @@ std::string const& cmake::GetGlobVerifyStamp() const
return this->State->GetGlobVerifyStamp();
}
-void cmake::AddGlobCacheEntry(bool recurse, bool listDirectories,
- bool followSymlinks, const std::string& relative,
- const std::string& expression,
- const std::vector<std::string>& files,
+void cmake::AddGlobCacheEntry(const cmGlobCacheEntry& entry,
const std::string& variable,
cmListFileBacktrace const& backtrace)
{
- this->State->AddGlobCacheEntry(recurse, listDirectories, followSymlinks,
- relative, expression, files, variable,
- backtrace, this->Messenger.get());
+ this->State->AddGlobCacheEntry(entry, variable, backtrace,
+ this->Messenger.get());
}
std::vector<std::string> cmake::GetAllExtensions() const
diff --git a/Source/cmake.h b/Source/cmake.h
index ccf5154..3647a11 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -53,6 +53,7 @@ class cmMakefile;
class cmMessenger;
class cmVariableWatch;
struct cmBuildOptions;
+struct cmGlobCacheEntry;
/** \brief Represents a cmake invocation.
*
@@ -351,10 +352,7 @@ public:
bool DoWriteGlobVerifyTarget() const;
std::string const& GetGlobVerifyScript() const;
std::string const& GetGlobVerifyStamp() const;
- void AddGlobCacheEntry(bool recurse, bool listDirectories,
- bool followSymlinks, const std::string& relative,
- const std::string& expression,
- const std::vector<std::string>& files,
+ void AddGlobCacheEntry(const cmGlobCacheEntry& entry,
const std::string& variable,
cmListFileBacktrace const& bt);