فهرست منبع

cmake: Add IssueMessage overload taking a single cmListFileContext.

Port appropriate clients to use it.
Stephen Kelly 10 سال پیش
والد
کامیت
8b4b9631f5
4فایلهای تغییر یافته به همراه44 افزوده شده و 26 حذف شده
  1. 5 4
      Source/cmCommandArgumentParserHelper.cxx
  2. 18 22
      Source/cmMakefile.cxx
  3. 18 0
      Source/cmake.cxx
  4. 3 0
      Source/cmake.h

+ 5 - 4
Source/cmCommandArgumentParserHelper.cxx

@@ -14,6 +14,7 @@
 #include "cmSystemTools.h"
 #include "cmMakefile.h"
 #include "cmState.h"
+#include "cmLocalGenerator.h"
 
 #include "cmCommandArgumentLexer.h"
 
@@ -139,14 +140,14 @@ char* cmCommandArgumentParserHelper::ExpandVariable(const char* var)
                                      this->Makefile->GetHomeOutputDirectory()))
         {
         std::ostringstream msg;
-        cmListFileBacktrace bt(this->Makefile->GetLocalGenerator());
         cmListFileContext lfc;
-        lfc.FilePath = this->FileName;
+        lfc.FilePath = this->Makefile->GetLocalGenerator()
+            ->Convert(this->FileName, cmLocalGenerator::HOME);
+
         lfc.Line = this->FileLine;
-        bt.Append(lfc);
         msg << "uninitialized variable \'" << var << "\'";
         this->Makefile->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING,
-                                                        msg.str(), bt);
+                                                        msg.str(), lfc);
         }
       }
     return 0;

+ 18 - 22
Source/cmMakefile.cxx

@@ -249,19 +249,13 @@ void cmMakefile::IssueMessage(cmake::MessageType t,
                               std::string const& text) const
 {
   // Collect context information.
-  cmLocalGenerator* localGen = this->GetLocalGenerator();
-  if(this->CallStack.empty() && this->GetCMakeInstance()->GetIsInTryCompile())
-    {
-    localGen = 0;
-    }
-  cmListFileBacktrace backtrace(localGen);
   if(!this->CallStack.empty())
     {
     if((t == cmake::FATAL_ERROR) || (t == cmake::INTERNAL_ERROR))
       {
       this->CallStack.back().Status->SetNestedError(true);
       }
-    backtrace = this->GetBacktrace();
+    this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace());
     }
   else
     {
@@ -278,12 +272,15 @@ void cmMakefile::IssueMessage(cmake::MessageType t,
       // command.  Add whatever context information we have.
       lfc.FilePath = this->ListFileStack.back();
       }
+    if(!this->CallStack.empty()
+       || !this->GetCMakeInstance()->GetIsInTryCompile())
+      {
+      lfc.FilePath = this->LocalGenerator->Convert(lfc.FilePath,
+                                                   cmLocalGenerator::HOME);
+      }
     lfc.Line = 0;
-    backtrace.Append(lfc);
+    this->GetCMakeInstance()->IssueMessage(t, text, lfc);
     }
-
-  // Issue the message.
-  this->GetCMakeInstance()->IssueMessage(t, text, backtrace);
 }
 
 //----------------------------------------------------------------------------
@@ -1837,22 +1834,22 @@ void cmMakefile::LogUnused(const char* reason,
   if (this->WarnUnused)
     {
     std::string path;
-    cmListFileBacktrace bt(this->GetLocalGenerator());
+    cmListFileContext lfc;
     if (!this->CallStack.empty())
       {
-      cmListFileContext file = this->GetExecutionContext();
-      bt.Append(file);
-      path = file.FilePath;
+      lfc = this->GetExecutionContext();
+      path = lfc.FilePath;
       }
     else
       {
       path = this->GetCurrentSourceDirectory();
       path += "/CMakeLists.txt";
-      cmListFileContext lfc;
       lfc.FilePath = path;
       lfc.Line = 0;
-      bt.Append(lfc);
       }
+    lfc.FilePath = this->LocalGenerator->Convert(lfc.FilePath,
+                                                 cmLocalGenerator::HOME);
+
     if (this->CheckSystemVars ||
         cmSystemTools::IsSubDirectory(path,
                                       this->GetHomeDirectory()) ||
@@ -1865,7 +1862,7 @@ void cmMakefile::LogUnused(const char* reason,
       msg << "unused variable (" << reason << ") \'" << name << "\'";
       this->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING,
                                              msg.str(),
-                                             bt);
+                                             lfc);
       }
     }
 }
@@ -2769,14 +2766,13 @@ cmake::MessageType cmMakefile::ExpandVariablesInStringNew(
                                              this->GetHomeOutputDirectory()))
                 {
                 std::ostringstream msg;
-                cmListFileBacktrace bt(this->GetLocalGenerator());
                 cmListFileContext lfc;
-                lfc.FilePath = filename;
+                lfc.FilePath = this->LocalGenerator
+                    ->Convert(filename, cmLocalGenerator::HOME);
                 lfc.Line = line;
-                bt.Append(lfc);
                 msg << "uninitialized variable \'" << lookup << "\'";
                 this->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING,
-                                                       msg.str(), bt);
+                                                       msg.str(), lfc);
                 }
               }
             }

+ 18 - 0
Source/cmake.cxx

@@ -2552,6 +2552,24 @@ void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
   displayMessage(t, msg);
 }
 
+//----------------------------------------------------------------------------
+void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
+                         cmListFileContext const& lfc)
+{
+  std::ostringstream msg;
+  if (!this->PrintMessagePreamble(t, msg))
+    {
+    return;
+    }
+
+  // Add the immediate context.
+  msg << (lfc.Line ? " at " : " in ") << lfc;
+
+  printMessageText(msg, text);
+
+  displayMessage(t, msg);
+}
+
 //----------------------------------------------------------------------------
 std::vector<std::string> cmake::GetDebugConfigs()
 {

+ 3 - 0
Source/cmake.h

@@ -303,6 +303,9 @@ class cmake
   /** Display a message to the user.  */
   void IssueMessage(cmake::MessageType t, std::string const& text,
         cmListFileBacktrace const& backtrace = cmListFileBacktrace(NULL));
+  void IssueMessage(cmake::MessageType t, std::string const& text,
+        cmListFileContext const& lfc);
+
   ///! run the --build option
   int Build(const std::string& dir,
             const std::string& target,