Merge topic 'state-project-kind'

6c440ea3ce cmake: Model normal and try-compile project kinds explicitly
2065bd73cb cmState: Construct with mode

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6337
This commit is contained in:
Brad King
2021-07-13 12:23:13 +00:00
committed by Kitware Robot
7 changed files with 42 additions and 51 deletions

View File

@@ -2165,7 +2165,7 @@ bool cmCTestTestHandler::SetTestsProperties(
// Ensure we have complete triples otherwise the data is corrupt.
if (triples.size() % 3 == 0) {
cmState state;
cmState state(cmState::Unknown);
rt.Backtrace = cmListFileBacktrace(state.CreateBaseSnapshot());
// the first entry represents the top of the trace so we need to

View File

@@ -548,7 +548,7 @@ void cmListFileBacktrace::PrintTitle(std::ostream& out) const
}
cmListFileContext lfc = this->TopEntry->Context;
cmStateSnapshot bottom = this->GetBottom();
if (!bottom.GetState()->GetIsInTryCompile()) {
if (bottom.GetState()->GetProjectKind() == cmState::ProjectKind::Normal) {
lfc.FilePath = cmSystemTools::RelativeIfUnder(
bottom.GetState()->GetSourceDirectory(), lfc.FilePath);
}
@@ -579,7 +579,7 @@ void cmListFileBacktrace::PrintCallStack(std::ostream& out) const
out << "Call Stack (most recent call first):\n";
}
cmListFileContext lfc = cur->Context;
if (!bottom.GetState()->GetIsInTryCompile()) {
if (bottom.GetState()->GetProjectKind() == cmState::ProjectKind::Normal) {
lfc.FilePath = cmSystemTools::RelativeIfUnder(
bottom.GetState()->GetSourceDirectory(), lfc.FilePath);
}

View File

@@ -3567,8 +3567,8 @@ int cmMakefile::TryCompile(const std::string& srcdir,
// make sure the same generator is used
// use this program as the cmake to be run, it should not
// be run that way but the cmake object requires a vailid path
cmake cm(cmake::RoleProject, cmState::Project);
cm.SetIsInTryCompile(true);
cmake cm(cmake::RoleProject, cmState::Project,
cmState::ProjectKind::TryCompile);
auto gg = cm.CreateGlobalGenerator(this->GetGlobalGenerator()->GetName());
if (!gg) {
this->IssueMessage(MessageType::INTERNAL_ERROR,

View File

@@ -26,7 +26,9 @@
#include "cmSystemTools.h"
#include "cmake.h"
cmState::cmState()
cmState::cmState(Mode mode, ProjectKind projectKind)
: StateMode(mode)
, StateProjectKind(projectKind)
{
this->CacheManager = cm::make_unique<cmCacheManager>();
this->GlobVerificationManager = cm::make_unique<cmGlobVerificationManager>();
@@ -381,16 +383,6 @@ void cmState::ClearEnabledLanguages()
this->EnabledLanguages.clear();
}
bool cmState::GetIsInTryCompile() const
{
return this->IsInTryCompile;
}
void cmState::SetIsInTryCompile(bool b)
{
this->IsInTryCompile = b;
}
bool cmState::GetIsGeneratorMultiConfig() const
{
return this->IsGeneratorMultiConfig;
@@ -593,8 +585,9 @@ cmProp cmState::GetGlobalProperty(const std::string& prop)
std::vector<std::string> commands = this->GetCommandNames();
this->SetGlobalProperty("COMMANDS", cmJoin(commands, ";").c_str());
} else if (prop == "IN_TRY_COMPILE") {
this->SetGlobalProperty("IN_TRY_COMPILE",
this->IsInTryCompile ? "1" : "0");
this->SetGlobalProperty(
"IN_TRY_COMPILE",
this->StateProjectKind == ProjectKind::TryCompile ? "1" : "0");
} else if (prop == "GENERATOR_IS_MULTI_CONFIG") {
this->SetGlobalProperty("GENERATOR_IS_MULTI_CONFIG",
this->IsGeneratorMultiConfig ? "1" : "0");
@@ -771,17 +764,12 @@ unsigned int cmState::GetCacheMinorVersion() const
cmState::Mode cmState::GetMode() const
{
return this->CurrentMode;
return this->StateMode;
}
std::string cmState::GetModeString() const
{
return ModeToString(this->CurrentMode);
}
void cmState::SetMode(cmState::Mode mode)
{
this->CurrentMode = mode;
return ModeToString(this->StateMode);
}
std::string cmState::ModeToString(cmState::Mode mode)
@@ -803,6 +791,11 @@ std::string cmState::ModeToString(cmState::Mode mode)
return "UNKNOWN";
}
cmState::ProjectKind cmState::GetProjectKind() const
{
return this->StateProjectKind;
}
std::string const& cmState::GetBinaryDirectory() const
{
return this->BinaryDirectory;

View File

@@ -35,12 +35,6 @@ class cmState
friend class cmStateSnapshot;
public:
cmState();
~cmState();
cmState(const cmState&) = delete;
cmState& operator=(const cmState&) = delete;
enum Mode
{
Unknown,
@@ -51,6 +45,18 @@ public:
CPack,
};
enum class ProjectKind
{
Normal,
TryCompile,
};
cmState(Mode mode, ProjectKind projectKind = ProjectKind::Normal);
~cmState();
cmState(const cmState&) = delete;
cmState& operator=(const cmState&) = delete;
static const std::string& GetTargetTypeName(
cmStateEnums::TargetType targetType);
@@ -141,9 +147,6 @@ public:
void SetEnabledLanguages(std::vector<std::string> const& langs);
void ClearEnabledLanguages();
bool GetIsInTryCompile() const;
void SetIsInTryCompile(bool b);
bool GetIsGeneratorMultiConfig() const;
void SetIsGeneratorMultiConfig(bool b);
@@ -207,10 +210,11 @@ public:
Mode GetMode() const;
std::string GetModeString() const;
void SetMode(Mode mode);
static std::string ModeToString(Mode mode);
ProjectKind GetProjectKind() const;
private:
friend class cmake;
void AddCacheEntry(const std::string& key, const char* value,
@@ -248,7 +252,6 @@ private:
std::string SourceDirectory;
std::string BinaryDirectory;
bool IsInTryCompile = false;
bool IsGeneratorMultiConfig = false;
bool WindowsShell = false;
bool WindowsVSIDE = false;
@@ -258,5 +261,6 @@ private:
bool NMake = false;
bool MSYSShell = false;
bool NinjaMulti = false;
Mode CurrentMode = Unknown;
Mode StateMode = Unknown;
ProjectKind StateProjectKind = ProjectKind::Normal;
};

View File

@@ -156,17 +156,16 @@ static void cmWarnUnusedCliWarning(const std::string& variable, int /*unused*/,
}
#endif
cmake::cmake(Role role, cmState::Mode mode)
cmake::cmake(Role role, cmState::Mode mode, cmState::ProjectKind projectKind)
: CMakeWorkingDirectory(cmSystemTools::GetCurrentWorkingDirectory())
, FileTimeCache(cm::make_unique<cmFileTimeCache>())
#ifndef CMAKE_BOOTSTRAP
, VariableWatch(cm::make_unique<cmVariableWatch>())
#endif
, State(cm::make_unique<cmState>())
, State(cm::make_unique<cmState>(mode, projectKind))
, Messenger(cm::make_unique<cmMessenger>())
{
this->TraceFile.close();
this->State->SetMode(mode);
this->CurrentSnapshot = this->State->CreateBaseSnapshot();
#ifdef __APPLE__
@@ -1843,7 +1842,7 @@ int cmake::HandleDeleteCacheVariables(const std::string& var)
std::vector<std::string> argsSplit = cmExpandedList(var, true);
// erase the property to avoid infinite recursion
this->State->SetGlobalProperty("__CMAKE_DELETE_CACHE_CHANGE_VARS_", "");
if (this->State->GetIsInTryCompile()) {
if (this->GetIsInTryCompile()) {
return 0;
}
std::vector<SaveCacheEntry> saved;
@@ -2111,7 +2110,7 @@ int cmake::ActualConfigure()
// reset any system configuration information, except for when we are
// InTryCompile. With TryCompile the system info is taken from the parent's
// info to save time
if (!this->State->GetIsInTryCompile()) {
if (!this->GetIsInTryCompile()) {
this->GlobalGenerator->ClearEnabledLanguages();
this->TruncateOutputLog("CMakeOutput.log");
@@ -2622,19 +2621,14 @@ void cmake::SetProgressCallback(ProgressCallbackType f)
void cmake::UpdateProgress(const std::string& msg, float prog)
{
if (this->ProgressCallback && !this->State->GetIsInTryCompile()) {
if (this->ProgressCallback && !this->GetIsInTryCompile()) {
this->ProgressCallback(msg, prog);
}
}
bool cmake::GetIsInTryCompile() const
{
return this->State->GetIsInTryCompile();
}
void cmake::SetIsInTryCompile(bool b)
{
this->State->SetIsInTryCompile(b);
return this->State->GetProjectKind() == cmState::ProjectKind::TryCompile;
}
void cmake::AppendGlobalGeneratorsDocumentation(

View File

@@ -168,7 +168,8 @@ public:
static const int DEFAULT_BUILD_PARALLEL_LEVEL = 0;
/// Default constructor
cmake(Role role, cmState::Mode mode);
cmake(Role role, cmState::Mode mode,
cmState::ProjectKind projectKind = cmState::ProjectKind::Normal);
/// Destructor
~cmake();
@@ -356,7 +357,6 @@ public:
//! Is this cmake running as a result of a TRY_COMPILE command
bool GetIsInTryCompile() const;
void SetIsInTryCompile(bool b);
#ifndef CMAKE_BOOTSTRAP
void SetWarningFromPreset(const std::string& name,