Path: blob/devel/cmake/Modules/testGFortranVersion.cmake
3206 views
# Quick hack to test if the GNU Fortran version is >= 7 IF (NOT(CMAKE_CROSSCOMPILING)) FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testGFortranVersion.F90 " program versiontest character(len=2) :: major, minor #if defined(__GFORTRAN__) && defined(__GNUC__) && defined(__GNUC_MINOR__) write(major, '(I2)') __GNUC__ write(minor, '(I2)') __GNUC_MINOR__ write(*,'(A)') trim(adjustl(major)) // '.' // trim(adjustl(minor)) #else write(*,'(A)') '1.0' #endif end program versiontest ") TRY_RUN(GFORTRAN_VERSIONTEST_RUN_RESULT GFORTRAN_VERSIONTEST_COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testGFortranVersion.F90 COMPILE_OUTPUT_VARIABLE GFORTRAN_VERSIONTEST_COMPILED RUN_OUTPUT_VARIABLE GFORTRAN_VERSION) IF(GFORTRAN_VERSIONTEST_COMPILE_RESULT AND GFORTRAN_VERSIONTEST_RUN_RESULT EQUAL 0) IF(GFORTRAN_VERSION VERSION_GREATER 7) MESSAGE(STATUS "Checking whether GFortran version >= 7 -- yes") SET(CMAKE_Fortran_COMPILER_GNU_VERSION_OK 1 CACHE BOOL "") ELSE() MESSAGE(STATUS "Checking whether GFortran version >= 7 -- no") SET(CMAKE_Fortran_COMPILER_GNU_VERSION_OK 0 CACHE BOOL "") ENDIF() ELSE() MESSAGE(STATUS "Could not determine the Fortran compiler version") MESSAGE(STATUS "${COMPILE_RESULT}") MESSAGE(STATUS "${RUN_RESULT}") ENDIF() ELSE() # Handle cross-compilation without user intervention FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testGFortranVersion.F90 " program versiontest #if defined(__GFORTRAN__) && defined(__GNUC__) && defined(__GNUC_MINOR__) #if __GNUC__<7 #if __GNUC_MINOR__<0 ! Gfortran versions <7 are known not to fully work with Elmer #error #endif #endif #endif end program versiontest ") TRY_COMPILE(GFORTRAN_VERSIONTEST_COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testGFortranVersion.F90 OUTPUT_VARIABLE OUTPUT) IF(GFORTRAN_VERSIONTEST_COMPILE_RESULT) MESSAGE(STATUS "Checking whether GFortran version >= 7 -- yes") SET(CMAKE_Fortran_COMPILER_GNU_VERSION_OK 1 CACHE BOOL "") ELSE() MESSAGE(STATUS "Checking whether GFortran version >= 7 -- no") SET(CMAKE_Fortran_COMPILER_GNU_VERSION_OK 0 CACHE BOOL "") ENDIF() ENDIF() MARK_AS_ADVANCED(CMAKE_Fortran_COMPILER_GNU_VERSION_OK)