diff options
author | Stephen Kelly <steveire@gmail.com> | 2013-02-25 23:50:49 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2013-05-16 17:36:31 (GMT) |
commit | a7ba4520c7b15dc9f56d2c4718748b79b12c0c89 (patch) | |
tree | 68f4bd469d6bf24fae28fc4b8e8a3c8f859016aa /Source/cmGeneratorExpressionEvaluator.cxx | |
parent | 96ec3147bbafd52b18bcf532b0da8727cd3c8104 (diff) | |
download | CMake-a7ba4520c7b15dc9f56d2c4718748b79b12c0c89.zip CMake-a7ba4520c7b15dc9f56d2c4718748b79b12c0c89.tar.gz CMake-a7ba4520c7b15dc9f56d2c4718748b79b12c0c89.tar.bz2 |
Add the JOIN generator expression.
This generator expression joins a list with a separator. The separator
may contain arbitrary content, such as commas, which is ordinarily a
delimiter in the generator expression syntax.
Diffstat (limited to 'Source/cmGeneratorExpressionEvaluator.cxx')
-rw-r--r-- | Source/cmGeneratorExpressionEvaluator.cxx | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index efb8117..6092aa2 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -307,6 +307,34 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode } configurationTestNode; +static const struct JoinNode : public cmGeneratorExpressionNode +{ + JoinNode() {} + + virtual int NumExpectedParameters() const { return 2; } + + virtual bool AcceptsArbitraryContentParameter() const { return true; } + + std::string Evaluate(const std::vector<std::string> ¶meters, + cmGeneratorExpressionContext *, + const GeneratorExpressionContent *, + cmGeneratorExpressionDAGChecker *) const + { + std::string result; + + std::vector<std::string> list; + cmSystemTools::ExpandListArgument(parameters.front(), list); + std::string sep; + for(std::vector<std::string>::const_iterator li = list.begin(); + li != list.end(); ++li) + { + result += sep + *li; + sep = parameters[1]; + } + return result; + } +} joinNode; + //---------------------------------------------------------------------------- static const char* targetPropertyTransitiveWhitelist[] = { "INTERFACE_INCLUDE_DIRECTORIES" @@ -973,6 +1001,8 @@ cmGeneratorExpressionNode* GetNode(const std::string &identifier) return &installInterfaceNode; else if (identifier == "INSTALL_PREFIX") return &installPrefixNode; + else if (identifier == "JOIN") + return &joinNode; return 0; } |