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:
Brad King 2011-12-15 11:39:42 -05:00
parent 7e0d9f15d6
commit 414a780d1c
1 changed files with 21 additions and 5 deletions

View File

@ -57,12 +57,28 @@ function(_setup_mingw_config_and_build source_dir)
"Or set the cache variable MINGW_GFORTRAN to the full path. "
" This is required to build")
endif()
execute_process(COMMAND ${MINGW_GFORTRAN} -v ERROR_VARIABLE out)
if(NOT "${out}" MATCHES "Target:.*mingw32")
message(FATAL_ERROR "Non-MinGW gfortran found: ${MINGW_GFORTRAN}\n"
"output from -v [${out}]\n"
"set MINGW_GFORTRAN to the path to MinGW fortran.")
# Validate the MinGW gfortran we found.
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_mingw_target "Target:.*64.*mingw")
else()
set(_mingw_target "Target:.*mingw32")
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)
file(TO_NATIVE_PATH "${MINGW_PATH}" MINGW_PATH)
string(REPLACE "\\" "\\\\" MINGW_PATH "${MINGW_PATH}")