summaryrefslogtreecommitdiffstats
path: root/Source/cmake.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2016-01-28 21:10:27 (GMT)
committerBrad King <brad.king@kitware.com>2016-08-25 13:47:27 (GMT)
commit421012a330989a64b24a3289379bb4938e6ed3ea (patch)
tree02c059dff6075626a5edaeedcb8477ea6aaa058e /Source/cmake.cxx
parent14a8d61fd49a9b990cbef7e1495e4763f31c55f2 (diff)
downloadCMake-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.cxx176
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)