summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-02-18 22:50:36 (GMT)
committerStephen Kelly <steveire@gmail.com>2015-02-20 20:35:58 (GMT)
commit37b88d348a20921c835ce7aa99f6db62271503a7 (patch)
tree96259ea4c15995957740dfbf421ebed066cb221f
parenta281809384cc19cc9a7d1726b243020b380b9395 (diff)
downloadCMake-37b88d348a20921c835ce7aa99f6db62271503a7.zip
CMake-37b88d348a20921c835ce7aa99f6db62271503a7.tar.gz
CMake-37b88d348a20921c835ce7aa99f6db62271503a7.tar.bz2
cmAlgorithms: Add cmWrap.
Port some existing cmJoin to use it. cmJoin is cumbersome to use in cases where the objective is to somehow 'quote' each item and then join it with a separator. In that case, the joiner string is harder to read and reason about. cmWrap aims to solve that. Provide an overload taking char wrappers to simplify the case of surrounding every element in quotes without needing to escape the quote character.
-rw-r--r--Source/cmAlgorithms.h17
-rw-r--r--Source/cmGlobalGenerator.cxx11
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx7
-rw-r--r--Source/cmSystemTools.cxx2
-rw-r--r--Source/cmcmd.cxx4
5 files changed, 22 insertions, 19 deletions
diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h
index 8491838..43e113b 100644
--- a/Source/cmAlgorithms.h
+++ b/Source/cmAlgorithms.h
@@ -278,4 +278,21 @@ typename Range::const_iterator cmRemoveDuplicates(Range& r)
return cmRemoveIndices(r, indices);
}
+template<typename Range>
+std::string cmWrap(std::string prefix, Range const& r, std::string suffix,
+ std::string sep)
+{
+ if (r.empty())
+ {
+ return std::string();
+ }
+ return prefix + cmJoin(r, (suffix + sep + prefix).c_str()) + suffix;
+}
+
+template<typename Range>
+std::string cmWrap(char prefix, Range const& r, char suffix, std::string sep)
+{
+ return cmWrap(std::string(1, prefix), r, std::string(1, suffix), sep);
+}
+
#endif
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index ac4489a..93692f6 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -2295,15 +2295,8 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
std::ostringstream ostr;
if (!componentsSet->empty())
{
- ostr << "Available install components are:";
- std::set<std::string>::iterator it;
- for (
- it = componentsSet->begin();
- it != componentsSet->end();
- ++ it )
- {
- ostr << " \"" << *it << "\"";
- }
+ ostr << "Available install components are: ";
+ ostr << cmWrap('"', *componentsSet, '"', " ");
}
else
{
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 68657ad..432cb3a 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -724,12 +724,7 @@ cmLocalUnixMakefileGenerator3
}
// Write the list of commands.
- for(std::vector<std::string>::const_iterator i = commands.begin();
- i != commands.end(); ++i)
- {
- replace = *i;
- os << "\t" << replace << "\n";
- }
+ os << cmWrap("\t", commands, "", "\n") << "\n";
if(symbolic && !this->WatcomWMake)
{
os << ".PHONY : " << cmMakeSafe(tgt) << "\n";
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index bf496e9..5264123 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -835,7 +835,7 @@ cmSystemTools::PrintSingleCommand(std::vector<std::string> const& command)
return std::string();
}
- return "\"" + cmJoin(command, "\" \"") + "\"";
+ return cmWrap('"', command, '"', " ");
}
bool cmSystemTools::DoesFileExistWithExtensions(
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index eb637ef..7d67bd8 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -450,9 +450,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
return 1;
}
- std::string command = "\"";
- command += cmJoin(cmRange(args).advance(3), "\" \"");
- command += "\"";
+ std::string command = cmWrap('"', cmRange(args).advance(3), '"', " ");
int retval = 0;
int timeout = 0;
if ( cmSystemTools::RunSingleCommand(command.c_str(), 0, &retval,