CMakeAddFortranSubdirectory: Validate gfortran architecture
Verify that MINGW_GFORTRAN not only points to a MinGW gfortran but also one that compiles for the target architecture. This prevents using a 32-bit gfortran in a 64-bit MSVC build.
This commit is contained in:
parent
7e0d9f15d6
commit
414a780d1c
|
@ -57,12 +57,28 @@ function(_setup_mingw_config_and_build source_dir)
|
||||||
"Or set the cache variable MINGW_GFORTRAN to the full path. "
|
"Or set the cache variable MINGW_GFORTRAN to the full path. "
|
||||||
" This is required to build")
|
" This is required to build")
|
||||||
endif()
|
endif()
|
||||||
execute_process(COMMAND ${MINGW_GFORTRAN} -v ERROR_VARIABLE out)
|
|
||||||
if(NOT "${out}" MATCHES "Target:.*mingw32")
|
# Validate the MinGW gfortran we found.
|
||||||
message(FATAL_ERROR "Non-MinGW gfortran found: ${MINGW_GFORTRAN}\n"
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
"output from -v [${out}]\n"
|
set(_mingw_target "Target:.*64.*mingw")
|
||||||
"set MINGW_GFORTRAN to the path to MinGW fortran.")
|
else()
|
||||||
|
set(_mingw_target "Target:.*mingw32")
|
||||||
endif()
|
endif()
|
||||||
|
execute_process(COMMAND "${MINGW_GFORTRAN}" -v
|
||||||
|
ERROR_VARIABLE out ERROR_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT "${out}" MATCHES "${_mingw_target}")
|
||||||
|
string(REPLACE "\n" "\n " out " ${out}")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"MINGW_GFORTRAN is set to\n"
|
||||||
|
" ${MINGW_GFORTRAN}\n"
|
||||||
|
"which is not a MinGW gfortran for this architecture. "
|
||||||
|
"The output from -v does not match \"${_mingw_target}\":\n"
|
||||||
|
"${out}\n"
|
||||||
|
"Set MINGW_GFORTRAN to a proper MinGW gfortran for this architecture."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Configure scripts to run MinGW tools with the proper PATH.
|
||||||
get_filename_component(MINGW_PATH ${MINGW_GFORTRAN} PATH)
|
get_filename_component(MINGW_PATH ${MINGW_GFORTRAN} PATH)
|
||||||
file(TO_NATIVE_PATH "${MINGW_PATH}" MINGW_PATH)
|
file(TO_NATIVE_PATH "${MINGW_PATH}" MINGW_PATH)
|
||||||
string(REPLACE "\\" "\\\\" MINGW_PATH "${MINGW_PATH}")
|
string(REPLACE "\\" "\\\\" MINGW_PATH "${MINGW_PATH}")
|
||||||
|
|
Loading…
Reference in New Issue