From 861dd60ecf2e2bbe133708ea5bc55018931ee050 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 12 Jul 2023 11:35:39 -0400 Subject: Genex: Restore REMOVE_DUPLICATES preservation of empty elements Refactoring in commit 72d116ee68 (GenEx: list oriented genexes use cmList class, 2023-03-29, v3.27.0-rc1~205^2) accidentally caused empty elements to be dropped by the `REMOVE_DUPLICATES` genex. Fix it and add a test case. Fixes: #25080 --- Source/cmGeneratorExpressionNode.cxx | 4 +++- .../GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake | 6 ++++++ .../GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake | 3 +++ Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index bb4fc7e..7fe814a 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -384,7 +384,9 @@ static const struct RemoveDuplicatesNode : public cmGeneratorExpressionNode "$ expression requires one parameter"); } - return cmList{ parameters.front() }.remove_duplicates().to_string(); + return cmList{ parameters.front(), cmList::EmptyElements::Yes } + .remove_duplicates() + .to_string(); } } removeDuplicatesNode; diff --git a/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake new file mode 100644 index 0000000..a996e53 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/REMOVE_DUPLICATES-generated.txt" content) + +set(expected "1;;2;3") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake new file mode 100644 index 0000000..9d5944f --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake @@ -0,0 +1,3 @@ +cmake_policy(VERSION 3.11) + +file(GENERATE OUTPUT "REMOVE_DUPLICATES-generated.txt" CONTENT "$$2$$3>") diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake index 3fd9947..2a0c893 100644 --- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake +++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake @@ -36,6 +36,7 @@ run_cmake(TARGET_NAME_IF_EXISTS-alias-target) run_cmake(TARGET_NAME_IF_EXISTS-imported-target) run_cmake(TARGET_NAME_IF_EXISTS-imported-global-target) run_cmake(REMOVE_DUPLICATES-empty) +run_cmake(REMOVE_DUPLICATES-empty-element) run_cmake(REMOVE_DUPLICATES-1) run_cmake(REMOVE_DUPLICATES-2) run_cmake(REMOVE_DUPLICATES-3) -- cgit v0.12