1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 22:37:30 +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,
"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
}

View File

@@ -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) {

View File

@@ -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