1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-17 15:32:10 +08:00

cmCommand refactor: cmVariableRequiresCommand

This commit is contained in:
Gabor Bencze
2019-08-21 20:56:02 +02:00
committed by Brad King
parent 185fa2c4f3
commit ae51aa32f0
3 changed files with 13 additions and 27 deletions

View File

@@ -326,8 +326,7 @@ void GetProjectCommands(cmState* state)
"utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034, "utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,
"The utility_source command should not be called; see CMP0034."); "The utility_source command should not be called; see CMP0034.");
state->AddDisallowedCommand( state->AddDisallowedCommand(
"variable_requires", cm::make_unique<cmVariableRequiresCommand>(), "variable_requires", cmVariableRequiresCommand, cmPolicies::CMP0035,
cmPolicies::CMP0035,
"The variable_requires command should not be called; see CMP0035."); "The variable_requires command should not be called; see CMP0035.");
#endif #endif
} }

View File

@@ -2,33 +2,32 @@
file Copyright.txt or https://cmake.org/licensing for details. */ file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmVariableRequiresCommand.h" #include "cmVariableRequiresCommand.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmState.h" #include "cmState.h"
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
class cmExecutionStatus;
// cmLibraryCommand // cmLibraryCommand
bool cmVariableRequiresCommand::InitialPass( bool cmVariableRequiresCommand(std::vector<std::string> const& args,
std::vector<std::string> const& args, cmExecutionStatus&) cmExecutionStatus& status)
{ {
if (args.size() < 3) { if (args.size() < 3) {
this->SetError("called with incorrect number of arguments"); status.SetError("called with incorrect number of arguments");
return false; return false;
} }
std::string const& testVariable = args[0]; std::string const& testVariable = args[0];
if (!this->Makefile->IsOn(testVariable)) { if (!status.GetMakefile().IsOn(testVariable)) {
return true; return true;
} }
std::string const& resultVariable = args[1]; std::string const& resultVariable = args[1];
bool requirementsMet = true; bool requirementsMet = true;
std::string notSet; std::string notSet;
bool hasAdvanced = false; bool hasAdvanced = false;
cmState* state = this->Makefile->GetState(); cmState* state = status.GetMakefile().GetState();
for (unsigned int i = 2; i < args.size(); ++i) { for (unsigned int i = 2; i < args.size(); ++i) {
if (!this->Makefile->IsOn(args[i])) { if (!status.GetMakefile().IsOn(args[i])) {
requirementsMet = false; requirementsMet = false;
notSet += args[i]; notSet += args[i];
notSet += "\n"; 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 unset, then set it to requirementsMet
// if reqVar is set to true, but requirementsMet is false , then // if reqVar is set to true, but requirementsMet is false , then
// set reqVar to false. // set reqVar to false.
if (!reqVar || (!requirementsMet && this->Makefile->IsOn(reqVar))) { if (!reqVar || (!requirementsMet && status.GetMakefile().IsOn(reqVar))) {
this->Makefile->AddDefinitionBool(resultVariable, requirementsMet); status.GetMakefile().AddDefinitionBool(resultVariable, requirementsMet);
} }
if (!requirementsMet) { if (!requirementsMet) {

View File

@@ -8,21 +8,9 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "cm_memory.hxx"
#include "cmCommand.h"
class cmExecutionStatus; class cmExecutionStatus;
class cmVariableRequiresCommand : public cmCommand bool cmVariableRequiresCommand(std::vector<std::string> const& args,
{ cmExecutionStatus& status);
public:
std::unique_ptr<cmCommand> Clone() override
{
return cm::make_unique<cmVariableRequiresCommand>();
}
bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override;
};
#endif #endif