cmSetTargetPropertiesCommand: Port away from cmCommand

This commit is contained in:
Regina Pfeifer committed 2019-09-21 05:14:05 +02:00
1 parent 77aa75b8dc
commit 42e413bcbb
3 files changed
+25 -50

No files matched your search

+1 -1
View File
@@ -242,7 +242,7 @@ void GetProjectCommands(cmState* state)
state->AddBuiltinCommand("set_source_files_properties", state->AddBuiltinCommand("set_source_files_properties",
cmSetSourceFilesPropertiesCommand); cmSetSourceFilesPropertiesCommand);
state->AddBuiltinCommand("set_target_properties", state->AddBuiltinCommand("set_target_properties",
cm::make_unique<cmSetTargetPropertiesCommand>()); cmSetTargetPropertiesCommand);
state->AddBuiltinCommand("set_tests_properties", state->AddBuiltinCommand("set_tests_properties",
cmSetTestsPropertiesCommand); cmSetTestsPropertiesCommand);
state->AddBuiltinCommand("subdirs", cmSubdirCommand); state->AddBuiltinCommand("subdirs", cmSubdirCommand);
+22 -22
View File
@@ -5,31 +5,32 @@
#include <iterator> #include <iterator>
#include "cmAlgorithms.h" #include "cmAlgorithms.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmTarget.h" #include "cmTarget.h"
class cmExecutionStatus; static bool SetOneTarget(const std::string& tname,
std::vector<std::string>& propertyPairs,
cmMakefile* mf);
// cmSetTargetPropertiesCommand bool cmSetTargetPropertiesCommand(std::vector<std::string> const& args,
bool cmSetTargetPropertiesCommand::InitialPass( cmExecutionStatus& status)
std::vector<std::string> const& args, cmExecutionStatus&)
{ {
if (args.size() < 2) { if (args.size() < 2) {
this->SetError("called with incorrect number of arguments"); status.SetError("called with incorrect number of arguments");
return false; return false;
} }
// first collect up the list of files // first collect up the list of files
std::vector<std::string> propertyPairs; std::vector<std::string> propertyPairs;
int numFiles = 0; int numFiles = 0;
std::vector<std::string>::const_iterator j; for (auto j = args.begin(); j != args.end(); ++j) {
for (j = args.begin(); j != args.end(); ++j) {
if (*j == "PROPERTIES") { if (*j == "PROPERTIES") {
// now loop through the rest of the arguments, new style // now loop through the rest of the arguments, new style
++j; ++j;
if (std::distance(j, args.end()) % 2 != 0) { if (std::distance(j, args.end()) % 2 != 0) {
this->SetError("called with incorrect number of arguments."); status.SetError("called with incorrect number of arguments.");
return false; return false;
} }
cmAppend(propertyPairs, j, args.end()); cmAppend(propertyPairs, j, args.end());
@@ -38,33 +39,32 @@ bool cmSetTargetPropertiesCommand::InitialPass(
numFiles++; numFiles++;
} }
if (propertyPairs.empty()) { if (propertyPairs.empty()) {
this->SetError("called with illegal arguments, maybe missing " status.SetError("called with illegal arguments, maybe missing "
"a PROPERTIES specifier?"); "a PROPERTIES specifier?");
return false; return false;
} }
cmMakefile& mf = status.GetMakefile();
// now loop over all the targets // now loop over all the targets
int i; for (int i = 0; i < numFiles; ++i) {
for (i = 0; i < numFiles; ++i) { if (mf.IsAlias(args[i])) {
if (this->Makefile->IsAlias(args[i])) { status.SetError("can not be used on an ALIAS target.");
this->SetError("can not be used on an ALIAS target.");
return false; return false;
} }
bool ret = cmSetTargetPropertiesCommand::SetOneTarget( bool ret = SetOneTarget(args[i], propertyPairs, &mf);
args[i], propertyPairs, this->Makefile);
if (!ret) { if (!ret) {
std::string message = status.SetError(
cmStrCat("Can not find target to add properties to: ", args[i]); cmStrCat("Can not find target to add properties to: ", args[i]));
this->SetError(message);
return false; return false;
} }
} }
return true; return true;
} }
bool cmSetTargetPropertiesCommand::SetOneTarget( static bool SetOneTarget(const std::string& tname,
const std::string& tname, std::vector<std::string>& propertyPairs, std::vector<std::string>& propertyPairs,
cmMakefile* mf) cmMakefile* mf)
{ {
if (cmTarget* target = mf->FindTargetToUse(tname)) { if (cmTarget* target = mf->FindTargetToUse(tname)) {
// now loop through all the props and set them // now loop through all the props and set them
+2 -27
View File
@@ -8,34 +8,9 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <cm/memory>
#include "cmCommand.h"
class cmExecutionStatus; class cmExecutionStatus;
class cmMakefile;
class cmSetTargetPropertiesCommand : public cmCommand bool cmSetTargetPropertiesCommand(std::vector<std::string> const& args,
{ cmExecutionStatus& status);
public:
std::unique_ptr<cmCommand> Clone() override
{
return cm::make_unique<cmSetTargetPropertiesCommand>();
}
/**
* This is called when the command is first encountered in
* the input file.
*/
bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override;
/**
* Used by this command and cmSetPropertiesCommand
*/
static bool SetOneTarget(const std::string& tname,
std::vector<std::string>& propertyPairs,
cmMakefile* mf);
};
#endif #endif