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.
This commit is contained in:
Brad King 2009-03-06 10:04:06 -05:00
parent 62702551db
commit ca3b93d9c6
5 changed files with 74 additions and 33 deletions

View File

@ -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;
}

View File

@ -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);

View File

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

View File

@ -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()

View File

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