mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 22:37:30 +08:00
cmCommand refactor: cmUtilitySourceCommand
This commit is contained in:
@@ -323,8 +323,7 @@ void GetProjectCommands(cmState* state)
|
|||||||
"subdir_depends", cmSubdirDependsCommand, cmPolicies::CMP0029,
|
"subdir_depends", cmSubdirDependsCommand, cmPolicies::CMP0029,
|
||||||
"The subdir_depends command should not be called; see CMP0029.");
|
"The subdir_depends command should not be called; see CMP0029.");
|
||||||
state->AddDisallowedCommand(
|
state->AddDisallowedCommand(
|
||||||
"utility_source", cm::make_unique<cmUtilitySourceCommand>(),
|
"utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,
|
||||||
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", cm::make_unique<cmVariableRequiresCommand>(),
|
||||||
|
@@ -4,20 +4,19 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "cmExecutionStatus.h"
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmState.h"
|
#include "cmState.h"
|
||||||
#include "cmStateTypes.h"
|
#include "cmStateTypes.h"
|
||||||
#include "cmStringAlgorithms.h"
|
#include "cmStringAlgorithms.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
|
||||||
class cmExecutionStatus;
|
|
||||||
|
|
||||||
// cmUtilitySourceCommand
|
// cmUtilitySourceCommand
|
||||||
bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
bool cmUtilitySourceCommand(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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,15 +24,15 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
|||||||
|
|
||||||
// The first argument is the cache entry name.
|
// The first argument is the cache entry name.
|
||||||
std::string const& cacheEntry = *arg++;
|
std::string const& cacheEntry = *arg++;
|
||||||
const char* cacheValue = this->Makefile->GetDefinition(cacheEntry);
|
const char* cacheValue = status.GetMakefile().GetDefinition(cacheEntry);
|
||||||
// If it exists already and appears up to date then we are done. If
|
// If it exists already and appears up to date then we are done. If
|
||||||
// the string contains "(IntDir)" but that is not the
|
// the string contains "(IntDir)" but that is not the
|
||||||
// CMAKE_CFG_INTDIR setting then the value is out of date.
|
// CMAKE_CFG_INTDIR setting then the value is out of date.
|
||||||
std::string const& intDir =
|
std::string const& intDir =
|
||||||
this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR");
|
status.GetMakefile().GetRequiredDefinition("CMAKE_CFG_INTDIR");
|
||||||
|
|
||||||
bool haveCacheValue = false;
|
bool haveCacheValue = false;
|
||||||
if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING")) {
|
if (status.GetMakefile().IsOn("CMAKE_CROSSCOMPILING")) {
|
||||||
haveCacheValue = (cacheValue != nullptr);
|
haveCacheValue = (cacheValue != nullptr);
|
||||||
if (!haveCacheValue) {
|
if (!haveCacheValue) {
|
||||||
std::string msg = cmStrCat(
|
std::string msg = cmStrCat(
|
||||||
@@ -44,7 +43,7 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
|||||||
cmSystemTools::Message(msg, "Warning");
|
cmSystemTools::Message(msg, "Warning");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cmState* state = this->Makefile->GetState();
|
cmState* state = status.GetMakefile().GetState();
|
||||||
haveCacheValue = (cacheValue &&
|
haveCacheValue = (cacheValue &&
|
||||||
(strstr(cacheValue, "(IntDir)") == nullptr ||
|
(strstr(cacheValue, "(IntDir)") == nullptr ||
|
||||||
(intDir == "$(IntDir)")) &&
|
(intDir == "$(IntDir)")) &&
|
||||||
@@ -63,7 +62,7 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
|||||||
// The third argument specifies the relative directory of the source
|
// The third argument specifies the relative directory of the source
|
||||||
// of the utility.
|
// of the utility.
|
||||||
std::string const& relativeSource = *arg++;
|
std::string const& relativeSource = *arg++;
|
||||||
std::string utilitySource = this->Makefile->GetCurrentSourceDirectory();
|
std::string utilitySource = status.GetMakefile().GetCurrentSourceDirectory();
|
||||||
utilitySource = utilitySource + "/" + relativeSource;
|
utilitySource = utilitySource + "/" + relativeSource;
|
||||||
|
|
||||||
// If the directory doesn't exist, the source has not been included.
|
// If the directory doesn't exist, the source has not been included.
|
||||||
@@ -81,11 +80,12 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
|||||||
|
|
||||||
// The source exists.
|
// The source exists.
|
||||||
const std::string& cmakeCFGout =
|
const std::string& cmakeCFGout =
|
||||||
this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR");
|
status.GetMakefile().GetRequiredDefinition("CMAKE_CFG_INTDIR");
|
||||||
std::string utilityDirectory = this->Makefile->GetCurrentBinaryDirectory();
|
std::string utilityDirectory =
|
||||||
|
status.GetMakefile().GetCurrentBinaryDirectory();
|
||||||
std::string exePath;
|
std::string exePath;
|
||||||
if (this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) {
|
if (status.GetMakefile().GetDefinition("EXECUTABLE_OUTPUT_PATH")) {
|
||||||
exePath = this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
|
exePath = status.GetMakefile().GetDefinition("EXECUTABLE_OUTPUT_PATH");
|
||||||
}
|
}
|
||||||
if (!exePath.empty()) {
|
if (!exePath.empty()) {
|
||||||
utilityDirectory = exePath;
|
utilityDirectory = exePath;
|
||||||
@@ -95,21 +95,22 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
|
|||||||
|
|
||||||
// Construct the cache entry for the executable's location.
|
// Construct the cache entry for the executable's location.
|
||||||
std::string utilityExecutable = utilityDirectory + "/" + cmakeCFGout + "/" +
|
std::string utilityExecutable = utilityDirectory + "/" + cmakeCFGout + "/" +
|
||||||
utilityName + this->Makefile->GetDefinition("CMAKE_EXECUTABLE_SUFFIX");
|
utilityName +
|
||||||
|
status.GetMakefile().GetDefinition("CMAKE_EXECUTABLE_SUFFIX");
|
||||||
|
|
||||||
// make sure we remove any /./ in the name
|
// make sure we remove any /./ in the name
|
||||||
cmSystemTools::ReplaceString(utilityExecutable, "/./", "/");
|
cmSystemTools::ReplaceString(utilityExecutable, "/./", "/");
|
||||||
|
|
||||||
// Enter the value into the cache.
|
// Enter the value into the cache.
|
||||||
this->Makefile->AddCacheDefinition(cacheEntry, utilityExecutable.c_str(),
|
status.GetMakefile().AddCacheDefinition(
|
||||||
"Path to an internal program.",
|
cacheEntry, utilityExecutable.c_str(), "Path to an internal program.",
|
||||||
cmStateEnums::FILEPATH);
|
cmStateEnums::FILEPATH);
|
||||||
// add a value into the cache that maps from the
|
// add a value into the cache that maps from the
|
||||||
// full path to the name of the project
|
// full path to the name of the project
|
||||||
cmSystemTools::ConvertToUnixSlashes(utilityExecutable);
|
cmSystemTools::ConvertToUnixSlashes(utilityExecutable);
|
||||||
this->Makefile->AddCacheDefinition(utilityExecutable, utilityName.c_str(),
|
status.GetMakefile().AddCacheDefinition(
|
||||||
"Executable to project name.",
|
utilityExecutable, utilityName.c_str(), "Executable to project name.",
|
||||||
cmStateEnums::INTERNAL);
|
cmStateEnums::INTERNAL);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -8,21 +8,9 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "cm_memory.hxx"
|
|
||||||
|
|
||||||
#include "cmCommand.h"
|
|
||||||
|
|
||||||
class cmExecutionStatus;
|
class cmExecutionStatus;
|
||||||
|
|
||||||
class cmUtilitySourceCommand : public cmCommand
|
bool cmUtilitySourceCommand(std::vector<std::string> const& args,
|
||||||
{
|
cmExecutionStatus& status);
|
||||||
public:
|
|
||||||
std::unique_ptr<cmCommand> Clone() override
|
|
||||||
{
|
|
||||||
return cm::make_unique<cmUtilitySourceCommand>();
|
|
||||||
}
|
|
||||||
bool InitialPass(std::vector<std::string> const& args,
|
|
||||||
cmExecutionStatus& status) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user