diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2023-01-17 18:04:13 (GMT) |
---|---|---|
committer | Robert Maynard <rmaynard@nvidia.com> | 2023-01-20 18:30:25 (GMT) |
commit | 910ada1a88f4196cd441d6c6cde9c30629785d6e (patch) | |
tree | 0243a3e3b74773538074624fe8e5cac6edc5fbfd /Source | |
parent | 42e417ad1223a776399b427de2216b838a0bc1f6 (diff) | |
download | CMake-910ada1a88f4196cd441d6c6cde9c30629785d6e.zip CMake-910ada1a88f4196cd441d6c6cde9c30629785d6e.tar.gz CMake-910ada1a88f4196cd441d6c6cde9c30629785d6e.tar.bz2 |
Genex: $<CONFIG:> syntax of all entries checked
Fixes #24327
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGeneratorExpressionNode.cxx | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index e33ebd7..6595323 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -1352,12 +1352,30 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode } static cmsys::RegularExpression configValidator("^[A-Za-z0-9_]*$"); if (!configValidator.find(parameters.front())) { - reportError(context, content->GetOriginalExpression(), - "Expression syntax not recognized."); - return std::string(); } + context->HadContextSensitiveCondition = true; + bool firstParam = true; for (auto const& param : parameters) { + if (!configValidator.find(param)) { + if (firstParam) { + reportError(context, content->GetOriginalExpression(), + "Expression syntax not recognized."); + return std::string(); + } + // for backwards compat invalid config names are only errors as + // the first parameter + std::ostringstream e; + /* clang-format off */ + e << "Warning evaluating generator expression:\n" + << " " << content->GetOriginalExpression() << "\n" + << "The config name of \"" << param << "\" is invalid"; + /* clang-format on */ + context->LG->GetCMakeInstance()->IssueMessage( + MessageType::WARNING, e.str(), context->Backtrace); + } + + firstParam = false; if (context->Config.empty()) { if (param.empty()) { return "1"; |