Bladeren bron

ENH: Teach message() how to display warnings

This adds message(WARNING) and message(AUTHOR_WARNING) command modes and
fully documents the command behavior in all modes.
Brad King 16 jaren geleden
bovenliggende
commit
ca3b93d9c6

+ 18 - 24
Source/cmMessageCommand.cxx

@@ -28,29 +28,27 @@ bool cmMessageCommand
   std::string message;
   std::vector<std::string>::const_iterator i = args.begin();
 
-  bool send_error = false;
-  bool fatal_error = false;
+  cmake::MessageType type = cmake::MESSAGE;
   bool status = false;
-  if (*i == "SEND_ERROR")
+  if (*i == "SEND_ERROR" || *i == "FATAL_ERROR")
     {
-    send_error = true;
+    type = cmake::FATAL_ERROR;
     ++i;
     }
-  else
+  else if (*i == "WARNING")
     {
-    if (*i == "STATUS")
-      {
-      status = true;
-      ++i;
-      }
-    else
-      {
-      if (*i == "FATAL_ERROR")
-        {
-        fatal_error = true;
-        ++i;
-        }
-      }
+    type = cmake::WARNING;
+    ++i;
+    }
+  else if (*i == "AUTHOR_WARNING")
+    {
+    type = cmake::AUTHOR_WARNING;
+    ++i;
+    }
+  else if (*i == "STATUS")
+    {
+    status = true;
+    ++i;
     }
 
   for(;i != args.end(); ++i)
@@ -58,9 +56,9 @@ bool cmMessageCommand
     message += *i;
     }
 
-  if (send_error || fatal_error)
+  if (type != cmake::MESSAGE)
     {
-    this->Makefile->IssueMessage(cmake::FATAL_ERROR, message.c_str());
+    this->Makefile->IssueMessage(type, message.c_str());
     }
   else
     {
@@ -73,10 +71,6 @@ bool cmMessageCommand
       cmSystemTools::Message(message.c_str());
       }
     }
-  if(fatal_error )
-    {
-    cmSystemTools::SetFatalErrorOccured();
-    }
   return true;
 }
 

+ 21 - 9
Source/cmMessageCommand.h

@@ -65,16 +65,28 @@ public:
   virtual const char* GetFullDocumentation()
     {
     return
-      "  message([SEND_ERROR | STATUS | FATAL_ERROR]\n"
+      "  message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]\n"
       "          \"message to display\" ...)\n"
-      "By default the message is displayed in a pop up window (CMakeSetup), "
-      "or in the stdout of cmake, or the error section of ccmake. "
-      "If the first argument is "
-      "SEND_ERROR then an error is raised, and the generate phase will "
-      "be skipped.  If the first argument is FATAL_ERROR, all processing "
-      "is halted. If the first argument is STATUS then the message is "
-      "displayed in the progress line for the GUI, or with a -- in the "
-      "command line cmake.";
+      "The optional keyword determines the type of message:\n"
+      "  (none)         = Important information\n"
+      "  STATUS         = Incidental information\n"
+      "  WARNING        = CMake Warning, continue processing\n"
+      "  AUTHOR_WARNING = CMake Warning (dev), continue processing\n"
+      "  FATAL_ERROR    = CMake Error, stop all processing\n"
+      "  SEND_ERROR     = CMake Error, stop all processing (legacy)\n"
+      "The CMake command-line tool displays STATUS messages on stdout "
+      "and all other message types on stderr.  "
+      "The CMake GUI displays all messages in its log area.  "
+      "The interactive dialogs (ccmake and CMakeSetup) show STATUS messages "
+      "one at a time on a status line and other messages in interactive "
+      "pop-up boxes."
+      "\n"
+      "CMake Warning and Error message text displays using a simple "
+      "markup language.  "
+      "Non-indented text is formatted in line-wrapped paragraphs delimited "
+      "by newlines.  "
+      "Indented text is considered pre-formatted."
+      ;
     }
   
   cmTypeMacro(cmMessageCommand, cmCommand);

+ 1 - 0
Tests/CMakeTests/CMakeLists.txt

@@ -16,6 +16,7 @@ AddCMakeTest(FindBase "")
 AddCMakeTest(Toolchain "")
 AddCMakeTest(GetFilenameComponentRealpath "")
 AddCMakeTest(Version "")
+AddCMakeTest(Message "")
 
 SET(GetPrerequisites_PreArgs
   "-DCTEST_CONFIGURATION_TYPE:STRING=\\\${CTEST_CONFIGURATION_TYPE}"

+ 30 - 0
Tests/CMakeTests/MessageTest.cmake.in

@@ -0,0 +1,30 @@
+execute_process(
+  COMMAND ${CMAKE_COMMAND} -P
+          "@CMAKE_CURRENT_SOURCE_DIR@/MessageTestScript.cmake"
+  OUTPUT_VARIABLE out
+  ERROR_VARIABLE err
+  RESULT_VARIABLE result
+  )
+
+message("out=[${out}]")
+message("err=[${err}]")
+
+if(NOT "${result}" STREQUAL "0")
+  message(FATAL_ERROR "message script failed: [${result}]")
+endif()
+
+if(NOT "${out}" MATCHES "message-status")
+  message(FATAL_ERROR "message(STATUS) did not go to stdout")
+endif()
+
+if(NOT "${err}" MATCHES "message-default")
+  message(FATAL_ERROR "message() did not go to stderr by default")
+endif()
+
+if(NOT "${err}" MATCHES "CMake Warning at[^\n]*:\r?\n  message-warning")
+  message(FATAL_ERROR "message(WARNING) did not appear properly")
+endif()
+
+if(NOT "${err}" MATCHES "CMake Warning \\(dev\\) at[^\n]*:\r?\n  message-author")
+  message(FATAL_ERROR "message(AUTHOR_WARNING) did not appear properly")
+endif()

+ 4 - 0
Tests/CMakeTests/MessageTestScript.cmake

@@ -0,0 +1,4 @@
+message("message-default")
+message(STATUS "message-status")
+message(WARNING "message-warning")
+message(AUTHOR_WARNING "message-author")