diff options
author | Brad King <brad.king@kitware.com> | 2021-07-15 16:58:44 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-07-15 17:06:18 (GMT) |
commit | 3ddd7f35760055fc501d454f9029f3987536957b (patch) | |
tree | 37932a0f25ef5e617cb662391503e1c4adc045cd /Modules | |
parent | 7c6234dd21b7af95e7edea6b281d859dafb2ae81 (diff) | |
download | CMake-3ddd7f35760055fc501d454f9029f3987536957b.zip CMake-3ddd7f35760055fc501d454f9029f3987536957b.tar.gz CMake-3ddd7f35760055fc501d454f9029f3987536957b.tar.bz2 |
enable_language: Fix test for working compiler with CMP0126 NEW behavior
Update the logic that converts a `try_compile` result from a cache
entry to a normal variable to tolerate an existing normal variable
under CMP0126 NEW behavior. Otherwise the `try_compile` result
is ignored because CMake uses the false value of the normal variable,
and CMake incorrectly reports that the compiler does not work.
This went unnoticed for some languages (e.g. C and CXX) because the
check for a working compiler is skipped if ABI detection works.
It does affect other languages (e.g. CSharp).
Fixes: #22423
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CMakeTestCCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestCSharpCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestCUDACompiler.cmake | 4 | ||||
-rw-r--r-- | Modules/CMakeTestCXXCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestFortranCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestHIPCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestOBJCCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestOBJCXXCompiler.cmake | 3 | ||||
-rw-r--r-- | Modules/CMakeTestSwiftCompiler.cmake | 3 |
9 files changed, 28 insertions, 0 deletions
diff --git a/Modules/CMakeTestCCompiler.cmake b/Modules/CMakeTestCCompiler.cmake index 03f2db2..ae5aa27 100644 --- a/Modules/CMakeTestCCompiler.cmake +++ b/Modules/CMakeTestCCompiler.cmake @@ -50,6 +50,9 @@ if(NOT CMAKE_C_COMPILER_WORKS) "int main(int argc, char* argv[])\n" "#endif\n" "{ (void)argv; return argc-1;}\n") + # Clear result from normal variable. + unset(CMAKE_C_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_C_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c OUTPUT_VARIABLE __CMAKE_C_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestCSharpCompiler.cmake b/Modules/CMakeTestCSharpCompiler.cmake index 1119a45..adea250 100644 --- a/Modules/CMakeTestCSharpCompiler.cmake +++ b/Modules/CMakeTestCSharpCompiler.cmake @@ -30,6 +30,9 @@ if(NOT CMAKE_CSharp_COMPILER_WORKS) " }" "}" ) + # Clear result from normal variable. + unset(CMAKE_CSharp_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_BINARY_DIR} "${test_compile_file}" OUTPUT_VARIABLE __CMAKE_CSharp_COMPILER_OUTPUT ) diff --git a/Modules/CMakeTestCUDACompiler.cmake b/Modules/CMakeTestCUDACompiler.cmake index a18947b..25a3653 100644 --- a/Modules/CMakeTestCUDACompiler.cmake +++ b/Modules/CMakeTestCUDACompiler.cmake @@ -36,6 +36,10 @@ if(NOT CMAKE_CUDA_COMPILER_WORKS) "#endif\n" "int main(){return 0;}\n") + # Clear result from normal variable. + unset(CMAKE_CUDA_COMPILER_WORKS) + + # Puts test result in cache variable. try_compile(CMAKE_CUDA_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.cu OUTPUT_VARIABLE __CMAKE_CUDA_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestCXXCompiler.cmake b/Modules/CMakeTestCXXCompiler.cmake index 0d2d0b0..bbe3533 100644 --- a/Modules/CMakeTestCXXCompiler.cmake +++ b/Modules/CMakeTestCXXCompiler.cmake @@ -43,6 +43,9 @@ if(NOT CMAKE_CXX_COMPILER_WORKS) "# error \"The CMAKE_CXX_COMPILER is set to a C compiler\"\n" "#endif\n" "int main(){return 0;}\n") + # Clear result from normal variable. + unset(CMAKE_CXX_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_CXX_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestFortranCompiler.cmake b/Modules/CMakeTestFortranCompiler.cmake index 10fb0a7..f25788d 100644 --- a/Modules/CMakeTestFortranCompiler.cmake +++ b/Modules/CMakeTestFortranCompiler.cmake @@ -36,6 +36,9 @@ if(NOT CMAKE_Fortran_COMPILER_WORKS) PRINT *, 'Hello' END ") + # Clear result from normal variable. + unset(CMAKE_Fortran_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f OUTPUT_VARIABLE OUTPUT) diff --git a/Modules/CMakeTestHIPCompiler.cmake b/Modules/CMakeTestHIPCompiler.cmake index d9fcc9d..62f0657 100644 --- a/Modules/CMakeTestHIPCompiler.cmake +++ b/Modules/CMakeTestHIPCompiler.cmake @@ -46,6 +46,9 @@ if(NOT CMAKE_HIP_COMPILER_WORKS) "# error \"The CMAKE_HIP_COMPILER is set to a C/CXX compiler\"\n" "#endif\n" "int main(){return 0;}\n") + # Clear result from normal variable. + unset(CMAKE_HIP_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_HIP_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testHIPCompiler.hip OUTPUT_VARIABLE __CMAKE_HIP_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestOBJCCompiler.cmake b/Modules/CMakeTestOBJCCompiler.cmake index 298272b..20d1f8b 100644 --- a/Modules/CMakeTestOBJCCompiler.cmake +++ b/Modules/CMakeTestOBJCCompiler.cmake @@ -47,6 +47,9 @@ if(NOT CMAKE_OBJC_COMPILER_WORKS) "#endif\n" "int main(int argc, char* argv[])\n" "{ (void)argv; return argc-1;}\n") + # Clear result from normal variable. + unset(CMAKE_OBJC_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_OBJC_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCCompiler.m OUTPUT_VARIABLE __CMAKE_OBJC_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestOBJCXXCompiler.cmake b/Modules/CMakeTestOBJCXXCompiler.cmake index 36e3efc..4f7185f 100644 --- a/Modules/CMakeTestOBJCXXCompiler.cmake +++ b/Modules/CMakeTestOBJCXXCompiler.cmake @@ -46,6 +46,9 @@ if(NOT CMAKE_OBJCXX_COMPILER_WORKS) "# error \"The CMAKE_OBJCXX_COMPILER is not an Objective-C++ compiler\"\n" "#endif\n" "int main(){return 0;}\n") + # Clear result from normal variable. + unset(CMAKE_OBJCXX_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_OBJCXX_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCXXCompiler.mm OUTPUT_VARIABLE __CMAKE_OBJCXX_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestSwiftCompiler.cmake b/Modules/CMakeTestSwiftCompiler.cmake index d98dc9d..2f2546f 100644 --- a/Modules/CMakeTestSwiftCompiler.cmake +++ b/Modules/CMakeTestSwiftCompiler.cmake @@ -23,6 +23,9 @@ if(NOT CMAKE_Swift_COMPILER_WORKS) PrintTestCompilerStatus("Swift") file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift "print(\"CMake\")\n") + # Clear result from normal variable. + unset(CMAKE_Swift_COMPILER_WORKS) + # Puts test result in cache variable. try_compile(CMAKE_Swift_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift OUTPUT_VARIABLE __CMAKE_Swift_COMPILER_OUTPUT) |