From 6d604c4972d744defe783e7a5f9fbf478eee2dfe Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 22 Nov 2016 10:08:45 -0500 Subject: try_compile: Honor CMAKE_WARN_DEPRECATED in test project This causes the `-Wno-deprecated` option to be honored even inside a `try_compile` test project, which is needed to suppress all deprecation warnings as the option documents. Closes: #16446 --- .../dev/try_compile-honor-CMAKE_WARN_DEPRECATED.rst | 6 ++++++ Source/cmCoreTryCompile.cxx | 2 ++ Tests/RunCMake/try_compile/RunCMakeTest.cmake | 1 + Tests/RunCMake/try_compile/WarnDeprecated.cmake | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 Help/release/dev/try_compile-honor-CMAKE_WARN_DEPRECATED.rst create mode 100644 Tests/RunCMake/try_compile/WarnDeprecated.cmake diff --git a/Help/release/dev/try_compile-honor-CMAKE_WARN_DEPRECATED.rst b/Help/release/dev/try_compile-honor-CMAKE_WARN_DEPRECATED.rst new file mode 100644 index 0000000..9e13575 --- /dev/null +++ b/Help/release/dev/try_compile-honor-CMAKE_WARN_DEPRECATED.rst @@ -0,0 +1,6 @@ +try_compile-honor-CMAKE_WARN_DEPRECATED +--------------------------------------- + +* The :command:`try_compile` command source file signature now + honors the :variable:`CMAKE_WARN_DEPRECATED` variable value + in the generated test project. diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 3b46fc0..fbad778 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -44,6 +44,7 @@ static std::string const kCMAKE_TRY_COMPILE_OSX_ARCHITECTURES = "CMAKE_TRY_COMPILE_OSX_ARCHITECTURES"; static std::string const kCMAKE_TRY_COMPILE_PLATFORM_VARIABLES = "CMAKE_TRY_COMPILE_PLATFORM_VARIABLES"; +static std::string const kCMAKE_WARN_DEPRECATED = "CMAKE_WARN_DEPRECATED"; int cmCoreTryCompile::TryCompileCode(std::vector const& argv, bool isTryRun) @@ -453,6 +454,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector const& argv, vars.insert(kCMAKE_OSX_SYSROOT); vars.insert(kCMAKE_POSITION_INDEPENDENT_CODE); vars.insert(kCMAKE_SYSROOT); + vars.insert(kCMAKE_WARN_DEPRECATED); if (const char* varListStr = this->Makefile->GetDefinition( kCMAKE_TRY_COMPILE_PLATFORM_VARIABLES)) { diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake index 522433a..4934bcd 100644 --- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake +++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake @@ -18,6 +18,7 @@ run_cmake(NonSourceCompileDefinitions) set(RunCMake_TEST_OPTIONS --debug-trycompile) run_cmake(PlatformVariables) +run_cmake(WarnDeprecated) unset(RunCMake_TEST_OPTIONS) run_cmake(TargetTypeExe) diff --git a/Tests/RunCMake/try_compile/WarnDeprecated.cmake b/Tests/RunCMake/try_compile/WarnDeprecated.cmake new file mode 100644 index 0000000..dfcb5f9 --- /dev/null +++ b/Tests/RunCMake/try_compile/WarnDeprecated.cmake @@ -0,0 +1,19 @@ +enable_language(C) + +set(CMAKE_WARN_DEPRECATED SOME_VALUE) + +try_compile(result ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src.c + OUTPUT_VARIABLE out + ) +if(NOT result) + message(FATAL_ERROR "try_compile failed:\n${out}") +endif() + +# Check that the cache was populated with our custom variable. +file(STRINGS ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/CMakeCache.txt entries + REGEX CMAKE_WARN_DEPRECATED:UNINITIALIZED=${CMAKE_WARN_DEPRECATED} + ) +if(NOT entries) + message(FATAL_ERROR "try_compile did not populate cache as expected") +endif() -- cgit v0.12