Просмотр исходного кода

Merge topic 'extract-cmMessenger'

1462576b Parser: Port away from cmMakefile
421012a3 cmMessenger: Extract from cmake class
14a8d61f cmMakefile: Port nested error logic away from cmExecutionStatus
2af853de cmMakefile: Simplify IssueMessage implementation
33bb9cfa Parser: Issue messages through cmake, not cmSystemTools
db7de303 Parser: Store the Backtrace for use in issuing messages
Brad King 9 лет назад
Родитель
Сommit
a79abb82fe
33 измененных файлов с 435 добавлено и 348 удалено
  1. 2 0
      Source/CMakeLists.txt
  2. 0 4
      Source/cmExecutionStatus.h
  3. 3 3
      Source/cmFunctionCommand.cxx
  4. 51 38
      Source/cmListFileCache.cxx
  5. 3 2
      Source/cmListFileCache.h
  6. 2 2
      Source/cmMacroCommand.cxx
  7. 23 12
      Source/cmMakefile.cxx
  8. 1 0
      Source/cmMakefile.h
  9. 4 2
      Source/cmMessageCommand.cxx
  10. 209 0
      Source/cmMessenger.cxx
  11. 44 0
      Source/cmMessenger.h
  12. 13 163
      Source/cmake.cxx
  13. 4 3
      Source/cmake.h
  14. 4 7
      Tests/RunCMake/Syntax/BracketComment4-stderr.txt
  15. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace0-stderr.txt
  16. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace1-stderr.txt
  17. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace2-stderr.txt
  18. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace3-stderr.txt
  19. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace4-stderr.txt
  20. 2 4
      Tests/RunCMake/Syntax/BracketNoSpace5-stderr.txt
  21. 5 7
      Tests/RunCMake/Syntax/CommandError0-stderr.txt
  22. 4 7
      Tests/RunCMake/Syntax/CommandError1-stderr.txt
  23. 5 7
      Tests/RunCMake/Syntax/CommandError2-stderr.txt
  24. 3 5
      Tests/RunCMake/Syntax/ParenInENV-stderr.txt
  25. 6 12
      Tests/RunCMake/Syntax/ParenNoSpace1-stderr.txt
  26. 4 8
      Tests/RunCMake/Syntax/StringNoSpace-stderr.txt
  27. 6 7
      Tests/RunCMake/Syntax/UnterminatedBracket0-stderr.txt
  28. 6 7
      Tests/RunCMake/Syntax/UnterminatedBracket1-stderr.txt
  29. 6 7
      Tests/RunCMake/Syntax/UnterminatedBracketComment-stderr.txt
  30. 4 7
      Tests/RunCMake/Syntax/UnterminatedCall1-stderr.txt
  31. 4 7
      Tests/RunCMake/Syntax/UnterminatedCall2-stderr.txt
  32. 6 7
      Tests/RunCMake/Syntax/UnterminatedString-stderr.txt
  33. 1 0
      bootstrap

+ 2 - 0
Source/CMakeLists.txt

@@ -319,6 +319,8 @@ set(SRCS
   cmMakefileExecutableTargetGenerator.cxx
   cmMakefileLibraryTargetGenerator.cxx
   cmMakefileUtilityTargetGenerator.cxx
+  cmMessenger.cxx
+  cmMessenger.h
   cmOSXBundleGenerator.cxx
   cmOSXBundleGenerator.h
   cmOutputConverter.cxx

+ 0 - 4
Source/cmExecutionStatus.h

@@ -38,16 +38,12 @@ public:
     this->ReturnInvoked = false;
     this->BreakInvoked = false;
     this->ContinueInvoked = false;
-    this->NestedError = false;
   }
-  void SetNestedError(bool val) { this->NestedError = val; }
-  bool GetNestedError() { return this->NestedError; }
 
 private:
   bool ReturnInvoked;
   bool BreakInvoked;
   bool ContinueInvoked;
-  bool NestedError;
 };
 
 #endif

+ 3 - 3
Source/cmFunctionCommand.cxx

