mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
cmCommand: Remove
Finally. All commands are immutable.
This commit is contained in:
@@ -510,8 +510,6 @@ add_library(
|
||||
cmake.cxx
|
||||
cmake.h
|
||||
|
||||
cmCommand.cxx
|
||||
cmCommand.h
|
||||
cmCommands.cxx
|
||||
cmCommands.h
|
||||
cmAddCompileDefinitionsCommand.cxx
|
||||
|
@@ -1,59 +0,0 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#include "cmCommand.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "cmExecutionStatus.h"
|
||||
#include "cmMakefile.h"
|
||||
|
||||
struct cmListFileArgument;
|
||||
|
||||
void cmCommand::SetExecutionStatus(cmExecutionStatus* status)
|
||||
{
|
||||
this->Status = status;
|
||||
this->Makefile = &status->GetMakefile();
|
||||
}
|
||||
|
||||
bool cmCommand::InvokeInitialPass(const std::vector<cmListFileArgument>& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
std::vector<std::string> expandedArguments;
|
||||
if (!this->Makefile->ExpandArguments(args, expandedArguments)) {
|
||||
// There was an error expanding arguments. It was already
|
||||
// reported, so we can skip this command without error.
|
||||
return true;
|
||||
}
|
||||
return this->InitialPass(expandedArguments, status);
|
||||
}
|
||||
|
||||
void cmCommand::SetError(const std::string& e)
|
||||
{
|
||||
this->Status->SetError(e);
|
||||
}
|
||||
|
||||
cmLegacyCommandWrapper::cmLegacyCommandWrapper(std::unique_ptr<cmCommand> cmd)
|
||||
: Command(std::move(cmd))
|
||||
{
|
||||
}
|
||||
|
||||
cmLegacyCommandWrapper::cmLegacyCommandWrapper(
|
||||
cmLegacyCommandWrapper const& other)
|
||||
: Command(other.Command->Clone())
|
||||
{
|
||||
}
|
||||
|
||||
cmLegacyCommandWrapper& cmLegacyCommandWrapper::operator=(
|
||||
cmLegacyCommandWrapper const& other)
|
||||
{
|
||||
this->Command = other.Command->Clone();
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool cmLegacyCommandWrapper::operator()(
|
||||
std::vector<cmListFileArgument> const& args, cmExecutionStatus& status) const
|
||||
{
|
||||
auto cmd = this->Command->Clone();
|
||||
cmd->SetExecutionStatus(&status);
|
||||
return cmd->InvokeInitialPass(args, status);
|
||||
}
|
@@ -1,97 +0,0 @@
|
||||
/* 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 <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class cmExecutionStatus;
|
||||
class cmMakefile;
|
||||
struct cmListFileArgument;
|
||||
|
||||
/** \class cmCommand
|
||||
* \brief Superclass for all commands in CMake.
|
||||
*
|
||||
* cmCommand is the base class for all commands in CMake. A command
|
||||
* manifests as an entry in CMakeLists.txt and produces one or
|
||||
* more makefile rules. Commands are associated with a particular
|
||||
* makefile. This base class cmCommand defines the API for commands
|
||||
* to support such features as enable/disable, inheritance,
|
||||
* documentation, and construction.
|
||||
*/
|
||||
class cmCommand
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Construct the command. By default it has no makefile.
|
||||
*/
|
||||
cmCommand() = default;
|
||||
|
||||
/**
|
||||
* Need virtual destructor to destroy real command type.
|
||||
*/
|
||||
virtual ~cmCommand() = default;
|
||||
|
||||
cmCommand(cmCommand const&) = delete;
|
||||
cmCommand& operator=(cmCommand const&) = delete;
|
||||
|
||||
/**
|
||||
* Specify the makefile.
|
||||
*/
|
||||
cmMakefile* GetMakefile() { return this->Makefile; }
|
||||
|
||||
void SetExecutionStatus(cmExecutionStatus* s);
|
||||
cmExecutionStatus* GetExecutionStatus() { return this->Status; }
|
||||
|
||||
/**
|
||||
* This is called by the cmMakefile when the command is first
|
||||
* encountered in the CMakeLists.txt file. It expands the command's
|
||||
* arguments and then invokes the InitialPass.
|
||||
*/
|
||||
bool InvokeInitialPass(const std::vector<cmListFileArgument>& args,
|
||||
cmExecutionStatus& status);
|
||||
|
||||
/**
|
||||
* This is called when the command is first encountered in
|
||||
* the CMakeLists.txt file.
|
||||
*/
|
||||
virtual bool InitialPass(std::vector<std::string> const& args,
|
||||
cmExecutionStatus&) = 0;
|
||||
|
||||
/**
|
||||
* This is a virtual constructor for the command.
|
||||
*/
|
||||
virtual std::unique_ptr<cmCommand> Clone() = 0;
|
||||
|
||||
/**
|
||||
* Set the error message
|
||||
*/
|
||||
void SetError(const std::string& e);
|
||||
|
||||
protected:
|
||||
cmMakefile* Makefile = nullptr;
|
||||
|
||||
private:
|
||||
cmExecutionStatus* Status = nullptr;
|
||||
};
|
||||
|
||||
class cmLegacyCommandWrapper
|
||||
{
|
||||
public:
|
||||
explicit cmLegacyCommandWrapper(std::unique_ptr<cmCommand> cmd);
|
||||
|
||||
cmLegacyCommandWrapper(cmLegacyCommandWrapper const& other);
|
||||
cmLegacyCommandWrapper& operator=(cmLegacyCommandWrapper const& other);
|
||||
|
||||
cmLegacyCommandWrapper(cmLegacyCommandWrapper&&) = default;
|
||||
cmLegacyCommandWrapper& operator=(cmLegacyCommandWrapper&&) = default;
|
||||
|
||||
bool operator()(std::vector<cmListFileArgument> const& args,
|
||||
cmExecutionStatus& status) const;
|
||||
|
||||
private:
|
||||
std::unique_ptr<cmCommand> Command;
|
||||
};
|
@@ -13,7 +13,6 @@
|
||||
#include "cmsys/RegularExpression.hxx"
|
||||
|
||||
#include "cmCacheManager.h"
|
||||
#include "cmCommand.h"
|
||||
#include "cmDefinitions.h"
|
||||
#include "cmExecutionStatus.h"
|
||||
#include "cmGlobCacheEntry.h"
|
||||
@@ -397,12 +396,6 @@ void cmState::SetIsGeneratorMultiConfig(bool b)
|
||||
this->IsGeneratorMultiConfig = b;
|
||||
}
|
||||
|
||||
void cmState::AddBuiltinCommand(std::string const& name,
|
||||
std::unique_ptr<cmCommand> command)
|
||||
{
|
||||
this->AddBuiltinCommand(name, cmLegacyCommandWrapper(std::move(command)));
|
||||
}
|
||||
|
||||
void cmState::AddBuiltinCommand(std::string const& name, Command command)
|
||||
{
|
||||
assert(name == cmSystemTools::LowerCase(name));
|
||||
|
@@ -27,7 +27,6 @@
|
||||
#include "cmValue.h"
|
||||
|
||||
class cmCacheManager;
|
||||
class cmCommand;
|
||||
class cmGlobVerificationManager;
|
||||
class cmMakefile;
|
||||
class cmStateSnapshot;
|
||||
@@ -177,8 +176,6 @@ public:
|
||||
// Returns a command from its name, or nullptr
|
||||
Command GetCommandByExactName(std::string const& name) const;
|
||||
|
||||
void AddBuiltinCommand(std::string const& name,
|
||||
std::unique_ptr<cmCommand> command);
|
||||
void AddBuiltinCommand(std::string const& name, Command command);
|
||||
void AddBuiltinCommand(std::string const& name, BuiltinCommand command);
|
||||
void AddFlowControlCommand(std::string const& name, Command command);
|
||||
|
Reference in New Issue
Block a user