diff options
author | Brad King <brad.king@kitware.com> | 2020-02-27 16:04:20 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-02-27 16:09:25 (GMT) |
commit | 8e2683cf6db078b33cf0d5162c1a72b6f553b0be (patch) | |
tree | 40df907de22da14deea45eb00768f1627e2906ce /Modules/FortranCInterface | |
parent | c58b9c5ab94d674c76a17e6154f05e0e8c5c37d1 (diff) | |
download | CMake-8e2683cf6db078b33cf0d5162c1a72b6f553b0be.zip CMake-8e2683cf6db078b33cf0d5162c1a72b6f553b0be.tar.gz CMake-8e2683cf6db078b33cf0d5162c1a72b6f553b0be.tar.bz2 |
FortranCInterface: Fix broken search for test exe when cross-compiling
Previously the `find_program` call we used to locate the test executable
but that can be broken by `CMAKE_FIND_ROOT_PATH_MODE_PROGRAM`. Instead
teach the test project to write a file with the location of the
executable it builds. Load that file to get the exact location.
Fixes: #20390
Diffstat (limited to 'Modules/FortranCInterface')
-rw-r--r-- | Modules/FortranCInterface/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Modules/FortranCInterface/Detect.cmake | 10 |
2 files changed, 6 insertions, 8 deletions
diff --git a/Modules/FortranCInterface/CMakeLists.txt b/Modules/FortranCInterface/CMakeLists.txt index 381080b..13e4498 100644 --- a/Modules/FortranCInterface/CMakeLists.txt +++ b/Modules/FortranCInterface/CMakeLists.txt @@ -101,3 +101,7 @@ set_property(TARGET symbols PROPERTY POSITION_INDEPENDENT_CODE 1) # Require symbols through Fortran. add_executable(FortranCInterface main.F call_sub.f ${call_mod}) target_link_libraries(FortranCInterface PUBLIC symbols) + +file(GENERATE OUTPUT exe-$<CONFIG>.cmake CONTENT [[ +set(FortranCInterface_EXE "$<TARGET_FILE:FortranCInterface>") +]]) diff --git a/Modules/FortranCInterface/Detect.cmake b/Modules/FortranCInterface/Detect.cmake index 33de6c6..c75067b 100644 --- a/Modules/FortranCInterface/Detect.cmake +++ b/Modules/FortranCInterface/Detect.cmake @@ -43,17 +43,11 @@ set(FortranCInterface_COMPILED ${FortranCInterface_COMPILED}) unset(FortranCInterface_COMPILED CACHE) # Locate the sample project executable. +set(FortranCInterface_EXE) if(FortranCInterface_COMPILED) - find_program(FortranCInterface_EXE - NAMES FortranCInterface${CMAKE_EXECUTABLE_SUFFIX} - PATHS ${FortranCInterface_BINARY_DIR} ${FortranCInterface_BINARY_DIR}/Release - NO_DEFAULT_PATH - ) - set(FortranCInterface_EXE ${FortranCInterface_EXE}) - unset(FortranCInterface_EXE CACHE) + include(${FortranCInterface_BINARY_DIR}/exe-Release.cmake OPTIONAL) else() set(_result "Failed to compile") - set(FortranCInterface_EXE) file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "Fortran/C interface test project failed with the following output:\n" "${FortranCInterface_OUTPUT}\n") |