From 15e77fbd40e324fd0be394a73ed94800bb47ad2e Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 9 Nov 2020 14:05:43 -0500 Subject: FortranCInterface: Honor CMAKE_EXE_LINKER_FLAGS under CMP0056 Policy CMP0056 determines whether `CMAKE_EXE_LINKER_FLAGS` are passed into the test project used by the source-file signature of `try_compile`. That affects how implicit link directories are detected, so we need to also honor the policy for the source-directory signature of `try_compile` used in FortranCInterface in order to get matching link directories. Fixes: #21408 --- Modules/FortranCInterface.cmake | 8 ++++++++ Modules/FortranCInterface/Detect.cmake | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake index 547346b..733c723 100644 --- a/Modules/FortranCInterface.cmake +++ b/Modules/FortranCInterface.cmake @@ -343,6 +343,13 @@ function(FortranCInterface_VERIFY) set(_desc "Verifying Fortran/${lang} Compiler Compatibility") message(CHECK_START "${_desc}") + cmake_policy(GET CMP0056 _FortranCInterface_CMP0056) + if(_FortranCInterface_CMP0056 STREQUAL "NEW") + set(_FortranCInterface_EXE_LINKER_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}") + else() + set(_FortranCInterface_EXE_LINKER_FLAGS "") + endif() + # Build a sample project which reports symbols. set(CMAKE_TRY_COMPILE_CONFIGURATION Release) try_compile(FortranCInterface_VERIFY_${lang}_COMPILED @@ -358,6 +365,7 @@ function(FortranCInterface_VERIFY) "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}" "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}" "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}" + ${_FortranCInterface_EXE_LINKER_FLAGS} OUTPUT_VARIABLE _output) file(WRITE "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" "${_output}") diff --git a/Modules/FortranCInterface/Detect.cmake b/Modules/FortranCInterface/Detect.cmake index c75067b..998faf1 100644 --- a/Modules/FortranCInterface/Detect.cmake +++ b/Modules/FortranCInterface/Detect.cmake @@ -26,6 +26,14 @@ unset(FortranCInterface_VERIFIED_CXX CACHE) set(_result) +cmake_policy(GET CMP0056 _FortranCInterface_CMP0056) +if(_FortranCInterface_CMP0056 STREQUAL "NEW") + set(_FortranCInterface_EXE_LINKER_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}") +else() + set(_FortranCInterface_EXE_LINKER_FLAGS "") +endif() +unset(_FortranCInterface_CMP0056) + # Build a sample project which reports symbols. set(CMAKE_TRY_COMPILE_CONFIGURATION Release) try_compile(FortranCInterface_COMPILED @@ -38,9 +46,11 @@ try_compile(FortranCInterface_COMPILED "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}" "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}" "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}" + ${_FortranCInterface_EXE_LINKER_FLAGS} OUTPUT_VARIABLE FortranCInterface_OUTPUT) set(FortranCInterface_COMPILED ${FortranCInterface_COMPILED}) unset(FortranCInterface_COMPILED CACHE) +unset(_FortranCInterface_EXE_LINKER_FLAGS) # Locate the sample project executable. set(FortranCInterface_EXE) -- cgit v0.12