mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 14:08:35 +08:00
cmCommand refactor: cmVariableRequiresCommand
This commit is contained in:
@@ -326,8 +326,7 @@ void GetProjectCommands(cmState* state)
|
||||
"utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,
|
||||
"The utility_source command should not be called; see CMP0034.");
|
||||
state->AddDisallowedCommand(
|
||||
"variable_requires", cm::make_unique<cmVariableRequiresCommand>(),
|
||||
cmPolicies::CMP0035,
|
||||
"variable_requires", cmVariableRequiresCommand, cmPolicies::CMP0035,
|
||||
"The variable_requires command should not be called; see CMP0035.");
|
||||
#endif
|
||||
}
|
||||
|
@@ -2,33 +2,32 @@
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#include "cmVariableRequiresCommand.h"
|
||||
|
||||
#include "cmExecutionStatus.h"
|
||||
#include "cmMakefile.h"
|
||||
#include "cmState.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
|
||||
class cmExecutionStatus;
|
||||
|
||||
// cmLibraryCommand
|
||||
bool cmVariableRequiresCommand::InitialPass(
|
||||
std::vector<std::string> const& args, cmExecutionStatus&)
|
||||
bool cmVariableRequiresCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() < 3) {
|
||||
this->SetError("called with incorrect number of arguments");
|
||||
status.SetError("called with incorrect number of arguments");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string const& testVariable = args[0];
|
||||
if (!this->Makefile->IsOn(testVariable)) {
|
||||
if (!status.GetMakefile().IsOn(testVariable)) {
|
||||
return true;
|
||||
}
|
||||
std::string const& resultVariable = args[1];
|
||||
bool requirementsMet = true;
|
||||
std::string notSet;
|
||||
bool hasAdvanced = false;
|
||||
cmState* state = this->Makefile->GetState();
|
||||
cmState* state = status.GetMakefile().GetState();
|
||||
for (unsigned int i = 2; i < args.size(); ++i) {
|
||||
if (!this->Makefile->IsOn(args[i])) {
|
||||
if (!status.GetMakefile().IsOn(args[i])) {
|
||||
requirementsMet = false;
|
||||
notSet += args[i];
|
||||
notSet += "\n";
|
||||
@@ -38,12 +37,12 @@ bool cmVariableRequiresCommand::InitialPass(
|
||||
}
|
||||
}
|
||||
}
|
||||
const char* reqVar = this->Makefile->GetDefinition(resultVariable);
|
||||
const char* reqVar = status.GetMakefile().GetDefinition(resultVariable);
|
||||
// if reqVar is unset, then set it to requirementsMet
|
||||
// if reqVar is set to true, but requirementsMet is false , then
|
||||
// set reqVar to false.
|
||||
if (!reqVar || (!requirementsMet && this->Makefile->IsOn(reqVar))) {
|
||||
this->Makefile->AddDefinitionBool(resultVariable, requirementsMet);
|
||||
if (!reqVar || (!requirementsMet && status.GetMakefile().IsOn(reqVar))) {
|
||||
status.GetMakefile().AddDefinitionBool(resultVariable, requirementsMet);
|
||||
}
|
||||
|
||||
if (!requirementsMet) {
|
||||
|
@@ -8,21 +8,9 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "cm_memory.hxx"
|
||||
|
||||
#include "cmCommand.h"
|
||||
|
||||
class cmExecutionStatus;
|
||||
|
||||
class cmVariableRequiresCommand : public cmCommand
|
||||
{
|
||||
public:
|
||||
std::unique_ptr<cmCommand> Clone() override
|
||||
{
|
||||
return cm::make_unique<cmVariableRequiresCommand>();
|
||||
}
|
||||
bool InitialPass(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status) override;
|
||||
};
|
||||
bool cmVariableRequiresCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user