Browse Source

BUG: fix cmake listfile stack: if a file could not be opened, remove it from
the stack (usually CMakeCInformation.cmake and CMakeCXXInformation.cmake
which both put Linux-gcc.cmake on the stack without removing it again:
INCLUDE(... OPTIONAL) )
STYLE: better readable output formatting of the listfile stack, now in the
same order as in gdb or with include files

Alex

Alexander Neundorf 18 years ago
parent
commit
ef0b9ff2cc
1 changed files with 15 additions and 10 deletions
  1. 15 10
      Source/cmMakefile.cxx

+ 15 - 10
Source/cmMakefile.cxx

@@ -446,10 +446,12 @@ bool cmMakefile::ReadListFile(const char* filename_in,
       
   // push the listfile onto the stack
   this->ListFileStack.push_back(filenametoread);
-  
+
   cmListFile cacheFile;
   if( !cacheFile.ParseFile(filenametoread, requireProjectCommand) )
     {
+    // pop the listfile off the stack
+    this->ListFileStack.pop_back();
     this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentParentFile.c_str());
     this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
     return false;
@@ -2753,17 +2755,20 @@ std::vector<cmTest*> *cmMakefile::GetTests()
 
 std::string cmMakefile::GetListFileStack()
 {
-  std::string tmp;
-  for (std::deque<cmStdString>::iterator i = this->ListFileStack.begin();
-    i != this->ListFileStack.end(); ++i)
+  cmOStringStream tmp;
+  unsigned int depth = this->ListFileStack.size();
+  std::deque<cmStdString>::iterator it = this->ListFileStack.end();
+  do
     {
-    if (i != this->ListFileStack.begin())
-      {
-      tmp += ";";
-      }
-    tmp += *i;
+    --it;
+    tmp << "\n[";
+    tmp << depth;
+    tmp << "]\t";
+    tmp << *it;
+    depth--;
     }
-  return tmp;
+  while (it != this->ListFileStack.begin());
+  return tmp.str();
 }
 
 // define properties