diff options
author | Stephen Kelly <steveire@gmail.com> | 2016-01-28 21:10:27 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-08-25 13:47:27 (GMT) |
commit | 421012a330989a64b24a3289379bb4938e6ed3ea (patch) | |
tree | 02c059dff6075626a5edaeedcb8477ea6aaa058e /Source/cmake.cxx | |
parent | 14a8d61fd49a9b990cbef7e1495e4763f31c55f2 (diff) | |
download | CMake-421012a330989a64b24a3289379bb4938e6ed3ea.zip CMake-421012a330989a64b24a3289379bb4938e6ed3ea.tar.gz CMake-421012a330989a64b24a3289379bb4938e6ed3ea.tar.bz2 |
cmMessenger: Extract from cmake class
This way messages can be issued independent of the cmake instance.
It is now possible to make DisplayMessage a virtual interface and
override it to handle messages in the cmake-gui or future IDE
interaction interfaces.
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r-- | Source/cmake.cxx | 176 |
1 files changed, 13 insertions, 163 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 74c3f71..701a5e5 100644 --- a/Source/cmake.cxx +++ b/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) |