Browse Source

ENH: DIsplay the list file stack when displaying errors

Andy Cedilnik 19 years ago
parent
commit
99f4edb4e4
2 changed files with 24 additions and 3 deletions
  1. 18 2
      Source/cmMakefile.cxx
  2. 6 1
      Source/cmMakefile.h

+ 18 - 2
Source/cmMakefile.cxx

@@ -267,7 +267,8 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff)
       cmOStringStream error;
       error << "Error in cmake code at\n"
             << lff.FilePath << ":" << lff.Line << ":\n"
-            << rm->GetError();
+            << rm->GetError() << std::endl
+            << "Current CMake stack: " << this->GetListFileStack().c_str();
       cmSystemTools::Error(error.str().c_str());
       return false;
       }
@@ -283,7 +284,8 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff)
         cmOStringStream error;
         error << "Error in cmake code at\n"
               << lff.FilePath << ":" << lff.Line << ":\n"
-              << usedCommand->GetError();
+              << usedCommand->GetError() << std::endl
+              << "Current CMake stack: " << this->GetListFileStack().c_str();
         cmSystemTools::Error(error.str().c_str());
         result = false;
         if ( this->GetCMakeInstance()->GetScriptMode() )
@@ -2743,3 +2745,17 @@ std::vector<cmTest*> *cmMakefile::GetTests()
   return &this->Tests;
 }
 
+std::string cmMakefile::GetListFileStack()
+{
+  std::string tmp;
+  for (std::deque<cmStdString>::iterator i = this->ListFileStack.begin();
+    i != this->ListFileStack.end(); ++i)
+    {
+    if (i != this->ListFileStack.begin())
+      {
+      tmp += ";";
+      }
+    tmp += *i;
+    }
+  return tmp;
+}

+ 6 - 1
Source/cmMakefile.h

@@ -538,7 +538,12 @@ public:
   ///! When the file changes cmake will be re-run from the build system.
   void AddCMakeDependFile(const char* file)
     { this->ListFiles.push_back(file);}
-  
+
+    /**
+     * Get the list file stack as a string
+     */
+    std::string GetListFileStack();
+
   /**
    * Get the vector of  files created by this makefile
    */