mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-07 06:40:16 -05:00
CheckFortranSource*: Avoid passing -DVAR to linker
The test project is compiled with a `-DVAR` compiler flag where `VAR` is the result variable. Tell `try_compile` to add the flag through `add_definitions` instead of `CMAKE_Fortran_FLAGS` so that it is not used for linking. Otherwise some Fortran compilers (e.g. XL 15) do not like the flag when used to drive linking.
This commit is contained in:
@@ -103,8 +103,6 @@ macro(CHECK_Fortran_SOURCE_COMPILES SOURCE VAR)
|
|||||||
if(NOT _SRC_EXT)
|
if(NOT _SRC_EXT)
|
||||||
set(_SRC_EXT F)
|
set(_SRC_EXT F)
|
||||||
endif()
|
endif()
|
||||||
set(MACRO_CHECK_FUNCTION_DEFINITIONS
|
|
||||||
"-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
|
|
||||||
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
||||||
set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
||||||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
||||||
@@ -132,10 +130,10 @@ macro(CHECK_Fortran_SOURCE_COMPILES SOURCE VAR)
|
|||||||
try_compile(${VAR}
|
try_compile(${VAR}
|
||||||
${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}
|
||||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
|
||||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
COMPILE_DEFINITIONS -D${VAR} ${CMAKE_REQUIRED_DEFINITIONS}
|
||||||
${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
||||||
${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
|
${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
|
||||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
|
||||||
"${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
|
"${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||||
OUTPUT_VARIABLE OUTPUT)
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
|
||||||
|
|||||||
@@ -98,8 +98,6 @@ macro(CHECK_Fortran_SOURCE_RUNS SOURCE VAR)
|
|||||||
if(NOT _SRC_EXT)
|
if(NOT _SRC_EXT)
|
||||||
set(_SRC_EXT F90)
|
set(_SRC_EXT F90)
|
||||||
endif()
|
endif()
|
||||||
set(MACRO_CHECK_FUNCTION_DEFINITIONS
|
|
||||||
"-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
|
|
||||||
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
||||||
set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
||||||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
||||||
@@ -127,10 +125,10 @@ macro(CHECK_Fortran_SOURCE_RUNS SOURCE VAR)
|
|||||||
try_run(${VAR}_EXITCODE ${VAR}_COMPILED
|
try_run(${VAR}_EXITCODE ${VAR}_COMPILED
|
||||||
${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}
|
||||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
|
||||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
COMPILE_DEFINITIONS -D${VAR} ${CMAKE_REQUIRED_DEFINITIONS}
|
||||||
${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
||||||
${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
|
${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
|
||||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
|
||||||
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
|
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
|
||||||
"${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
|
"${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||||
COMPILE_OUTPUT_VARIABLE OUTPUT
|
COMPILE_OUTPUT_VARIABLE OUTPUT
|
||||||
|
|||||||
@@ -51,40 +51,36 @@ add_custom_target(checksayhello ALL
|
|||||||
)
|
)
|
||||||
add_dependencies(checksayhello sayhello)
|
add_dependencies(checksayhello sayhello)
|
||||||
|
|
||||||
# Exclude this test on IBM XL for now because the check strangely
|
set(err_log ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log)
|
||||||
# fails with 'ld: 0706-029 Use a number with the -H flag'.
|
file(REMOVE "${err_log}")
|
||||||
if(NOT CMAKE_Fortran_COMPILER_ID STREQUAL XL)
|
include(CheckFortranSourceCompiles)
|
||||||
set(err_log ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log)
|
unset(HAVE_PRINT CACHE)
|
||||||
file(REMOVE "${err_log}")
|
CHECK_Fortran_SOURCE_COMPILES([[
|
||||||
include(CheckFortranSourceCompiles)
|
|
||||||
unset(HAVE_PRINT CACHE)
|
|
||||||
CHECK_Fortran_SOURCE_COMPILES([[
|
|
||||||
PROGRAM TEST_HAVE_PRINT
|
PROGRAM TEST_HAVE_PRINT
|
||||||
PRINT *, 'Hello'
|
PRINT *, 'Hello'
|
||||||
END
|
END
|
||||||
]] HAVE_PRINT)
|
]] HAVE_PRINT)
|
||||||
if(NOT HAVE_PRINT)
|
if(NOT HAVE_PRINT)
|
||||||
if(EXISTS "${err_log}")
|
if(EXISTS "${err_log}")
|
||||||
file(READ "${err_log}" err)
|
file(READ "${err_log}" err)
|
||||||
endif()
|
|
||||||
string(REPLACE "\n" "\n " err " ${err}")
|
|
||||||
message(SEND_ERROR "CHECK_Fortran_SOURCE_COMPILES for HAVE_PRINT failed:\n"
|
|
||||||
"${err}")
|
|
||||||
endif()
|
endif()
|
||||||
|
string(REPLACE "\n" "\n " err " ${err}")
|
||||||
|
message(SEND_ERROR "CHECK_Fortran_SOURCE_COMPILES for HAVE_PRINT failed:\n"
|
||||||
|
"${err}")
|
||||||
|
endif()
|
||||||
|
|
||||||
unset(Fortran_BOGUS_FLAG CACHE)
|
unset(Fortran_BOGUS_FLAG CACHE)
|
||||||
include(CheckFortranCompilerFlag)
|
include(CheckFortranCompilerFlag)
|
||||||
CHECK_Fortran_COMPILER_FLAG(-_this_is_not_a_flag_ Fortran_BOGUS_FLAG)
|
CHECK_Fortran_COMPILER_FLAG(-_this_is_not_a_flag_ Fortran_BOGUS_FLAG)
|
||||||
if (Fortran_BOGUS_FLAG)
|
if (Fortran_BOGUS_FLAG)
|
||||||
message(SEND_ERROR "CHECK_Fortran_COMPILER_FLAG() succeeded, but should have failed")
|
message(SEND_ERROR "CHECK_Fortran_COMPILER_FLAG() succeeded, but should have failed")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
unset(Fortran_RUN_FLAG CACHE)
|
unset(Fortran_RUN_FLAG CACHE)
|
||||||
include(CheckFortranSourceRuns)
|
include(CheckFortranSourceRuns)
|
||||||
check_fortran_source_runs("program a; end program" Fortran_RUN_FLAG SRC_EXT F90)
|
check_fortran_source_runs("program a; end program" Fortran_RUN_FLAG SRC_EXT F90)
|
||||||
if(NOT Fortran_RUN_FLAG)
|
if(NOT Fortran_RUN_FLAG)
|
||||||
message(SEND_ERROR "CHECK_Fortran_SOURCE_RUNS() failed")
|
message(SEND_ERROR "CHECK_Fortran_SOURCE_RUNS() failed")
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Test generation of preprocessed sources.
|
# Test generation of preprocessed sources.
|
||||||
|
|||||||
Reference in New Issue
Block a user