[Cmake-commits] CMake branch, next, updated. v2.8.10.1-1069-g4135b8d
Stephen Kelly
steveire at gmail.com
Mon Nov 26 17:04:38 EST 2012
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 4135b8dbdb64c42467c00ea8382fc7e61fdadf53 (commit)
via 81bf64f9c8dfcad41f72ca9ff9f17e6ea8b9d7cc (commit)
via ef336bd709eaf83aa196e322fd2fe7d9919db8db (commit)
via ee96dc76864b899684d62b51edd87d3083e80168 (commit)
from 59fdf4014f34c496726e97c8cbda1363813b6834 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4135b8dbdb64c42467c00ea8382fc7e61fdadf53
commit 4135b8dbdb64c42467c00ea8382fc7e61fdadf53
Merge: 59fdf40 81bf64f
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Nov 26 17:04:33 2012 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 26 17:04:33 2012 -0500
Merge topic 'generator-expression-fixes' into next
81bf64f Genex: Don't segfault on $<FOO,>
ef336bd Genex: Ensure that $<0:...> has a parameter.
ee96dc7 Genex: Extract a method to parse parameters.
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=81bf64f9c8dfcad41f72ca9ff9f17e6ea8b9d7cc
commit 81bf64f9c8dfcad41f72ca9ff9f17e6ea8b9d7cc
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Nov 26 22:44:13 2012 +0100
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Nov 26 22:57:27 2012 +0100
Genex: Don't segfault on $<FOO,>
Treat the comma as part of the identifier here. It will later not
resolve to a generator expression and the user gets a proper error
message.
diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx
index 7a8fc51..a619cec 100644
--- a/Source/cmGeneratorExpressionParser.cxx
+++ b/Source/cmGeneratorExpressionParser.cxx
@@ -88,7 +88,15 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression(
while(this->it->TokenType != cmGeneratorExpressionToken::EndExpression
&& this->it->TokenType != cmGeneratorExpressionToken::ColonSeparator)
{
- this->ParseContent(identifier);
+ if (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator)
+ {
+ extendText(identifier, this->it);
+ ++this->it;
+ }
+ else
+ {
+ this->ParseContent(identifier);
+ }
if (this->it == this->Tokens.end())
{
break;
diff --git a/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
index ce04482..40db4ae 100644
--- a/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
+++ b/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
@@ -6,3 +6,12 @@ CMake Error at BadZero.cmake:2 \(add_custom_target\):
\$<0> expression requires a parameter.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
++
+CMake Error at BadZero.cmake:2 \(add_custom_target\):
+ Error evaluating generator expression:
+
+ \$<0,>
+
+ Expression did not evaluate to a known generator expression
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/GeneratorExpression/BadZero.cmake b/Tests/RunCMake/GeneratorExpression/BadZero.cmake
index 295ab0e..559a9fa 100644
--- a/Tests/RunCMake/GeneratorExpression/BadZero.cmake
+++ b/Tests/RunCMake/GeneratorExpression/BadZero.cmake
@@ -1,4 +1,5 @@
add_custom_target(check ALL COMMAND check
$<0>
+ $<0,>
VERBATIM)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ef336bd709eaf83aa196e322fd2fe7d9919db8db
commit ef336bd709eaf83aa196e322fd2fe7d9919db8db
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Nov 26 22:43:13 2012 +0100
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Nov 26 22:56:54 2012 +0100
Genex: Ensure that $<0:...> has a parameter.
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 23f641d..946214b 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -66,6 +66,8 @@ static const struct ZeroNode : public cmGeneratorExpressionNode
virtual bool GeneratesContent() const { return false; }
+ virtual bool AcceptsSingleArbitraryContentParameter() const { return true; }
+
std::string Evaluate(const std::vector<std::string> &,
cmGeneratorExpressionContext *,
const GeneratorExpressionContent *,
@@ -642,6 +644,19 @@ std::string GeneratorExpressionContent::Evaluate(
if (!node->GeneratesContent())
{
+ if (node->AcceptsSingleArbitraryContentParameter())
+ {
+ if (this->ParamChildren.empty())
+ {
+ reportError(context, this->GetOriginalExpression(),
+ "$<" + identifier + "> expression requires a parameter.");
+ }
+ }
+ else
+ {
+ std::vector<std::string> parameters;
+ this->EvaluateParameters(node, identifier, context, dagChecker, parameters);
+ }
return std::string();
}
diff --git a/Tests/RunCMake/GeneratorExpression/BadZero-result.txt b/Tests/RunCMake/GeneratorExpression/BadZero-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadZero-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
new file mode 100644
index 0000000..ce04482
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
@@ -0,0 +1,8 @@
+CMake Error at BadZero.cmake:2 \(add_custom_target\):
+ Error evaluating generator expression:
+
+ \$<0>
+
+ \$<0> expression requires a parameter.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/GeneratorExpression/BadZero.cmake b/Tests/RunCMake/GeneratorExpression/BadZero.cmake
new file mode 100644
index 0000000..295ab0e
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadZero.cmake
@@ -0,0 +1,4 @@
+
+add_custom_target(check ALL COMMAND check
+ $<0>
+ VERBATIM)
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index 18a47ae..992ba79 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -5,3 +5,4 @@ run_cmake(BadOR)
run_cmake(BadAND)
run_cmake(BadNOT)
run_cmake(BadStrEqual)
+run_cmake(BadZero)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ee96dc76864b899684d62b51edd87d3083e80168
commit ee96dc76864b899684d62b51edd87d3083e80168
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Nov 26 22:42:00 2012 +0100
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Nov 26 22:52:22 2012 +0100
Genex: Extract a method to parse parameters.
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 2e123a4..23f641d 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -677,6 +677,23 @@ std::string GeneratorExpressionContent::Evaluate(
}
std::vector<std::string> parameters;
+ this->EvaluateParameters(node, identifier, context, dagChecker, parameters);
+ if (context->HadError)
+ {
+ return std::string();
+ }
+
+ return node->Evaluate(parameters, context, this, dagChecker);
+}
+
+//----------------------------------------------------------------------------
+std::string GeneratorExpressionContent::EvaluateParameters(
+ const cmGeneratorExpressionNode *node,
+ const std::string &identifier,
+ cmGeneratorExpressionContext *context,
+ cmGeneratorExpressionDAGChecker *dagChecker,
+ std::vector<std::string> ¶meters) const
+{
{
std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
pit = this->ParamChildren.begin();
@@ -732,10 +749,8 @@ std::string GeneratorExpressionContent::Evaluate(
{
reportError(context, this->GetOriginalExpression(), "$<" + identifier
+ "> expression requires at least one parameter.");
- return std::string();
}
-
- return node->Evaluate(parameters, context, this, dagChecker);
+ return std::string();
}
//----------------------------------------------------------------------------
diff --git a/Source/cmGeneratorExpressionEvaluator.h b/Source/cmGeneratorExpressionEvaluator.h
index 04a2acd..642a02e 100644
--- a/Source/cmGeneratorExpressionEvaluator.h
+++ b/Source/cmGeneratorExpressionEvaluator.h
@@ -33,6 +33,7 @@ struct cmGeneratorExpressionContext
};
struct cmGeneratorExpressionDAGChecker;
+struct cmGeneratorExpressionNode;
//----------------------------------------------------------------------------
struct cmGeneratorExpressionEvaluator
@@ -118,6 +119,13 @@ struct GeneratorExpressionContent : public cmGeneratorExpressionEvaluator
~GeneratorExpressionContent();
private:
+ std::string EvaluateParameters(const cmGeneratorExpressionNode *node,
+ const std::string &identifier,
+ cmGeneratorExpressionContext *context,
+ cmGeneratorExpressionDAGChecker *dagChecker,
+ std::vector<std::string> ¶meters) const;
+
+private:
std::vector<cmGeneratorExpressionEvaluator*> IdentifierChildren;
std::vector<std::vector<cmGeneratorExpressionEvaluator*> > ParamChildren;
const char *StartContent;
-----------------------------------------------------------------------
Summary of changes:
Source/cmGeneratorExpressionEvaluator.cxx | 36 ++++++++++++++++++--
Source/cmGeneratorExpressionEvaluator.h | 8 ++++
Source/cmGeneratorExpressionParser.cxx | 10 +++++-
.../{BadAND-result.txt => BadZero-result.txt} | 0
.../GeneratorExpression/BadZero-stderr.txt | 17 +++++++++
Tests/RunCMake/GeneratorExpression/BadZero.cmake | 5 +++
.../GeneratorExpression/RunCMakeTest.cmake | 1 +
7 files changed, 73 insertions(+), 4 deletions(-)
copy Tests/RunCMake/GeneratorExpression/{BadAND-result.txt => BadZero-result.txt} (100%)
create mode 100644 Tests/RunCMake/GeneratorExpression/BadZero-stderr.txt
create mode 100644 Tests/RunCMake/GeneratorExpression/BadZero.cmake
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list