summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2018-02-16 14:22:38 (GMT)
committerKitware Robot <kwrobot@kitware.com>2018-02-16 14:22:56 (GMT)
commitd97c9ffb6c7189d5e617c1d69e8fe168e7813293 (patch)
treea463c059e1f7479dee31732fd32c75f89f228d14 /Source
parent269722ae5b458c6e925c35fdebf5c8f35b3a182c (diff)
parent5089f560e706733084d8c9bae34778a31dfe3110 (diff)
downloadCMake-d97c9ffb6c7189d5e617c1d69e8fe168e7813293.zip
CMake-d97c9ffb6c7189d5e617c1d69e8fe168e7813293.tar.gz
CMake-d97c9ffb6c7189d5e617c1d69e8fe168e7813293.tar.bz2
Merge topic 'genex-IN_LIST-operator'
5089f560 Genex: Add IN_LIST logical operator Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1724
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGeneratorExpressionNode.cxx26
1 files changed, 26 insertions, 0 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index c1f1ee4..0d22028 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -275,6 +275,31 @@ static const struct EqualNode : public cmGeneratorExpressionNode
}
} equalNode;
+static const struct InListNode : public cmGeneratorExpressionNode
+{
+ InListNode() {}
+
+ int NumExpectedParameters() const override { return 2; }
+
+ std::string Evaluate(
+ const std::vector<std::string>& parameters,
+ cmGeneratorExpressionContext* /*context*/,
+ const GeneratorExpressionContent* /*content*/,
+ cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
+ {
+ std::vector<std::string> values;
+ cmSystemTools::ExpandListArgument(parameters[1], values);
+ if (values.empty()) {
+ return "0";
+ }
+
+ return std::find(values.cbegin(), values.cend(), parameters.front()) ==
+ values.cend()
+ ? "0"
+ : "1";
+ }
+} inListNode;
+
static const struct LowerCaseNode : public cmGeneratorExpressionNode
{
LowerCaseNode() {}
@@ -1827,6 +1852,7 @@ const cmGeneratorExpressionNode* cmGeneratorExpressionNode::GetNode(
nodeMap["TARGET_BUNDLE_CONTENT_DIR"] = &targetBundleContentDirNode;
nodeMap["STREQUAL"] = &strEqualNode;
nodeMap["EQUAL"] = &equalNode;
+ nodeMap["IN_LIST"] = &inListNode;
nodeMap["LOWER_CASE"] = &lowerCaseNode;
nodeMap["UPPER_CASE"] = &upperCaseNode;
nodeMap["MAKE_C_IDENTIFIER"] = &makeCIdentifierNode;