diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index 6618e83e28..5d0619936e 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::const_iterator it = pit->begin(); const std::vector::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 0008c16564..9cd8a7f259 100644 --- a/Tests/GeneratorExpression/CMakeLists.txt +++ b/Tests/GeneratorExpression/CMakeLists.txt @@ -120,6 +120,16 @@ add_custom_target(check-part2 ALL -Dtest_target_includes6=$ -Dtest_target_includes7=$ -Dtest_target_includes8=$ + -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 3f7187ca24..a1db5f63d5 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,,")