Browse Source

Merge branch 'list-empty-error' into enhance-include_external_msproject

Resolve conflict in Tests/RunCMake/CMakeLists.txt by adding both tests.
Brad King 13 years ago
parent
commit
8787f946b7

+ 14 - 1
Source/cmListCommand.cxx

@@ -204,6 +204,12 @@ bool cmListCommand::HandleGetCommand(std::vector<std::string> const& args)
     this->Makefile->AddDefinition(variableName.c_str(), "NOTFOUND");
     return true;
     }
+  // FIXME: Add policy to make non-existing lists an error like empty lists.
+  if(varArgsExpanded.empty())
+    {
+    this->SetError("GET given empty list");
+    return false;
+    }
 
   std::string value;
   size_t cc;
@@ -318,7 +324,8 @@ bool cmListCommand::HandleInsertCommand(std::vector<std::string> const& args)
   // expand the variable
   int item = atoi(args[2].c_str());
   std::vector<std::string> varArgsExpanded;
-  if ( !this->GetList(varArgsExpanded, listName.c_str()) && item != 0)
+  if((!this->GetList(varArgsExpanded, listName.c_str())
+      || varArgsExpanded.empty()) && item != 0)
     {
     cmOStringStream str;
     str << "index: " << item << " out of range (0, 0)";
@@ -544,6 +551,12 @@ bool cmListCommand::HandleRemoveAtCommand(
     this->SetError("sub-command REMOVE_AT requires list to be present.");
     return false;
     }
+  // FIXME: Add policy to make non-existing lists an error like empty lists.
+  if(varArgsExpanded.empty())
+    {
+    this->SetError("REMOVE_AT given empty list");
+    return false;
+    }
 
   size_t cc;
   std::vector<size_t> removed;

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -49,6 +49,7 @@ add_RunCMake_test(ObjectLibrary)
 
 add_RunCMake_test(build_command)
 add_RunCMake_test(find_package)
+add_RunCMake_test(list)
 
 if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
   add_RunCMake_test(include_external_msproject)

+ 3 - 0
Tests/RunCMake/list/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 1 - 0
Tests/RunCMake/list/EmptyGet0-result.txt

@@ -0,0 +1 @@
+1

+ 4 - 0
Tests/RunCMake/list/EmptyGet0-stderr.txt

@@ -0,0 +1,4 @@
+CMake Error at EmptyGet0.cmake:2 \(list\):
+  list GET given empty list
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)$

+ 2 - 0
Tests/RunCMake/list/EmptyGet0.cmake

@@ -0,0 +1,2 @@
+set(mylist "")
+list(GET mylist 0 result)

+ 1 - 0
Tests/RunCMake/list/EmptyInsert-1-result.txt

@@ -0,0 +1 @@
+1

+ 4 - 0
Tests/RunCMake/list/EmptyInsert-1-stderr.txt

@@ -0,0 +1,4 @@
+CMake Error at EmptyInsert-1.cmake:2 \(list\):
+  list index: -1 out of range \(0, 0\)
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)$

+ 2 - 0
Tests/RunCMake/list/EmptyInsert-1.cmake

@@ -0,0 +1,2 @@
+set(mylist "")
+list(INSERT mylist -1 x)

+ 1 - 0
Tests/RunCMake/list/EmptyRemoveAt0-result.txt

@@ -0,0 +1 @@
+1

+ 4 - 0
Tests/RunCMake/list/EmptyRemoveAt0-stderr.txt

@@ -0,0 +1,4 @@
+CMake Error at EmptyRemoveAt0.cmake:2 \(list\):
+  list REMOVE_AT given empty list
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)$

+ 2 - 0
Tests/RunCMake/list/EmptyRemoveAt0.cmake

@@ -0,0 +1,2 @@
+set(mylist "")
+list(REMOVE_AT mylist 0)

+ 5 - 0
Tests/RunCMake/list/RunCMakeTest.cmake

@@ -0,0 +1,5 @@
+include(RunCMake)
+
+run_cmake(EmptyGet0)
+run_cmake(EmptyRemoveAt0)
+run_cmake(EmptyInsert-1)