From aac633d5e5765bb6b51e31364325ae7d916f021c Mon Sep 17 00:00:00 2001 From: Michael Scott Date: Sun, 29 Nov 2015 13:34:07 +0000 Subject: [PATCH] Explicitly enable deprecated warnings by default. Explicitly enable deprecated warnings by default, via the cmake::GetSuppressDeprecatedWarnings method, which signals suppression is turned off unless the CMake variables are set as required. Add tests and update the documentation for the new functionality. --- Help/release/dev/cmake-W-options.rst | 4 ++++ Help/variable/CMAKE_WARN_DEPRECATED.rst | 4 ++-- Source/cmMessageCommand.cxx | 14 +++++++---- Source/cmake.cxx | 24 +++++++++++++++---- Source/cmake.h | 7 ++++++ Tests/RunCMake/CommandLine/RunCMakeTest.cmake | 3 +++ .../message/defaultmessage-stderr.txt | 8 ++++++- Tests/RunCMake/message/nomessage.cmake | 2 ++ 8 files changed, 54 insertions(+), 12 deletions(-) diff --git a/Help/release/dev/cmake-W-options.rst b/Help/release/dev/cmake-W-options.rst index 47847186e..57d375f5d 100644 --- a/Help/release/dev/cmake-W-options.rst +++ b/Help/release/dev/cmake-W-options.rst @@ -6,3 +6,7 @@ cmake-W-options * The ``-Wdev`` and ``-Wno-dev`` :manual:`cmake(1)` options now also enable and suppress the deprecated warnings output by default. + +* Warnings about deprecated functionality are now enabled by default. + They may be suppressed with ``-Wno-deprecated`` or by setting the + :variable:`CMAKE_WARN_DEPRECATED` variable to false. diff --git a/Help/variable/CMAKE_WARN_DEPRECATED.rst b/Help/variable/CMAKE_WARN_DEPRECATED.rst index 5f87c348a..4a224fa5c 100644 --- a/Help/variable/CMAKE_WARN_DEPRECATED.rst +++ b/Help/variable/CMAKE_WARN_DEPRECATED.rst @@ -3,8 +3,8 @@ CMAKE_WARN_DEPRECATED Whether to issue warnings for deprecated functionality. -If ``TRUE``, use of deprecated functionality will issue warnings. -If this variable is not set, CMake behaves as if it were set to ``FALSE``. +If not ``FALSE``, use of deprecated functionality will issue warnings. +If this variable is not set, CMake behaves as if it were set to ``TRUE``. When running :manual:`cmake(1)`, this option can be enabled with the ``-Wdeprecated`` option, or disabled with the ``-Wno-deprecated`` option. diff --git a/Source/cmMessageCommand.cxx b/Source/cmMessageCommand.cxx index fd0345d0b..8272eb09f 100644 --- a/Source/cmMessageCommand.cxx +++ b/Source/cmMessageCommand.cxx @@ -66,13 +66,17 @@ bool cmMessageCommand fatal = true; type = cmake::DEPRECATION_ERROR; } - else if (this->Makefile->IsOn("CMAKE_WARN_DEPRECATED")) - { - type = cmake::DEPRECATION_WARNING; - } else { - return true; + if (this->Makefile->GetCMakeInstance()->GetSuppressDeprecatedWarnings( + this->Makefile)) + { + return true; + } + else + { + type = cmake::DEPRECATION_WARNING; + } } ++i; } diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 6481c78d1..c0a11965f 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2581,10 +2581,7 @@ bool cmake::IsMessageTypeVisible(cmake::MessageType t) } else if (t == cmake::DEPRECATION_WARNING) { - // if CMAKE_WARN_DEPRECATED is on, show the message, otherwise suppress it - const char* warnDeprecated = this->State->GetInitializedCacheValue( - "CMAKE_WARN_DEPRECATED"); - if(cmSystemTools::IsOff(warnDeprecated)) + if (this->GetSuppressDeprecatedWarnings()) { isVisible = false; } @@ -2916,3 +2913,22 @@ bool cmake::GetSuppressDevWarnings(cmMakefile const* mf) return cmSystemTools::IsOn(cacheEntryValue); } } + +bool cmake::GetSuppressDeprecatedWarnings(cmMakefile const* mf) +{ + /* + * The suppression CMake variable may be set in the CMake configuration file + * itself, so we have to check what its set to in the makefile if we can. + */ + if (mf) + { + return (mf->IsSet("CMAKE_WARN_DEPRECATED") && + !mf->IsOn("CMAKE_WARN_DEPRECATED")); + } + else + { + const char* cacheEntryValue = this->State->GetCacheEntryValue( + "CMAKE_WARN_DEPRECATED"); + return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue); + } +} diff --git a/Source/cmake.h b/Source/cmake.h index 8739b87b7..4c5515b8a 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -316,6 +316,13 @@ class cmake */ bool GetSuppressDevWarnings(cmMakefile const* mf = NULL); + /* + * Get the state of the suppression of deprecated warnings. + * Returns false, by default, if deprecated warnings should be shown, true + * otherwise. + */ + bool GetSuppressDeprecatedWarnings(cmMakefile const* mf = NULL); + /** Display a message to the user. */ void IssueMessage(cmake::MessageType t, std::string const& text, cmListFileBacktrace const& backtrace = cmListFileBacktrace(), diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake index efe143ed6..6b4b3849c 100644 --- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake @@ -157,6 +157,9 @@ unset(RunCMake_TEST_OPTIONS) # Dev warnings should be on by default run_cmake(Wdev) +# Deprecated warnings should be on by default +run_cmake(Wdeprecated) + # Conflicting -W options should honor the last value set(RunCMake_TEST_OPTIONS -Wno-dev -Wdev) run_cmake(Wdev) diff --git a/Tests/RunCMake/message/defaultmessage-stderr.txt b/Tests/RunCMake/message/defaultmessage-stderr.txt index 95656ec19..dd1b28fde 100644 --- a/Tests/RunCMake/message/defaultmessage-stderr.txt +++ b/Tests/RunCMake/message/defaultmessage-stderr.txt @@ -1,4 +1,10 @@ -^CMake Warning \(dev\) at defaultmessage.cmake:4 \(message\): +^CMake Deprecation Warning at defaultmessage.cmake:2 \(message\): + This is a deprecation warning +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) + + +CMake Warning \(dev\) at defaultmessage.cmake:4 \(message\): This is a author warning Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/message/nomessage.cmake b/Tests/RunCMake/message/nomessage.cmake index 582ab4dd7..78f476945 100644 --- a/Tests/RunCMake/message/nomessage.cmake +++ b/Tests/RunCMake/message/nomessage.cmake @@ -1,4 +1,6 @@ +set(CMAKE_WARN_DEPRECATED OFF) + message(DEPRECATION "This is not issued") set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS ON)