diff --git a/Source/cmMessageCommand.cxx b/Source/cmMessageCommand.cxx index e1dbf349d..d85e720b6 100644 --- a/Source/cmMessageCommand.cxx +++ b/Source/cmMessageCommand.cxx @@ -52,6 +52,23 @@ bool cmMessageCommand status = true; ++i; } + else if (*i == "DEPRECATION") + { + if (this->Makefile->IsOn("CMAKE_ERROR_DEPRECATED")) + { + fatal = true; + type = cmake::DEPRECATION_ERROR; + } + else if (this->Makefile->IsOn("CMAKE_WARN_DEPRECATED")) + { + type = cmake::DEPRECATION_WARNING; + } + else + { + return true; + } + ++i; + } for(;i != args.end(); ++i) { diff --git a/Source/cmMessageCommand.h b/Source/cmMessageCommand.h index fc61810c3..a053bdd79 100644 --- a/Source/cmMessageCommand.h +++ b/Source/cmMessageCommand.h @@ -60,9 +60,8 @@ public: virtual const char* GetFullDocumentation() const { return - " message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]\n" - " \"message to display\" ...)\n" - "The optional keyword determines the type of message:\n" + " message([] \"message to display\" ...)\n" + "The optional keyword determines the type of message:\n" " (none) = Important information\n" " STATUS = Incidental information\n" " WARNING = CMake Warning, continue processing\n" @@ -70,6 +69,9 @@ public: " SEND_ERROR = CMake Error, continue processing,\n" " but skip generation\n" " FATAL_ERROR = CMake Error, stop processing and generation\n" + " DEPRECATION = CMake Deprecation Error or Warning if variable\n" + " CMAKE_ERROR_DEPRECATED or CMAKE_WARN_DEPRECATED\n" + " is enabled, respectively, else no message.\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. " diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 2249323b6..d2961c0b3 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -3127,6 +3127,15 @@ void cmake::IssueMessage(cmake::MessageType t, std::string const& text, { msg << "CMake Debug Log"; } + else if(t == cmake::DEPRECATION_ERROR) + { + msg << "CMake Deprecation Error"; + isError = true; + } + else if (t == cmake::DEPRECATION_WARNING) + { + msg << "CMake Deprecation Warning"; + } else { msg << "CMake Warning"; diff --git a/Source/cmake.h b/Source/cmake.h index ccf91e3f5..d33ba34e8 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -65,7 +65,9 @@ class cmake INTERNAL_ERROR, MESSAGE, WARNING, - LOG + LOG, + DEPRECATION_ERROR, + DEPRECATION_WARNING }; diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index ee490b817..4fbc3b0fe 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -95,6 +95,7 @@ add_RunCMake_test(if) add_RunCMake_test(include) add_RunCMake_test(include_directories) add_RunCMake_test(list) +add_RunCMake_test(message) add_RunCMake_test(try_compile) add_RunCMake_test(variable_watch) add_RunCMake_test(CMP0004) diff --git a/Tests/RunCMake/message/CMakeLists.txt b/Tests/RunCMake/message/CMakeLists.txt new file mode 100644 index 000000000..12cd3c775 --- /dev/null +++ b/Tests/RunCMake/message/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8.4) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/message/RunCMakeTest.cmake b/Tests/RunCMake/message/RunCMakeTest.cmake new file mode 100644 index 000000000..d2bc0c354 --- /dev/null +++ b/Tests/RunCMake/message/RunCMakeTest.cmake @@ -0,0 +1,5 @@ +include(RunCMake) + +run_cmake(nomessage) +run_cmake(warnmessage) +run_cmake(errormessage) diff --git a/Tests/RunCMake/message/errormessage-result.txt b/Tests/RunCMake/message/errormessage-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/message/errormessage-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/message/errormessage-stderr.txt b/Tests/RunCMake/message/errormessage-stderr.txt new file mode 100644 index 000000000..49e7ca913 --- /dev/null +++ b/Tests/RunCMake/message/errormessage-stderr.txt @@ -0,0 +1,4 @@ +CMake Deprecation Error at errormessage.cmake:4 \(message\): + This is an error +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/message/errormessage.cmake b/Tests/RunCMake/message/errormessage.cmake new file mode 100644 index 000000000..7d3b7792b --- /dev/null +++ b/Tests/RunCMake/message/errormessage.cmake @@ -0,0 +1,4 @@ + +set(CMAKE_ERROR_DEPRECATED ON) + +message(DEPRECATION "This is an error") diff --git a/Tests/RunCMake/message/nomessage-result.txt b/Tests/RunCMake/message/nomessage-result.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/Tests/RunCMake/message/nomessage-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/message/nomessage-stderr.txt b/Tests/RunCMake/message/nomessage-stderr.txt new file mode 100644 index 000000000..10f32932e --- /dev/null +++ b/Tests/RunCMake/message/nomessage-stderr.txt @@ -0,0 +1 @@ +^$ diff --git a/Tests/RunCMake/message/nomessage.cmake b/Tests/RunCMake/message/nomessage.cmake new file mode 100644 index 000000000..bcc97be65 --- /dev/null +++ b/Tests/RunCMake/message/nomessage.cmake @@ -0,0 +1,2 @@ + +message(DEPRECATION "This is not issued") diff --git a/Tests/RunCMake/message/warnmessage-result.txt b/Tests/RunCMake/message/warnmessage-result.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/Tests/RunCMake/message/warnmessage-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/message/warnmessage-stderr.txt b/Tests/RunCMake/message/warnmessage-stderr.txt new file mode 100644 index 000000000..5c4456637 --- /dev/null +++ b/Tests/RunCMake/message/warnmessage-stderr.txt @@ -0,0 +1,4 @@ +CMake Deprecation Warning at warnmessage.cmake:4 \(message\): + This is a warning +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/message/warnmessage.cmake b/Tests/RunCMake/message/warnmessage.cmake new file mode 100644 index 000000000..4c421a129 --- /dev/null +++ b/Tests/RunCMake/message/warnmessage.cmake @@ -0,0 +1,4 @@ + +set(CMAKE_WARN_DEPRECATED ON) + +message(DEPRECATION "This is a warning")