Browse Source

Merge topic 'fix-genex-comma-parse'

05bf972 Fix handling of commas in arbitrary content in genexes.
Brad King 12 years ago
parent
commit
d2cd362c31

+ 4 - 5
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())
       {

+ 10 - 0
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

+ 10 - 0
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,,")