| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 
-    file Copyright.txt or https://cmake.org/licensing for details.  */
 
- #include "cmMessageCommand.h"
 
- #include "cmMakefile.h"
 
- #include "cmMessageType.h"
 
- #include "cmMessenger.h"
 
- #include "cmRange.h"
 
- #include "cmStringAlgorithms.h"
 
- #include "cmSystemTools.h"
 
- #include "cmake.h"
 
- #include <cassert>
 
- class cmExecutionStatus;
 
- // cmLibraryCommand
 
- bool cmMessageCommand::InitialPass(std::vector<std::string> const& args,
 
-                                    cmExecutionStatus&)
 
- {
 
-   if (args.empty()) {
 
-     this->SetError("called with incorrect number of arguments");
 
-     return false;
 
-   }
 
-   auto i = args.cbegin();
 
-   auto type = MessageType::MESSAGE;
 
-   auto fatal = false;
 
-   auto level = cmake::LogLevel::LOG_UNDEFINED;
 
-   if (*i == "SEND_ERROR") {
 
-     type = MessageType::FATAL_ERROR;
 
-     level = cmake::LogLevel::LOG_ERROR;
 
-     ++i;
 
-   } else if (*i == "FATAL_ERROR") {
 
-     fatal = true;
 
-     type = MessageType::FATAL_ERROR;
 
-     level = cmake::LogLevel::LOG_ERROR;
 
-     ++i;
 
-   } else if (*i == "WARNING") {
 
-     type = MessageType::WARNING;
 
-     level = cmake::LogLevel::LOG_WARNING;
 
-     ++i;
 
-   } else if (*i == "AUTHOR_WARNING") {
 
-     if (this->Makefile->IsSet("CMAKE_SUPPRESS_DEVELOPER_ERRORS") &&
 
-         !this->Makefile->IsOn("CMAKE_SUPPRESS_DEVELOPER_ERRORS")) {
 
-       fatal = true;
 
-       type = MessageType::AUTHOR_ERROR;
 
-       level = cmake::LogLevel::LOG_ERROR;
 
-     } else if (!this->Makefile->IsOn("CMAKE_SUPPRESS_DEVELOPER_WARNINGS")) {
 
-       type = MessageType::AUTHOR_WARNING;
 
-       level = cmake::LogLevel::LOG_WARNING;
 
-     } else {
 
-       return true;
 
-     }
 
-     ++i;
 
-   } else if (*i == "STATUS") {
 
-     level = cmake::LogLevel::LOG_STATUS;
 
-     ++i;
 
-   } else if (*i == "VERBOSE") {
 
-     level = cmake::LogLevel::LOG_VERBOSE;
 
-     ++i;
 
-   } else if (*i == "DEBUG") {
 
-     level = cmake::LogLevel::LOG_DEBUG;
 
-     ++i;
 
-   } else if (*i == "TRACE") {
 
-     level = cmake::LogLevel::LOG_TRACE;
 
-     ++i;
 
-   } else if (*i == "DEPRECATION") {
 
-     if (this->Makefile->IsOn("CMAKE_ERROR_DEPRECATED")) {
 
-       fatal = true;
 
-       type = MessageType::DEPRECATION_ERROR;
 
-       level = cmake::LogLevel::LOG_ERROR;
 
-     } else if ((!this->Makefile->IsSet("CMAKE_WARN_DEPRECATED") ||
 
-                 this->Makefile->IsOn("CMAKE_WARN_DEPRECATED"))) {
 
-       type = MessageType::DEPRECATION_WARNING;
 
-       level = cmake::LogLevel::LOG_WARNING;
 
-     } else {
 
-       return true;
 
-     }
 
-     ++i;
 
-   } else if (*i == "NOTICE") {
 
-     // `NOTICE` message type is going to be output to stderr
 
-     level = cmake::LogLevel::LOG_NOTICE;
 
-     ++i;
 
-   } else {
 
-     // Messages w/o any type are `NOTICE`s
 
-     level = cmake::LogLevel::LOG_NOTICE;
 
-   }
 
-   assert("Message log level expected to be set" &&
 
-          level != cmake::LogLevel::LOG_UNDEFINED);
 
-   auto desiredLevel = this->Makefile->GetCMakeInstance()->GetLogLevel();
 
-   assert("Expected a valid log level here" &&
 
-          desiredLevel != cmake::LogLevel::LOG_UNDEFINED);
 
-   if (desiredLevel < level) {
 
-     // Suppress the message
 
-     return true;
 
-   }
 
-   auto message = cmJoin(cmMakeRange(i, args.cend()), "");
 
-   if (cmake::LogLevel::LOG_NOTICE <= level) {
 
-     // Check if any indentation has requested:
 
-     // `CMAKE_MESSAGE_INDENT` is a list of "padding" pieces
 
-     // to be joined and prepended to the message lines.
 
-     auto indent = cmJoin(cmExpandedList(this->Makefile->GetSafeDefinition(
 
-                            "CMAKE_MESSAGE_INDENT")),
 
-                          "");
 
-     // Make every line of the `message` indented
 
-     // NOTE Can't reuse `cmDocumentationFormatter::PrintPreformatted`
 
-     // here cuz it appends `\n` to the EOM ;-(
 
-     cmSystemTools::ReplaceString(message, "\n", "\n" + indent);
 
-     message = indent + message;
 
-   }
 
-   switch (level) {
 
-     case cmake::LogLevel::LOG_ERROR:
 
-     case cmake::LogLevel::LOG_WARNING:
 
-       // we've overridden the message type, above, so display it directly
 
-       this->Makefile->GetMessenger()->DisplayMessage(
 
-         type, message, this->Makefile->GetBacktrace());
 
-       break;
 
-     case cmake::LogLevel::LOG_NOTICE:
 
-       cmSystemTools::Message(message);
 
-       break;
 
-     case cmake::LogLevel::LOG_STATUS:
 
-     case cmake::LogLevel::LOG_VERBOSE:
 
-     case cmake::LogLevel::LOG_DEBUG:
 
-     case cmake::LogLevel::LOG_TRACE:
 
-       this->Makefile->DisplayStatus(message, -1);
 
-       break;
 
-     default:
 
-       assert("Unexpected log level! Review the `cmMessageCommand.cxx`." &&
 
-              false);
 
-       break;
 
-   }
 
-   if (fatal) {
 
-     cmSystemTools::SetFatalErrorOccured();
 
-   }
 
-   return true;
 
- }
 
 
  |