summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmListCommand.cxx18
-rw-r--r--Source/cmListCommand.h7
-rw-r--r--Tests/CMakeTests/ListTest.cmake.in10
3 files changed, 21 insertions, 14 deletions
diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx
index f0df03b..c00f6eb 100644
--- a/Source/cmListCommand.cxx
+++ b/Source/cmListCommand.cxx
@@ -42,9 +42,9 @@ bool cmListCommand::InitialPass(std::vector<std::string> const& args)
{
return this->HandleAppendCommand(args);
}
- if(subCommand == "CONTAINS")
+ if(subCommand == "FIND")
{
- return this->HandleContainsCommand(args);
+ return this->HandleFindCommand(args);
}
if(subCommand == "INSERT")
{
@@ -204,11 +204,11 @@ bool cmListCommand::HandleAppendCommand(std::vector<std::string> const& args)
}
//----------------------------------------------------------------------------
-bool cmListCommand::HandleContainsCommand(std::vector<std::string> const& args)
+bool cmListCommand::HandleFindCommand(std::vector<std::string> const& args)
{
if(args.size() != 4)
{
- this->SetError("sub-command CONTAINS requires three arguments.");
+ this->SetError("sub-command FIND requires three arguments.");
return false;
}
@@ -218,21 +218,25 @@ bool cmListCommand::HandleContainsCommand(std::vector<std::string> const& args)
std::vector<std::string> varArgsExpanded;
if ( !this->GetList(varArgsExpanded, listName.c_str()) )
{
- this->Makefile->AddDefinition(variableName.c_str(), "FALSE");
+ this->Makefile->AddDefinition(variableName.c_str(), "-1");
return true;
}
std::vector<std::string>::iterator it;
+ unsigned int index = 0;
for ( it = varArgsExpanded.begin(); it != varArgsExpanded.end(); ++ it )
{
if ( *it == args[2] )
{
- this->Makefile->AddDefinition(variableName.c_str(), "TRUE");
+ char indexString[32];
+ sprintf(indexString, "%d", index);
+ this->Makefile->AddDefinition(variableName.c_str(), indexString);
return true;
}
+ index++;
}
- this->Makefile->AddDefinition(variableName.c_str(), "FALSE");
+ this->Makefile->AddDefinition(variableName.c_str(), "-1");
return true;
}
diff --git a/Source/cmListCommand.h b/Source/cmListCommand.h
index d8a4688..a99604b 100644
--- a/Source/cmListCommand.h
+++ b/Source/cmListCommand.h
@@ -68,7 +68,7 @@ public:
" LIST(GET <list> <element index> [<element index> ...] "
"<output variable>)\n"
" LIST(APPEND <list> <element> [<element> ...])\n"
- " LIST(CONTAINS <list> <value> <output variable>)\n"
+ " LIST(FIND <list> <value> <output variable>)\n"
" LIST(INSERT <list> <element_index> <element> [<element> ...])\n"
" LIST(REMOVE_ITEM <list> <value> [<value> ...])\n"
" LIST(REMOVE_AT <list> <index> [<index> ...])\n"
@@ -77,7 +77,8 @@ public:
"LENGTH will return a given list's length.\n"
"GET will return list of elements specified by indices from the list.\n"
"APPEND will append elements to the list.\n"
- "CONTAINS will return TRUE if the element specified is in the list.\n"
+ "FIND will return the index of the element specified in the list or -1 "
+ "if it wasn't found.\n"
"INSERT will insert elements to the list to the specified location.\n"
"When specifying an index, negative value corresponds to index from the"
" end of the list.\n"
@@ -94,7 +95,7 @@ protected:
bool HandleLengthCommand(std::vector<std::string> const& args);
bool HandleGetCommand(std::vector<std::string> const& args);
bool HandleAppendCommand(std::vector<std::string> const& args);
- bool HandleContainsCommand(std::vector<std::string> const& args);
+ bool HandleFindCommand(std::vector<std::string> const& args);
bool HandleInsertCommand(std::vector<std::string> const& args);
bool HandleRemoveAtCommand(std::vector<std::string> const& args);
bool HandleRemoveItemCommand(std::vector<std::string> const& args);
diff --git a/Tests/CMakeTests/ListTest.cmake.in b/Tests/CMakeTests/ListTest.cmake.in
index 38fea14..eea0da0 100644
--- a/Tests/CMakeTests/ListTest.cmake.in
+++ b/Tests/CMakeTests/ListTest.cmake.in
@@ -67,11 +67,13 @@ SET(result andy bill bob brad ken peter)
LIST(REMOVE_AT result 2 -1)
TEST("REMOVE_AT result 2 -1" "andy;bill;brad;ken")
-LIST(CONTAINS mylist ken result)
-TEST("CONTAINS mylist ken result" "TRUE")
+# ken is at index 2, nobody is not in the list so -1 should be returned
+SET(mylist andy bill ken brad)
+LIST(FIND mylist ken result)
+TEST("FIND mylist ken result" "2")
-LIST(CONTAINS mylist nobody result)
-TEST("CONTAINS mylist nobody result" "FALSE")
+LIST(FIND mylist nobody result)
+TEST("FIND mylist nobody result" "-1")
SET(result ken bill andy brad)
LIST(SORT result)