mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 16:32:14 -06:00
list(REMOVE_ITEM): Make removal of an empty item a no-op.
Fixes: #21663
This commit is contained in:
@@ -422,9 +422,10 @@ bool HandleJoinCommand(std::vector<std::string> const& args,
|
||||
bool HandleRemoveItemCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() < 3) {
|
||||
status.SetError("sub-command REMOVE_ITEM requires two or more arguments.");
|
||||
return false;
|
||||
assert(args.size() >= 2);
|
||||
|
||||
if (args.size() == 2) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const std::string& listName = args[1];
|
||||
|
||||
@@ -142,9 +142,8 @@ set(Find-List-Only-STDERR "three")
|
||||
set(Insert-List-Only-STDERR "at least three")
|
||||
set(Length-List-Only-STDERR "two")
|
||||
set(Remove_At-List-Only-STDERR "at least two")
|
||||
set(Remove_Item-List-Only-STDERR "two or more")
|
||||
|
||||
foreach(cmd IN ITEMS Find Get Insert Length Remove_At Remove_Item)
|
||||
foreach(cmd IN ITEMS Find Get Insert Length Remove_At)
|
||||
string(TOUPPER ${cmd} cmd_upper)
|
||||
set(${cmd}-List-Only-RESULT 1)
|
||||
set(${cmd}-List-Only-STDERR ".*CMake Error at List-${cmd}-List-Only.cmake:1 \\(list\\):.*list sub-command ${cmd_upper} requires ${${cmd}-List-Only-STDERR} arguments.*")
|
||||
|
||||
5
Tests/RunCMake/list/REMOVE_ITEM-NoItemArg.cmake
Normal file
5
Tests/RunCMake/list/REMOVE_ITEM-NoItemArg.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
set(ls "a" "b" "c")
|
||||
list(REMOVE_ITEM ls alpha)
|
||||
if (NOT ls STREQUAL "a;b;c")
|
||||
message(FATAL_ERROR "list(REMOVE_ITEM) modified for empty item")
|
||||
endif ()
|
||||
@@ -30,6 +30,7 @@ run_cmake(FILTER-NotList)
|
||||
run_cmake(REMOVE_AT-NotList)
|
||||
run_cmake(REMOVE_DUPLICATES-NotList)
|
||||
run_cmake(REMOVE_ITEM-NotList)
|
||||
run_cmake(REMOVE_ITEM-NoItemArg)
|
||||
run_cmake(REVERSE-NotList)
|
||||
run_cmake(SORT-NotList)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user