# #//===----------------------------------------------------------------------===// #// #// The LLVM Compiler Infrastructure #// #// This file is dual licensed under the MIT and the University of Illinois Open #// Source Licenses. See LICENSE.txt for details. #// #//===----------------------------------------------------------------------===// # # Checking a fortran compiler flag # There is no real trivial way to do this in CMake, so we implement it here # this will have ${boolean} = TRUE if the flag succeeds, otherwise false. function(libomp_check_fortran_flag flag boolean) if(NOT DEFINED "${boolean}") set(retval TRUE) set(fortran_source " program hello print *, \"Hello World!\" end program hello") set(failed_regexes "[Ee]rror;[Uu]nknown;[Ss]kipping") if(CMAKE_VERSION VERSION_GREATER 3.1 OR CMAKE_VERSION VERSION_EQUAL 3.1) include(CheckFortranSourceCompiles) check_fortran_source_compiles("${fortran_source}" ${boolean} FAIL_REGEX "${failed_regexes}") set(${boolean} ${${boolean}} PARENT_SCOPE) return() else() # Our manual check for cmake versions that don't have CheckFortranSourceCompiles set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_flag_check) file(MAKE_DIRECTORY ${base_dir}) file(WRITE ${base_dir}/fortran_source.f "${fortran_source}") message(STATUS "Performing Test ${boolean}") execute_process( COMMAND ${CMAKE_Fortran_COMPILER} "${flag}" ${base_dir}/fortran_source.f WORKING_DIRECTORY ${base_dir} RESULT_VARIABLE exit_code OUTPUT_VARIABLE OUTPUT ERROR_VARIABLE OUTPUT ) if(${exit_code} EQUAL 0) foreach(regex IN LISTS failed_regexes) if("${OUTPUT}" MATCHES ${regex}) set(retval FALSE) endif() endforeach() else() set(retval FALSE) endif() if(${retval}) set(${boolean} 1 CACHE INTERNAL "Test ${boolean}") message(STATUS "Performing Test ${boolean} - Success") file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log "Performing Fortran Compiler Flag test ${boolean} succeeded with the following output:\n" "${OUTPUT}\n" "Source file was:\n${fortran_source}\n") else() set(${boolean} "" CACHE INTERNAL "Test ${boolean}") message(STATUS "Performing Test ${boolean} - Failed") file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "Performing Fortran Compiler Flag test ${boolean} failed with the following output:\n" "${OUTPUT}\n" "Source file was:\n${fortran_source}\n") endif() endif() set(${boolean} ${retval} PARENT_SCOPE) endif() endfunction()