@@ -76,7 +76,7 @@ public:
 };
 
 bool cmFunctionHelperCommand::InvokeInitialPass(
-  const std::vector<cmListFileArgument>& args, cmExecutionStatus& inStatus)
+  const std::vector<cmListFileArgument>& args, cmExecutionStatus&)
 {
   // Expand the argument list to the function.
   std::vector<std::string> expandedArgs;
@@ -129,11 +129,11 @@ bool cmFunctionHelperCommand::InvokeInitialPass(
   for (unsigned int c = 0; c < this->Functions.size(); ++c) {
     cmExecutionStatus status;
     if (!this->Makefile->ExecuteCommand(this->Functions[c], status) ||
-        status.GetNestedError()) {
+        (cmSystemTools::GetErrorOccuredFlag() &&
+         !cmSystemTools::GetFatalErrorOccured())) {
       // The error message should have already included the call stack
       // so we do not need to report an error here.
       functionScope.Quiet();
-      inStatus.SetNestedError(true);
       return false;
     }
     if (status.GetReturnInvoked()) {

+ 51 - 38
Source/cmListFileCache.cxx

@@ -12,7 +12,7 @@
 #include "cmListFileCache.h"
 
 #include "cmListFileLexer.h"
-#include "cmMakefile.h"
+#include "cmMessenger.h"
 #include "cmOutputConverter.h"
 #include "cmSystemTools.h"
 #include "cmVersion.h"
@@ -21,15 +21,18 @@
 
 struct cmListFileParser
 {
-  cmListFileParser(cmListFile* lf, cmMakefile* mf, const char* filename);
+  cmListFileParser(cmListFile* lf, cmListFileBacktrace lfbt,
+                   cmMessenger* messenger, const char* filename);
   ~cmListFileParser();
   void IssueFileOpenError(std::string const& text) const;
+  void IssueError(std::string const& text) const;
   bool ParseFile();
   bool ParseFunction(const char* name, long line);
   bool AddArgument(cmListFileLexer_Token* token,
                    cmListFileArgument::Delimiter delim);
   cmListFile* ListFile;
-  cmMakefile* Makefile;
+  cmListFileBacktrace Backtrace;
+  cmMessenger* Messenger;
   const char* FileName;
   cmListFileLexer* Lexer;
   cmListFileFunction Function;
@@ -41,10 +44,12 @@ struct cmListFileParser
   } Separation;
 };
 
-cmListFileParser::cmListFileParser(cmListFile* lf, cmMakefile* mf,
+cmListFileParser::cmListFileParser(cmListFile* lf, cmListFileBacktrace lfbt,
+                                   cmMessenger* messenger,
                                    const char* filename)
   : ListFile(lf)
-  , Makefile(mf)
+  , Backtrace(lfbt)
+  , Messenger(messenger)
   , FileName(filename)
   , Lexer(cmListFileLexer_New())
 {
@@ -57,7 +62,18 @@ cmListFileParser::~cmListFileParser()
 
 void cmListFileParser::IssueFileOpenError(const std::string& text) const
 {
-  this->Makefile->IssueMessage(cmake::FATAL_ERROR, text);
+  this->Messenger->IssueMessage(cmake::FATAL_ERROR, text, this->Backtrace);
+}
+
+void cmListFileParser::IssueError(const std::string& text) const
+{
+  cmListFileContext lfc;
+  lfc.FilePath = this->FileName;
+  lfc.Line = cmListFileLexer_GetCurrentLine(this->Lexer);
+  cmListFileBacktrace lfbt = this->Backtrace;
+  lfbt = lfbt.Push(lfc);
+  this->Messenger->IssueMessage(cmake::FATAL_ERROR, text, lfbt);
+  cmSystemTools::SetFatalErrorOccured();
 }
 
 bool cmListFileParser::ParseFile()
@@ -96,29 +112,26 @@ bool cmListFileParser::ParseFile()
         }
       } else {
         std::ostringstream error;
-        error << "Error in cmake code at\n"
-              << this->FileName << ":" << token->line << ":\n"
-              << "Parse error.  Expected a newline, got "
+        error << "Parse error.  Expected a newline, got "
               << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
               << " with text \"" << token->text << "\".";
-        cmSystemTools::Error(error.str().c_str());
+        this->IssueError(error.str());
         return false;
       }
     } else {
       std::ostringstream error;
-      error << "Error in cmake code at\n"
-            << this->FileName << ":" << token->line << ":\n"
-            << "Parse error.  Expected a command name, got "
+      error << "Parse error.  Expected a command name, got "
             << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
             << " with text \"" << token->text << "\".";
-      cmSystemTools::Error(error.str().c_str());
+      this->IssueError(error.str());
       return false;
     }
   }
   return true;
 }
 
-bool cmListFile::ParseFile(const char* filename, cmMakefile* mf)
+bool cmListFile::ParseFile(const char* filename, cmMessenger* messenger,
+                           cmListFileBacktrace const& lfbt)
 {
   if (!cmSystemTools::FileExists(filename) ||
       cmSystemTools::FileIsDirectory(filename)) {
@@ -128,7 +141,7 @@ bool cmListFile::ParseFile(const char* filename, cmMakefile* mf)
   bool parseError = false;
 
   {
-    cmListFileParser parser(this, mf, filename);
+    cmListFileParser parser(this, lfbt, messenger, filename);
     parseError = !parser.ParseFile();
   }
 
@@ -154,18 +167,15 @@ bool cmListFileParser::ParseFunction(const char* name, long line)
           << cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
           << "Parse error.  Function missing opening \"(\".";
     /* clang-format on */
-    cmSystemTools::Error(error.str().c_str());
+    this->IssueError(error.str());
     return false;
   }
   if (token->type != cmListFileLexer_Token_ParenLeft) {
     std::ostringstream error;
-    error << "Error in cmake code at\n"
-          << this->FileName << ":"
-          << cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
-          << "Parse error.  Expected \"(\", got "
+    error << "Parse error.  Expected \"(\", got "
           << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
           << " with text \"" << token->text << "\".";
-    cmSystemTools::Error(error.str().c_str());
+    this->IssueError(error.str());
     return false;
   }
 
@@ -217,25 +227,24 @@ bool cmListFileParser::ParseFunction(const char* name, long line)
     } else {
       // Error.
       std::ostringstream error;
-      error << "Error in cmake code at\n"
-            << this->FileName << ":"
-            << cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
-            << "Parse error.  Function missing ending \")\".  "
+      error << "Parse error.  Function missing ending \")\".  "
             << "Instead found "
             << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
             << " with text \"" << token->text << "\".";
-      cmSystemTools::Error(error.str().c_str());
+      this->IssueError(error.str());
       return false;
     }
   }
 
   std::ostringstream error;
-  error << "Error in cmake code at\n"
-        << this->FileName << ":" << lastLine << ":\n"
-        << "Parse error.  Function missing ending \")\".  "
+  cmListFileContext lfc;
+  lfc.FilePath = this->FileName;
+  lfc.Line = lastLine;
+  cmListFileBacktrace lfbt = this->Backtrace;
+  lfbt = lfbt.Push(lfc);
+  error << "Parse error.  Function missing ending \")\".  "
         << "End of file reached.";
-  cmSystemTools::Error(error.str().c_str());
-
+  this->Messenger->IssueMessage(cmake::FATAL_ERROR, error.str(), lfbt);
   return false;
 }
 
