diff options
author | Brad King <brad.king@kitware.com> | 2018-11-20 14:29:38 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2018-11-20 14:29:44 (GMT) |
commit | aed259ac414e49933e498639edadfff6290d2a65 (patch) | |
tree | 983686997e874596b863ce087fab0bbe2ff596f4 /Source | |
parent | e653f46677450090b6acb46e9e12543cc307021a (diff) | |
parent | b5f8113ca7796df47bcb04bcd77991885c3b1b07 (diff) | |
download | CMake-aed259ac414e49933e498639edadfff6290d2a65.zip CMake-aed259ac414e49933e498639edadfff6290d2a65.tar.gz CMake-aed259ac414e49933e498639edadfff6290d2a65.tar.bz2 |
Merge topic 'genex-in_list-empty-args'
b5f8113ca7 Genex: Add policy to handle empty list items in $<IN_LIST:...>
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2569
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGeneratorExpressionNode.cxx | 35 | ||||
-rw-r--r-- | Source/cmPolicies.h | 4 |
2 files changed, 33 insertions, 6 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 49b97fb..eb3df16 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -283,14 +283,39 @@ static const struct InListNode : public cmGeneratorExpressionNode std::string Evaluate( const std::vector<std::string>& parameters, - cmGeneratorExpressionContext* /*context*/, + cmGeneratorExpressionContext* context, const GeneratorExpressionContent* /*content*/, cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override { - std::vector<std::string> values; - cmSystemTools::ExpandListArgument(parameters[1], values); - if (values.empty()) { - return "0"; + std::vector<std::string> values, checkValues; + bool check = false; + switch (context->LG->GetPolicyStatus(cmPolicies::CMP0085)) { + case cmPolicies::WARN: + if (parameters.front().empty()) { + check = true; + cmSystemTools::ExpandListArgument(parameters[1], checkValues, true); + } + CM_FALLTHROUGH; + case cmPolicies::OLD: + cmSystemTools::ExpandListArgument(parameters[1], values); + if (check && values != checkValues) { + std::ostringstream e; + e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0085) + << "\nSearch Item:\n \"" << parameters.front() + << "\"\nList:\n \"" << parameters[1] << "\"\n"; + context->LG->GetCMakeInstance()->IssueMessage( + cmake::AUTHOR_WARNING, e.str(), context->Backtrace); + return "0"; + } + if (values.empty()) { + return "0"; + } + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + case cmPolicies::NEW: + cmSystemTools::ExpandListArgument(parameters[1], values, true); + break; } return std::find(values.cbegin(), values.cend(), parameters.front()) == diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 6b1314f..9985d63 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -249,7 +249,9 @@ class cmMakefile; 0, cmPolicies::WARN) \ SELECT(POLICY, CMP0084, \ "The FindQt module does not exist for find_package().", 3, 14, 0, \ - cmPolicies::WARN) + cmPolicies::WARN) \ + SELECT(POLICY, CMP0085, "$<IN_LIST:...> handles empty list items.", 3, 14, \ + 0, cmPolicies::WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ |