summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRegina Pfeifer <regina@mailbox.org>2019-09-18 17:39:47 +0200
committerRegina Pfeifer <regina@mailbox.org>2019-09-21 05:14:42 +0200
commitd5c63f073f290d4778426825e586240dca7ca0a6 (patch)
treeb75d7faa6aa811ac4dd22fc22cfc357b84adf308
parent42e413bcbbd32cbae6705269ae0f7a0583819be9 (diff)
downloadcmake-d5c63f073f290d4778426825e586240dca7ca0a6.tar.gz
cmSourceGroupCommand: Port away from cmCommand
-rw-r--r--Source/cmCommands.cxx3
-rw-r--r--Source/cmSourceGroupCommand.cxx80
-rw-r--r--Source/cmSourceGroupCommand.h51
3 files changed, 49 insertions, 85 deletions
diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index 8e3a2cc3dd..6a91674114 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -288,8 +288,7 @@ void GetProjectCommands(cmState* state)
state->AddBuiltinCommand("qt_wrap_cpp", cmQTWrapCPPCommand);
state->AddBuiltinCommand("qt_wrap_ui", cmQTWrapUICommand);
state->AddBuiltinCommand("remove_definitions", cmRemoveDefinitionsCommand);
- state->AddBuiltinCommand("source_group",
- cm::make_unique<cmSourceGroupCommand>());
+ state->AddBuiltinCommand("source_group", cmSourceGroupCommand);
state->AddDisallowedCommand(
"export_library_dependencies", cmExportLibraryDependenciesCommand,
diff --git a/Source/cmSourceGroupCommand.cxx b/Source/cmSourceGroupCommand.cxx
index 3be7fec386..3a13e57a42 100644
--- a/Source/cmSourceGroupCommand.cxx
+++ b/Source/cmSourceGroupCommand.cxx
@@ -3,16 +3,22 @@
#include "cmSourceGroupCommand.h"
#include <cstddef>
+#include <map>
#include <set>
#include <utility>
#include "cmAlgorithms.h"
+#include "cmExecutionStatus.h"
#include "cmMakefile.h"
#include "cmSourceGroup.h"
#include "cmStringAlgorithms.h"
#include "cmSystemTools.h"
namespace {
+
+using ParsedArguments = std::map<std::string, std::vector<std::string>>;
+using ExpectedOptions = std::vector<std::string>;
+
const std::string kTreeOptionName = "TREE";
const std::string kPrefixOptionName = "PREFIX";
const std::string kFilesOptionName = "FILES";
@@ -117,13 +123,8 @@ bool addFilesToItsSourceGroups(const std::string& root,
return true;
}
-}
-class cmExecutionStatus;
-
-// cmSourceGroupCommand
-cmSourceGroupCommand::ExpectedOptions
-cmSourceGroupCommand::getExpectedOptions() const
+ExpectedOptions getExpectedOptions()
{
ExpectedOptions options;
@@ -135,15 +136,14 @@ cmSourceGroupCommand::getExpectedOptions() const
return options;
}
-bool cmSourceGroupCommand::isExpectedOption(
- const std::string& argument, const ExpectedOptions& expectedOptions)
+bool isExpectedOption(const std::string& argument,
+ const ExpectedOptions& expectedOptions)
{
return cmContains(expectedOptions, argument);
}
-void cmSourceGroupCommand::parseArguments(
- const std::vector<std::string>& args,
- cmSourceGroupCommand::ParsedArguments& parsedArguments)
+void parseArguments(const std::vector<std::string>& args,
+ ParsedArguments& parsedArguments)
{
const ExpectedOptions expectedOptions = getExpectedOptions();
size_t i = 0;
@@ -172,21 +172,35 @@ void cmSourceGroupCommand::parseArguments(
}
}
-bool cmSourceGroupCommand::InitialPass(std::vector<std::string> const& args,
- cmExecutionStatus&)
+} // namespace
+
+static bool checkArgumentsPreconditions(const ParsedArguments& parsedArguments,
+ std::string& errorMsg);
+
+static bool processTree(cmMakefile& mf, ParsedArguments& parsedArguments,
+ std::string& errorMsg);
+
+static bool checkSingleParameterArgumentPreconditions(
+ const std::string& argument, const ParsedArguments& parsedArguments,
+ std::string& errorMsg);
+
+bool cmSourceGroupCommand(std::vector<std::string> const& args,
+ cmExecutionStatus& status)
{
if (args.empty()) {
- this->SetError("called with incorrect number of arguments");
+ status.SetError("called with incorrect number of arguments");
return false;
}
+ cmMakefile& mf = status.GetMakefile();
+
// If only two arguments are given, the pre-1.8 version of the
// command is being invoked.
if (args.size() == 2 && args[1] != "FILES") {
- cmSourceGroup* sg = this->Makefile->GetOrCreateSourceGroup(args[0]);
+ cmSourceGroup* sg = mf.GetOrCreateSourceGroup(args[0]);
if (!sg) {
- this->SetError("Could not create or find source group");
+ status.SetError("Could not create or find source group");
return false;
}
@@ -204,21 +218,21 @@ bool cmSourceGroupCommand::InitialPass(std::vector<std::string> const& args,
}
if (parsedArguments.find(kTreeOptionName) != parsedArguments.end()) {
- if (!processTree(parsedArguments, errorMsg)) {
- this->SetError(errorMsg);
+ if (!processTree(mf, parsedArguments, errorMsg)) {
+ status.SetError(errorMsg);
return false;
}
} else {
if (parsedArguments.find(kSourceGroupOptionName) ==
parsedArguments.end()) {
- this->SetError("Missing source group name.");
+ status.SetError("Missing source group name.");
return false;
}
- cmSourceGroup* sg = this->Makefile->GetOrCreateSourceGroup(args[0]);
+ cmSourceGroup* sg = mf.GetOrCreateSourceGroup(args[0]);
if (!sg) {
- this->SetError("Could not create or find source group");
+ status.SetError("Could not create or find source group");
return false;
}
@@ -234,8 +248,7 @@ bool cmSourceGroupCommand::InitialPass(std::vector<std::string> const& args,
for (auto const& filesArg : filesArguments) {
std::string src = filesArg;
if (!cmSystemTools::FileIsFullPath(src)) {
- src =
- cmStrCat(this->Makefile->GetCurrentSourceDirectory(), '/', filesArg);
+ src = cmStrCat(mf.GetCurrentSourceDirectory(), '/', filesArg);
}
src = cmSystemTools::CollapseFullPath(src);
sg->AddGroupFile(src);
@@ -245,8 +258,8 @@ bool cmSourceGroupCommand::InitialPass(std::vector<std::string> const& args,
return true;
}
-bool cmSourceGroupCommand::checkArgumentsPreconditions(
- const ParsedArguments& parsedArguments, std::string& errorMsg) const
+static bool checkArgumentsPreconditions(const ParsedArguments& parsedArguments,
+ std::string& errorMsg)
{
return checkSingleParameterArgumentPreconditions(
kPrefixOptionName, parsedArguments, errorMsg) &&
@@ -256,8 +269,8 @@ bool cmSourceGroupCommand::checkArgumentsPreconditions(
parsedArguments, errorMsg);
}
-bool cmSourceGroupCommand::processTree(ParsedArguments& parsedArguments,
- std::string& errorMsg)
+static bool processTree(cmMakefile& mf, ParsedArguments& parsedArguments,
+ std::string& errorMsg)
{
const std::string root =
cmSystemTools::CollapseFullPath(parsedArguments[kTreeOptionName].front());
@@ -265,9 +278,8 @@ bool cmSourceGroupCommand::processTree(ParsedArguments& parsedArguments,
? ""
: parsedArguments[kPrefixOptionName].front();
- const std::vector<std::string> filesVector =
- prepareFilesPathsForTree(parsedArguments[kFilesOptionName],
- this->Makefile->GetCurrentSourceDirectory());
+ const std::vector<std::string> filesVector = prepareFilesPathsForTree(
+ parsedArguments[kFilesOptionName], mf.GetCurrentSourceDirectory());
if (!rootIsPrefix(root, filesVector, errorMsg)) {
return false;
@@ -276,13 +288,13 @@ bool cmSourceGroupCommand::processTree(ParsedArguments& parsedArguments,
std::set<std::string> sourceGroupPaths =
getSourceGroupFilesPaths(root, filesVector);
- return addFilesToItsSourceGroups(root, sourceGroupPaths, prefix,
- *(this->Makefile), errorMsg);
+ return addFilesToItsSourceGroups(root, sourceGroupPaths, prefix, mf,
+ errorMsg);
}
-bool cmSourceGroupCommand::checkSingleParameterArgumentPreconditions(
+static bool checkSingleParameterArgumentPreconditions(
const std::string& argument, const ParsedArguments& parsedArguments,
- std::string& errorMsg) const
+ std::string& errorMsg)
{
auto foundArgument = parsedArguments.find(argument);
if (foundArgument != parsedArguments.end()) {
diff --git a/Source/cmSourceGroupCommand.h b/Source/cmSourceGroupCommand.h
index 6273d92742..ad39701579 100644
--- a/Source/cmSourceGroupCommand.h
+++ b/Source/cmSourceGroupCommand.h
@@ -5,59 +5,12 @@
#include "cmConfigure.h" // IWYU pragma: keep
-#include <map>
#include <string>
#include <vector>
-#include <cm/memory>
-
-#include "cmCommand.h"
-
class cmExecutionStatus;
-/** \class cmSourceGroupCommand
- * \brief Adds a cmSourceGroup to the cmMakefile.
- *
- * cmSourceGroupCommand is used to define cmSourceGroups which split up
- * source files in to named, organized groups in the generated makefiles.
- */
-class cmSourceGroupCommand : public cmCommand
-{
-public:
- /**
- * This is a virtual constructor for the command.
- */
- std::unique_ptr<cmCommand> Clone() override
- {
- return cm::make_unique<cmSourceGroupCommand>();
- }
-
- /**
- * This is called when the command is first encountered in
- * the CMakeLists.txt file.
- */
- bool InitialPass(std::vector<std::string> const& args,
- cmExecutionStatus& status) override;
-
-private:
- using ParsedArguments = std::map<std::string, std::vector<std::string>>;
- using ExpectedOptions = std::vector<std::string>;
-
- ExpectedOptions getExpectedOptions() const;
-
- bool isExpectedOption(const std::string& argument,
- const ExpectedOptions& expectedOptions);
-
- void parseArguments(const std::vector<std::string>& args,
- cmSourceGroupCommand::ParsedArguments& parsedArguments);
-
- bool processTree(ParsedArguments& parsedArguments, std::string& errorMsg);
-
- bool checkArgumentsPreconditions(const ParsedArguments& parsedArguments,
- std::string& errorMsg) const;
- bool checkSingleParameterArgumentPreconditions(
- const std::string& argument, const ParsedArguments& parsedArguments,
- std::string& errorMsg) const;
-};
+bool cmSourceGroupCommand(std::vector<std::string> const& args,
+ cmExecutionStatus& status);
#endif