@@ -250,17 +259,21 @@ bool cmListFileParser::AddArgument(cmListFileLexer_Token* token,
   bool isError = (this->Separation == SeparationError ||
                   delim == cmListFileArgument::Bracket);
   std::ostringstream m;
-  /* clang-format off */
-  m << "Syntax " << (isError? "Error":"Warning") << " in cmake code at\n"
-    << "  " << this->FileName << ":" << token->line << ":"
-    << token->column << "\n"
+  cmListFileContext lfc;
+  lfc.FilePath = this->FileName;
+  lfc.Line = token->line;
+  cmListFileBacktrace lfbt = this->Backtrace;
+  lfbt = lfbt.Push(lfc);
+
+  m << "Syntax " << (isError ? "Error" : "Warning") << " in cmake code at "
+    << "column " << token->column << "\n"
     << "Argument not separated from preceding token by whitespace.";
   /* clang-format on */
   if (isError) {
-    this->Makefile->IssueMessage(cmake::FATAL_ERROR, m.str());
+    this->Messenger->IssueMessage(cmake::FATAL_ERROR, m.str(), lfbt);
     return false;
   }
-  this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, m.str());
+  this->Messenger->IssueMessage(cmake::AUTHOR_WARNING, m.str(), lfbt);
   return true;
 }
 

+ 3 - 2
Source/cmListFileCache.h

@@ -23,7 +23,7 @@
  * cmake list files.
  */
 
-class cmMakefile;
+class cmMessenger;
 
 struct cmCommandContext
 {
@@ -158,7 +158,8 @@ private:
 
 struct cmListFile
 {
-  bool ParseFile(const char* path, cmMakefile* mf);
+  bool ParseFile(const char* path, cmMessenger* messenger,
+                 cmListFileBacktrace const& lfbt);
 
   std::vector<cmListFileFunction> Functions;
 };

+ 2 - 2
Source/cmMacroCommand.cxx

@@ -159,11 +159,11 @@ bool cmMacroHelperCommand::InvokeInitialPass(
     }
     cmExecutionStatus status;
     if (!this->Makefile->ExecuteCommand(newLFF, status) ||
-        status.GetNestedError()) {
+        (cmSystemTools::GetErrorOccuredFlag() &&
+         !cmSystemTools::GetFatalErrorOccured())) {
       // The error message should have already included the call stack
       // so we do not need to report an error here.
       macroScope.Quiet();
-      inStatus.SetNestedError(true);
       return false;
     }
     if (status.GetReturnInvoked()) {

+ 23 - 12
Source/cmMakefile.cxx

@@ -25,6 +25,7 @@
 #include "cmGlobalGenerator.h"
 #include "cmInstallGenerator.h"
 #include "cmListFileCache.h"
+#include "cmMessenger.h"
 #include "cmSourceFile.h"
 #include "cmSourceFileLocation.h"
 #include "cmState.h"
@@ -115,12 +116,6 @@ cmMakefile::~cmMakefile()
 void cmMakefile::IssueMessage(cmake::MessageType t,
                               std::string const& text) const
 {
-  // Collect context information.
-  if (!this->ExecutionStatusStack.empty()) {
-    if ((t == cmake::FATAL_ERROR) || (t == cmake::INTERNAL_ERROR)) {
-      this->ExecutionStatusStack.back()->SetNestedError(true);
-    }
-  }
   this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace());
 }
 
@@ -281,11 +276,19 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
       if (this->GetCMakeInstance()->GetTrace()) {
         this->PrintCommandTrace(lff);
       }
-      // Try invoking the command.
+
+      bool hadPreviousNonFatalError = cmSystemTools::GetErrorOccuredFlag() &&
+        !cmSystemTools::GetFatalErrorOccured();
+      cmSystemTools::ResetErrorOccuredFlag();
+
       bool invokeSucceeded = pcmd->InvokeInitialPass(lff.Arguments, status);
-      bool hadNestedError = status.GetNestedError();
+      bool hadNestedError = cmSystemTools::GetErrorOccuredFlag() &&
+        !cmSystemTools::GetFatalErrorOccured();
+      if (hadPreviousNonFatalError) {
+        cmSystemTools::SetErrorOccured();
+      }
       if (!invokeSucceeded || hadNestedError) {
-        if (!hadNestedError) {
+        if (!hadNestedError && !cmSystemTools::GetFatalErrorOccured()) {
           // The command invocation requested that we report an error.
           this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError());
         }
@@ -455,7 +458,8 @@ bool cmMakefile::ReadDependentFile(const char* filename, bool noPolicyScope)
   IncludeScope incScope(this, filenametoread, noPolicyScope);
 
   cmListFile listFile;
-  if (!listFile.ParseFile(filenametoread.c_str(), this)) {
+  if (!listFile.ParseFile(filenametoread.c_str(), this->GetMessenger(),
+                          this->Backtrace)) {
     return false;
   }
 
@@ -504,7 +508,8 @@ bool cmMakefile::ReadListFile(const char* filename)
   ListFileScope scope(this, filenametoread);
 
   cmListFile listFile;
-  if (!listFile.ParseFile(filenametoread.c_str(), this)) {
+  if (!listFile.ParseFile(filenametoread.c_str(), this->GetMessenger(),
+                          this->Backtrace)) {
     return false;
   }
 
@@ -1450,7 +1455,8 @@ void cmMakefile::Configure()
   this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentStart.c_str());
 
   cmListFile listFile;
-  if (!listFile.ParseFile(currentStart.c_str(), this)) {
+  if (!listFile.ParseFile(currentStart.c_str(), this->GetMessenger(),
+                          this->Backtrace)) {
     return;
   }
   if (this->IsRootMakefile()) {
@@ -3272,6 +3278,11 @@ cmake* cmMakefile::GetCMakeInstance() const
   return this->GlobalGenerator->GetCMakeInstance();
 }
 
+cmMessenger* cmMakefile::GetMessenger() const
+{
+  return this->GetCMakeInstance()->GetMessenger();
+}
+
 cmGlobalGenerator* cmMakefile::GetGlobalGenerator() const
 {
   return this->GlobalGenerator;

+ 1 - 0
Source/cmMakefile.h

@@ -607,6 +607,7 @@ public:
    * Get the instance
    */
   cmake* GetCMakeInstance() const;
+  cmMessenger* GetMessenger() const;
   cmGlobalGenerator* GetGlobalGenerator() const;
 
   /**

+ 4 - 2
Source/cmMessageCommand.cxx

@@ -11,6 +11,8 @@
 ============================================================================*/
 #include "cmMessageCommand.h"
 
+#include "cmMessenger.h"
+
 // cmLibraryCommand
 bool cmMessageCommand::InitialPass(std::vector<std::string> const& args,
                                    cmExecutionStatus&)
@@ -65,8 +67,8 @@ bool cmMessageCommand::InitialPass(std::vector<std::string> const& args,
 
   if (type != cmake::MESSAGE) {
     // we've overriden the message type, above, so display it directly
-    cmake* cm = this->Makefile->GetCMakeInstance();
-    cm->DisplayMessage(type, message, this->Makefile->GetBacktrace());
+    cmMessenger* m = this->Makefile->GetMessenger();
+    m->DisplayMessage(type, message, this->Makefile->GetBacktrace());
   } else {
     if (status) {
       this->Makefile->DisplayStatus(message.c_str(), -1);

+ 209 - 0
Source/cmMessenger.cxx

@@ -0,0 +1,209 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+
+#include "cmMessenger.h"
+#include "cmDocumentationFormatter.h"
+#include "cmMessenger.h"
+#include "cmOutputConverter.h"
+
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/SystemInformation.hxx>
+#endif
+
+cmake::MessageType cmMessenger::ConvertMessageType(cmake::MessageType t) const
+{
+  bool warningsAsErrors;
+
+  if (t == cmake::AUTHOR_WARNING || t == cmake::AUTHOR_ERROR) {
+    warningsAsErrors = this->GetDevWarningsAsErrors();
+    if (warningsAsErrors && t == cmake::AUTHOR_WARNING) {
+      t = cmake::AUTHOR_ERROR;
+    } else if (!warningsAsErrors && t == cmake::AUTHOR_ERROR) {
+      t = cmake::AUTHOR_WARNING;
+    }
+  } else if (t == cmake::DEPRECATION_WARNING ||
+             t == cmake::DEPRECATION_ERROR) {
+    warningsAsErrors = this->GetDeprecatedWarningsAsErrors();
+    if (warningsAsErrors && t == cmake::DEPRECATION_WARNING) {
+      t = cmake::DEPRECATION_ERROR;
+    } else if (!warningsAsErrors && t == cmake::DEPRECATION_ERROR) {
+      t = cmake::DEPRECATION_WARNING;
+    }
+  }
+
+  return t;
+}
+
+bool cmMessenger::IsMessageTypeVisible(cmake::MessageType t) const
+{
+  bool isVisible = true;
+
+  if (t == cmake::DEPRECATION_ERROR) {
+    if (!this->GetDeprecatedWarningsAsErrors()) {
+      isVisible = false;
+    }
+  } else if (t == cmake::DEPRECATION_WARNING) {
+    if (this->GetSuppressDeprecatedWarnings()) {
+      isVisible = false;
+    }
+  } else if (t == cmake::AUTHOR_ERROR) {
+    if (!this->GetDevWarningsAsErrors()) {
+      isVisible = false;
+    }
+  } else if (t == cmake::AUTHOR_WARNING) {
+    if (this->GetSuppressDevWarnings()) {
+      isVisible = false;
+    }
+  }
+
+  return isVisible;
+}
+
+static bool printMessagePreamble(cmake::MessageType t, std::ostream& msg)
+{
+  // Construct the message header.
+  if (t == cmake::FATAL_ERROR) {
+    msg << "CMake Error";
+  } else if (t == cmake::INTERNAL_ERROR) {
+    msg << "CMake Internal Error (please report a bug)";
+  } else if (t == cmake::LOG) {
+    msg << "CMake Debug Log";
+  } else if (t == cmake::DEPRECATION_ERROR) {
+    msg << "CMake Deprecation Error";
+  } else if (t == cmake::DEPRECATION_WARNING) {
+    msg << "CMake Deprecation Warning";
+  } else if (t == cmake::AUTHOR_WARNING) {
+    msg << "CMake Warning (dev)";
+  } else if (t == cmake::AUTHOR_ERROR) {
+    msg << "CMake Error (dev)";
+  } else {
+    msg << "CMake Warning";
+  }
+  return true;
+}
+
+void printMessageText(std::ostream& msg, std::string const& text)
+{
+  msg << ":\n";
+  cmDocumentationFormatter formatter;
+  formatter.SetIndent("  ");
+  formatter.PrintFormatted(msg, text.c_str());
+}
+
+void displayMessage(cmake::MessageType t, std::ostringstream& msg)
+{
+  // Add a note about warning suppression.
+  if (t == cmake::AUTHOR_WARNING) {
+    msg << "This warning is for project developers.  Use -Wno-dev to suppress "
+           "it.";
+  } else if (t == cmake::AUTHOR_ERROR) {
+    msg << "This error is for project developers. Use -Wno-error=dev to "
+           "suppress "
+           "it.";
+  }
+
+  // Add a terminating blank line.
+  msg << "\n";
+
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+  // Add a C++ stack trace to internal errors.
+  if (t == cmake::INTERNAL_ERROR) {
+    std::string stack = cmsys::SystemInformation::GetProgramStack(0, 0);
+    if (!stack.empty()) {
+      if (cmHasLiteralPrefix(stack, "WARNING:")) {
+        stack = "Note:" + stack.substr(8);
+      }
+      msg << stack << "\n";
+    }
+  }
+#endif
+
+  // Output the message.
+  if (t == cmake::FATAL_ERROR || t == cmake::INTERNAL_ERROR ||
+      t == cmake::DEPRECATION_ERROR || t == cmake::AUTHOR_ERROR) {
+    cmSystemTools::SetErrorOccured();
+    cmSystemTools::Message(msg.str().c_str(), "Error");
+  } else {
+    cmSystemTools::Message(msg.str().c_str(), "Warning");
+  }
+}
+
+cmMessenger::cmMessenger(cmState* state)
+  : State(state)
+{
+}
+
+void cmMessenger::IssueMessage(cmake::MessageType t, const std::string& text,
+                               const cmListFileBacktrace& backtrace) const
+{
+  bool force = false;
+  if (!force) {
+    // override the message type, if needed, for warnings and errors
+    cmake::MessageType override = this->ConvertMessageType(t);
+    if (override != t) {
+      t = override;
+      force = true;
+    }
+  }
+
+  if (!force && !this->IsMessageTypeVisible(t)) {
+    return;
+  }
+  this->DisplayMessage(t, text, backtrace);
+}
+
+void cmMessenger::DisplayMessage(cmake::MessageType t, const std::string& text,
+                                 const cmListFileBacktrace& backtrace) const
+{
+  std::ostringstream msg;
+  if (!printMessagePreamble(t, msg)) {
+    return;
+  }
+
+  // Add the immediate context.
+  backtrace.PrintTitle(msg);
+
+  printMessageText(msg, text);
+
+  // Add the rest of the context.
+  backtrace.PrintCallStack(msg);
+
+  displayMessage(t, msg);
+}
+
+bool cmMessenger::GetSuppressDevWarnings() const
+{
+  const char* cacheEntryValue =
+    this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_WARNINGS");
+  return cmSystemTools::IsOn(cacheEntryValue);
+}
+
+bool cmMessenger::GetSuppressDeprecatedWarnings() const
+{
+  const char* cacheEntryValue =
+    this->State->GetCacheEntryValue("CMAKE_WARN_DEPRECATED");
+  return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
+}
+
+bool cmMessenger::GetDevWarningsAsErrors() const
+{
+  const char* cacheEntryValue =
+    this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_ERRORS");
+  return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
+}
+
+bool cmMessenger::GetDeprecatedWarningsAsErrors() const
+{
+  const char* cacheEntryValue =
+    this->State->GetCacheEntryValue("CMAKE_ERROR_DEPRECATED");
+  return cmSystemTools::IsOn(cacheEntryValue);
+}

+ 44 - 0
Source/cmMessenger.h

@@ -0,0 +1,44 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+
+#ifndef cmMessenger_h
+#define cmMessenger_h
+
+#include "cmListFileCache.h"
+#include "cmState.h"
+#include "cmake.h"
+
+class cmMessenger
+{
+public:
+  cmMessenger(cmState* state);
+
+  void IssueMessage(
+    cmake::MessageType t, std::string const& text,
+    cmListFileBacktrace const& backtrace = cmListFileBacktrace()) const;
+
+  void DisplayMessage(cmake::MessageType t, std::string const& text,
+                      cmListFileBacktrace const& backtrace) const;
+
+  bool GetSuppressDevWarnings() const;
+  bool GetSuppressDeprecatedWarnings() const;
+  bool GetDevWarningsAsErrors() const;
+  bool GetDeprecatedWarningsAsErrors() const;
+
+private:
+  bool IsMessageTypeVisible(cmake::MessageType t) const;
+  cmake::MessageType ConvertMessageType(cmake::MessageType t) const;
+
+  cmState* State;
+};
+
+#endif

+ 13 - 163
Source/cmake.cxx

@@ -19,6 +19,7 @@
 #include "cmFileTimeComparison.h"
 #include "cmLocalGenerator.h"
 #include "cmMakefile.h"
+#include "cmMessenger.h"
 #include "cmSourceFile.h"
 #include "cmState.h"
 #include "cmTest.h"
@@ -152,6 +153,7 @@ cmake::cmake()
 
   this->State = new cmState;
   this->CurrentSnapshot = this->State->CreateBaseSnapshot();
+  this->Messenger = new cmMessenger(this->State);
 
 #ifdef __APPLE__
   struct rlimit rlp;
@@ -207,6 +209,7 @@ cmake::cmake()
 cmake::~cmake()
 {
   delete this->State;
+  delete this->Messenger;
   if (this->GlobalGenerator) {
     delete this->GlobalGenerator;
     this->GlobalGenerator = CM_NULLPTR;
@@ -2281,160 +2284,10 @@ static bool cmakeCheckStampList(const char* stampList)
   return true;
 }
 
-cmake::MessageType cmake::ConvertMessageType(cmake::MessageType t) const
-{
-  bool warningsAsErrors;
-
-  if (t == cmake::AUTHOR_WARNING || t == cmake::AUTHOR_ERROR) {
-    warningsAsErrors = this->GetDevWarningsAsErrors();
-    if (warningsAsErrors && t == cmake::AUTHOR_WARNING) {
-      t = cmake::AUTHOR_ERROR;
-    } else if (!warningsAsErrors && t == cmake::AUTHOR_ERROR) {
-      t = cmake::AUTHOR_WARNING;
-    }
-  } else if (t == cmake::DEPRECATION_WARNING ||
-             t == cmake::DEPRECATION_ERROR) {
-    warningsAsErrors = this->GetDeprecatedWarningsAsErrors();
-    if (warningsAsErrors && t == cmake::DEPRECATION_WARNING) {
-      t = cmake::DEPRECATION_ERROR;
-    } else if (!warningsAsErrors && t == cmake::DEPRECATION_ERROR) {
-      t = cmake::DEPRECATION_WARNING;
-    }
-  }
-
-  return t;
-}
-
-bool cmake::IsMessageTypeVisible(cmake::MessageType t) const
-{
-  bool isVisible = true;
-
-  if (t == cmake::DEPRECATION_ERROR) {
-    if (!this->GetDeprecatedWarningsAsErrors()) {
-      isVisible = false;
-    }
-  } else if (t == cmake::DEPRECATION_WARNING) {
-    if (this->GetSuppressDeprecatedWarnings()) {
-      isVisible = false;
-    }
-  } else if (t == cmake::AUTHOR_ERROR) {
-    if (!this->GetDevWarningsAsErrors()) {
-      isVisible = false;
-    }
-  } else if (t == cmake::AUTHOR_WARNING) {
-    if (this->GetSuppressDevWarnings()) {
-      isVisible = false;
-    }
-  }
-
-  return isVisible;
-}
-
-static bool printMessagePreamble(cmake::MessageType t, std::ostream& msg)
-{
-  // Construct the message header.
-  if (t == cmake::FATAL_ERROR) {
-    msg << "CMake Error";
-  } else if (t == cmake::INTERNAL_ERROR) {
-    msg << "CMake Internal Error (please report a bug)";
-  } else if (t == cmake::LOG) {
-    msg << "CMake Debug Log";
-  } else if (t == cmake::DEPRECATION_ERROR) {
-    msg << "CMake Deprecation Error";
-  } else if (t == cmake::DEPRECATION_WARNING) {
-    msg << "CMake Deprecation Warning";
-  } else if (t == cmake::AUTHOR_WARNING) {
-    msg << "CMake Warning (dev)";
-  } else if (t == cmake::AUTHOR_ERROR) {
-    msg << "CMake Error (dev)";
-  } else {
-    msg << "CMake Warning";
-  }
-  return true;
-}
-
-void printMessageText(std::ostream& msg, std::string const& text)
-{
-  msg << ":\n";
-  cmDocumentationFormatter formatter;
-  formatter.SetIndent("  ");
-  formatter.PrintFormatted(msg, text.c_str());
-}
-
-void displayMessage(cmake::MessageType t, std::ostringstream& msg)
-{
-
-  // Add a note about warning suppression.
-  if (t == cmake::AUTHOR_WARNING) {
-    msg << "This warning is for project developers.  Use -Wno-dev to suppress "
-           "it.";
-  } else if (t == cmake::AUTHOR_ERROR) {
-    msg << "This error is for project developers. Use -Wno-error=dev to "
-           "suppress "
-           "it.";
-  }
-
-  // Add a terminating blank line.
-  msg << "\n";
-
-#if defined(CMAKE_BUILD_WITH_CMAKE)
-  // Add a C++ stack trace to internal errors.
-  if (t == cmake::INTERNAL_ERROR) {
-    std::string stack = cmsys::SystemInformation::GetProgramStack(0, 0);
-    if (!stack.empty()) {
-      if (cmHasLiteralPrefix(stack, "WARNING:")) {
-        stack = "Note:" + stack.substr(8);
-      }
-      msg << stack << "\n";
-    }
-  }
-#endif
-
-  // Output the message.
-  if (t == cmake::FATAL_ERROR || t == cmake::INTERNAL_ERROR ||
-      t == cmake::DEPRECATION_ERROR || t == cmake::AUTHOR_ERROR) {
-    cmSystemTools::SetErrorOccured();
-    cmSystemTools::Message(msg.str().c_str(), "Error");
-  } else {
-    cmSystemTools::Message(msg.str().c_str(), "Warning");
-  }
-}
-
 void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
                          cmListFileBacktrace const& backtrace) const
 {
-  bool force = false;
-  // override the message type, if needed, for warnings and errors
-  cmake::MessageType override = this->ConvertMessageType(t);
-  if (override != t) {
-    t = override;
-    force = true;
-  }
-
-  if (!force && !this->IsMessageTypeVisible(t)) {
-    return;
-  }
-
-  this->DisplayMessage(t, text, backtrace);
-}
-
-void cmake::DisplayMessage(cmake::MessageType t, std::string const& text,
-                           cmListFileBacktrace const& backtrace) const
-{
-  std::ostringstream msg;
-  if (!printMessagePreamble(t, msg)) {
-    return;
-  }
-
-  // Add the immediate context.
-  backtrace.PrintTitle(msg);
-
-  printMessageText(msg, text);
-
-  // Add the rest of the context.
-  backtrace.PrintCallStack(msg);
-
-  displayMessage(t, msg);
+  this->Messenger->IssueMessage(t, text, backtrace);
 }
 
 std::vector<std::string> cmake::GetDebugConfigs()
@@ -2454,6 +2307,11 @@ std::vector<std::string> cmake::GetDebugConfigs()
   return configs;
 }
 
+cmMessenger* cmake::GetMessenger() const
+{
+  return this->Messenger;
+}
+
 int cmake::Build(const std::string& dir, const std::string& target,
                  const std::string& config,
                  const std::vector<std::string>& nativeOptions, bool clean)
@@ -2560,9 +2418,7 @@ void cmake::RunCheckForUnusedVariables()
 
 bool cmake::GetSuppressDevWarnings() const
 {
-  const char* cacheEntryValue =
-    this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_WARNINGS");
-  return cmSystemTools::IsOn(cacheEntryValue);
+  return this->Messenger->GetSuppressDevWarnings();
 }
 
 void cmake::SetSuppressDevWarnings(bool b)
@@ -2586,9 +2442,7 @@ void cmake::SetSuppressDevWarnings(bool b)
 
 bool cmake::GetSuppressDeprecatedWarnings() const
 {
-  const char* cacheEntryValue =
-    this->State->GetCacheEntryValue("CMAKE_WARN_DEPRECATED");
-  return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
+  return this->Messenger->GetSuppressDeprecatedWarnings();
 }
 
 void cmake::SetSuppressDeprecatedWarnings(bool b)
@@ -2612,9 +2466,7 @@ void cmake::SetSuppressDeprecatedWarnings(bool b)
 
 bool cmake::GetDevWarningsAsErrors() const
 {
-  const char* cacheEntryValue =
-    this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_ERRORS");
-  return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
+  return this->Messenger->GetDevWarningsAsErrors();
 }
 
 void cmake::SetDevWarningsAsErrors(bool b)
@@ -2638,9 +2490,7 @@ void cmake::SetDevWarningsAsErrors(bool b)
 
 bool cmake::GetDeprecatedWarningsAsErrors() const
 {
-  const char* cacheEntryValue =
-    this->State->GetCacheEntryValue("CMAKE_ERROR_DEPRECATED");
-  return cmSystemTools::IsOn(cacheEntryValue);
+  return this->Messenger->GetDeprecatedWarningsAsErrors();
 }
 
 void cmake::SetDeprecatedWarningsAsErrors(bool b)

+ 4 - 3
Source/cmake.h

@@ -25,6 +25,7 @@ class cmGlobalGeneratorFactory;
 class cmGlobalGenerator;
 class cmLocalGenerator;
 class cmMakefile;
+class cmMessenger;
 class cmVariableWatch;
 class cmFileTimeComparison;
 class cmExternalMakefileProjectGeneratorFactory;
@@ -346,6 +347,8 @@ public:
     return this->CMakeEditCommand;
   }
 
+  cmMessenger* GetMessenger() const;
+
   /*
    * Get the state of the suppression of developer (author) warnings.
    * Returns false, by default, if developer warnings should be shown, true
@@ -395,9 +398,6 @@ public:
     cmake::MessageType t, std::string const& text,
     cmListFileBacktrace const& backtrace = cmListFileBacktrace()) const;
 
-  void DisplayMessage(cmake::MessageType t, std::string const& text,
-                      cmListFileBacktrace const& backtrace) const;
-
   ///! run the --build option
   int Build(const std::string& dir, const std::string& target,
             const std::string& config,
@@ -491,6 +491,7 @@ private:
 
   cmState* State;
   cmState::Snapshot CurrentSnapshot;
+  cmMessenger* Messenger;
 
   std::vector<std::string> TraceOnlyThisSources;
 

+ 4 - 7
Tests/RunCMake/Syntax/BracketComment4-stderr.txt

@@ -1,7 +1,4 @@
-CMake Error: Error in cmake code at
-.*/Tests/RunCMake/Syntax/BracketComment4.cmake:3:
-Parse error.  Expected a newline, got identifier with text "message".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
-
-    BracketComment4.cmake
+CMake Error at BracketComment4.cmake:3:
+  Parse error.  Expected a newline, got identifier with text "message".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace0-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace0.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace0.cmake:1:27
+CMake Error at BracketNoSpace0.cmake:1:
+  Syntax Error in cmake code at column 27
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace1-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace1.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace1.cmake:1:24
+CMake Error at BracketNoSpace1.cmake:1:
+  Syntax Error in cmake code at column 24
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace2-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace2.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace2.cmake:1:44
+CMake Error at BracketNoSpace2.cmake:1:
+  Syntax Error in cmake code at column 44
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace3-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace3.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace3.cmake:1:45
+CMake Error at BracketNoSpace3.cmake:1:
+  Syntax Error in cmake code at column 45
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace4-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace4.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace4.cmake:1:44
+CMake Error at BracketNoSpace4.cmake:1:
+  Syntax Error in cmake code at column 44
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 2 - 4
Tests/RunCMake/Syntax/BracketNoSpace5-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error in BracketNoSpace5.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/BracketNoSpace5.cmake:1:45
+CMake Error at BracketNoSpace5.cmake:1:
+  Syntax Error in cmake code at column 45
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 5 - 7
Tests/RunCMake/Syntax/CommandError0-stderr.txt

@@ -1,8 +1,6 @@
-CMake Error: Error in cmake code at
-.*/Tests/RunCMake/Syntax/CommandError0.cmake:2:
-Parse error.  Expected "\(", got newline with text "
-".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
+CMake Error at CommandError0.cmake:2:
+  Parse error.  Expected "\(", got newline with text "
 
-    CommandError0.cmake
+  ".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 4 - 7
Tests/RunCMake/Syntax/CommandError1-stderr.txt

@@ -1,7 +1,4 @@
-CMake Error: Error in cmake code at
-.*/Tests/RunCMake/Syntax/CommandError1.cmake:1:
-Parse error.  Expected a newline, got identifier with text "message".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
-
-    CommandError1.cmake
+CMake Error at CommandError1.cmake:1:
+  Parse error.  Expected a newline, got identifier with text "message".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 5 - 7
Tests/RunCMake/Syntax/CommandError2-stderr.txt

@@ -1,7 +1,5 @@
-CMake Error: Error in cmake code at
-.*/Tests/RunCMake/Syntax/CommandError2.cmake:1:
-Parse error.  Expected a command name, got bracket argument with text "oops-not-a-comment".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
-
-    CommandError2.cmake
+CMake Error at CommandError2.cmake:1:
+  Parse error.  Expected a command name, got bracket argument with text
+  "oops-not-a-comment".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 3 - 5
Tests/RunCMake/Syntax/ParenInENV-stderr.txt

@@ -1,7 +1,5 @@
-CMake Warning \(dev\) in ParenInENV.cmake:
-  Syntax Warning in cmake code at
-
-    .*/Tests/RunCMake/Syntax/ParenInENV.cmake:2:21
+CMake Warning \(dev\) at ParenInENV.cmake:2:
+  Syntax Warning in cmake code at column 21
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):
@@ -11,7 +9,7 @@ This warning is for project developers.  Use -Wno-dev to suppress it.
 CMake Error at ParenInENV.cmake:2 \(message\):
   Syntax error in cmake code at
 
-    .*/Tests/RunCMake/Syntax/ParenInENV.cmake:2
+    .*Tests/RunCMake/Syntax/ParenInENV.cmake:2
 
   when parsing string
 

+ 6 - 12
Tests/RunCMake/Syntax/ParenNoSpace1-stderr.txt

@@ -1,27 +1,21 @@
-CMake Warning \(dev\) in ParenNoSpace1.cmake:
-  Syntax Warning in cmake code at
-
-    .*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:1:26
+CMake Warning \(dev\) at ParenNoSpace1.cmake:1:
+  Syntax Warning in cmake code at column 26
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
 This warning is for project developers.  Use -Wno-dev to suppress it.
 
-CMake Warning \(dev\) in ParenNoSpace1.cmake:
-  Syntax Warning in cmake code at
-
-    .*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:2:26
+CMake Warning \(dev\) at ParenNoSpace1.cmake:2:
+  Syntax Warning in cmake code at column 26
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
 This warning is for project developers.  Use -Wno-dev to suppress it.
 
-CMake Error in ParenNoSpace1.cmake:
-  Syntax Error in cmake code at
-
-    .*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:3:29
+CMake Error at ParenNoSpace1.cmake:3:
+  Syntax Error in cmake code at column 29
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 4 - 8
Tests/RunCMake/Syntax/StringNoSpace-stderr.txt

@@ -1,17 +1,13 @@
-CMake Warning \(dev\) in StringNoSpace.cmake:
-  Syntax Warning in cmake code at
-
-    .*/Tests/RunCMake/Syntax/StringNoSpace.cmake:2:28
+CMake Warning \(dev\) at StringNoSpace.cmake:2:
+  Syntax Warning in cmake code at column 28
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
 This warning is for project developers.  Use -Wno-dev to suppress it.
 
-CMake Warning \(dev\) in StringNoSpace.cmake:
-  Syntax Warning in cmake code at
-
-    .*/Tests/RunCMake/Syntax/StringNoSpace.cmake:2:31
+CMake Warning \(dev\) at StringNoSpace.cmake:2:
+  Syntax Warning in cmake code at column 31
 
   Argument not separated from preceding token by whitespace.
 Call Stack \(most recent call first\):

+ 6 - 7
Tests/RunCMake/Syntax/UnterminatedBracket0-stderr.txt

@@ -1,8 +1,7 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedBracket0.cmake:2:
-Parse error.  Function missing ending "\)".  Instead found unterminated bracket with text "\)
-".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
+CMake Error at UnterminatedBracket0.cmake:2:
+  Parse error.  Function missing ending "\)".  Instead found unterminated
+  bracket with text "\)
 
-    UnterminatedBracket0.cmake$
+  ".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 6 - 7
Tests/RunCMake/Syntax/UnterminatedBracket1-stderr.txt

@@ -1,8 +1,7 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedBracket1.cmake:2:
-Parse error.  Function missing ending "\)".  Instead found unterminated bracket with text "\]\]\)
-".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
+CMake Error at UnterminatedBracket1.cmake:2:
+  Parse error.  Function missing ending "\)".  Instead found unterminated
+  bracket with text "]]\)
 
-    UnterminatedBracket1.cmake$
+  ".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 6 - 7
Tests/RunCMake/Syntax/UnterminatedBracketComment-stderr.txt

@@ -1,8 +1,7 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedBracketComment.cmake:1:
-Parse error.  Expected a command name, got unterminated bracket with text "#\]\]
-".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
+CMake Error at UnterminatedBracketComment.cmake:3:
+  Parse error.  Expected a command name, got unterminated bracket with text
+  "#]]
 
-    UnterminatedBracketComment.cmake
+  ".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 4 - 7
Tests/RunCMake/Syntax/UnterminatedCall1-stderr.txt

@@ -1,7 +1,4 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedCall1.cmake:2:
-Parse error.  Function missing ending "\)".  End of file reached.
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
-
-    UnterminatedCall1.cmake
+CMake Error at UnterminatedCall1.cmake:2:
+  Parse error.  Function missing ending "\)".  End of file reached.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 4 - 7
Tests/RunCMake/Syntax/UnterminatedCall2-stderr.txt

@@ -1,7 +1,4 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedCall2.cmake:4:
-Parse error.  Function missing ending "\)".  End of file reached.
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
-
-    UnterminatedCall2.cmake
+CMake Error at UnterminatedCall2.cmake:4:
+  Parse error.  Function missing ending "\)".  End of file reached.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 6 - 7
Tests/RunCMake/Syntax/UnterminatedString-stderr.txt

@@ -1,8 +1,7 @@
-CMake Error: Error in cmake code at
-.*/Syntax/UnterminatedString.cmake:2:
-Parse error.  Function missing ending "\)".  Instead found unterminated string with text "\)
-".
-CMake Error at CMakeLists.txt:3 \(include\):
-  include could not find load file:
+CMake Error at UnterminatedString.cmake:2:
+  Parse error.  Function missing ending "\)".  Instead found unterminated
+  string with text "\)
 
-    UnterminatedString.cmake$
+  ".
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 1 - 0
bootstrap

@@ -266,6 +266,7 @@ CMAKE_CXX_SOURCES="\
   cmPropertyDefinition \
   cmPropertyDefinitionMap \
   cmMakefile \
+  cmMessenger \
   cmExportBuildFileGenerator \
   cmExportFileGenerator \
   cmExportInstallFileGenerator \