summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2013-05-02 07:02:01 (GMT)
committerStephen Kelly <steveire@gmail.com>2013-05-16 17:25:06 (GMT)
commit05bf9721e48f8fbf3b3b5338ec779ee5e344a6d0 (patch)
tree771762e9c751ac334c293edd9107b860b2d23c9f
parent272431a84ff13eb17cf04389428f57c7fe13e3a2 (diff)
downloadCMake-05bf9721e48f8fbf3b3b5338ec779ee5e344a6d0.zip
CMake-05bf9721e48f8fbf3b3b5338ec779ee5e344a6d0.tar.gz
CMake-05bf9721e48f8fbf3b3b5338ec779ee5e344a6d0.tar.bz2
Fix handling of commas in arbitrary content in genexes.
As the comma is the parameter separator, it needs to be re-added when evaluating to reconstruct arbitrary content.
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx9
-rw-r--r--Tests/GeneratorExpression/CMakeLists.txt10
-rw-r--r--Tests/GeneratorExpression/check-part2.cmake10
3 files changed, 24 insertions, 5 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 6618e83..5d06199 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -1051,11 +1051,6 @@ std::string GeneratorExpressionContent::Evaluate(
pend = this->ParamChildren.end();
for ( ; pit != pend; ++pit)
{
- if (!result.empty())
- {
- result += ",";
- }
-
std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it
= pit->begin();
const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end
@@ -1077,6 +1072,10 @@ std::string GeneratorExpressionContent::Evaluate(
return std::string();
}
}
+ if ((pit + 1) != pend)
+ {
+ result += ",";
+ }
}
if (node->RequiresLiteralInput())
{
diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index 0008c16..9cd8a7f 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -120,6 +120,16 @@ add_custom_target(check-part2 ALL
-Dtest_target_includes6=$<TARGET_PROPERTY:empty3,INCLUDE_DIRECTORIES>
-Dtest_target_includes7=$<TARGET_PROPERTY:empty1,INTERFACE_INCLUDE_DIRECTORIES>
-Dtest_target_includes8=$<TARGET_PROPERTY:empty5,INCLUDE_DIRECTORIES>
+ -Dtest_arbitrary_content_comma_1=$<1:a,>
+ -Dtest_arbitrary_content_comma_2=$<1:,a>
+ -Dtest_arbitrary_content_comma_3=$<1:a,,>
+ -Dtest_arbitrary_content_comma_4=$<1:,>
+ -Dtest_arbitrary_content_comma_5=$<1:,,>
+ -Dtest_arbitrary_content_comma_6=$<1:,,,>
+ -Dtest_arbitrary_content_comma_7=$<1:,,a>
+ -Dtest_arbitrary_content_comma_8=$<1:a,,b>
+ -Dtest_arbitrary_content_comma_9=$<1:a,,b,,>
+ -Dtest_arbitrary_content_comma_10=$<1:,,a,,b,,>
-P ${CMAKE_CURRENT_SOURCE_DIR}/check-part2.cmake
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 2)"
VERBATIM
diff --git a/Tests/GeneratorExpression/check-part2.cmake b/Tests/GeneratorExpression/check-part2.cmake
index 3f7187c..a1db5f6 100644
--- a/Tests/GeneratorExpression/check-part2.cmake
+++ b/Tests/GeneratorExpression/check-part2.cmake
@@ -34,3 +34,13 @@ check(test_target_includes5 "/empty2/public;/empty3/public;/empty2/public;/empty
check(test_target_includes6 "/empty3/public;/empty3/private;/empty2/public;/empty3/public;/empty4/public")
check(test_target_includes7 "/empty1/public;/empty2/public;/empty3/public;/empty4/public")
check(test_target_includes8 "/empty5/private1;/empty5/private2")
+check(test_arbitrary_content_comma_1 "a,")
+check(test_arbitrary_content_comma_2 ",a")
+check(test_arbitrary_content_comma_3 "a,,")
+check(test_arbitrary_content_comma_4 ",")
+check(test_arbitrary_content_comma_5 ",,")
+check(test_arbitrary_content_comma_6 ",,,")
+check(test_arbitrary_content_comma_7 ",,a")
+check(test_arbitrary_content_comma_8 "a,,b")
+check(test_arbitrary_content_comma_9 "a,,b,,")
+check(test_arbitrary_content_comma_10 ",,a,,b,,")