CheckFortranFunctionExists.cmake 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # - Check if the Fortran function exists.
  2. # CHECK_FORTRAN_FUNCTION_EXISTS(FUNCTION VARIABLE)
  3. # - macro which checks if the Fortran function exists
  4. # FUNCTION - the name of the Fortran function
  5. # VARIABLE - variable to store the result
  6. #
  7. # The following variables may be set before calling this macro to
  8. # modify the way the check is run:
  9. #
  10. # CMAKE_REQUIRED_LIBRARIES = list of libraries to link
  11. macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
  12. if(NOT DEFINED ${VARIABLE})
  13. message(STATUS "Looking for Fortran ${FUNCTION}")
  14. if(CMAKE_REQUIRED_LIBRARIES)
  15. set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
  16. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  17. else(CMAKE_REQUIRED_LIBRARIES)
  18. set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
  19. endif(CMAKE_REQUIRED_LIBRARIES)
  20. FILE(WRITE
  21. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
  22. "
  23. program TESTFortran
  24. external ${FUNCTION}
  25. call ${FUNCTION}()
  26. end program TESTFortran
  27. "
  28. )
  29. try_compile(${VARIABLE}
  30. ${CMAKE_BINARY_DIR}
  31. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
  32. CMAKE_FLAGS "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}"
  33. OUTPUT_VARIABLE OUTPUT
  34. )
  35. # message(STATUS "${OUTPUT}")
  36. if(${VARIABLE})
  37. set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
  38. message(STATUS "Looking for Fortran ${FUNCTION} - found")
  39. file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  40. "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n"
  41. "${OUTPUT}\n\n")
  42. else(${VARIABLE})
  43. message(STATUS "Looking for Fortran ${FUNCTION} - not found")
  44. set(${VARIABLE} "" CACHE INTERNAL "Have Fortran function ${FUNCTION}")
  45. file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  46. "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n"
  47. "${OUTPUT}\n\n")
  48. endif(${VARIABLE})
  49. endif(NOT DEFINED ${VARIABLE})
  50. endmacro(CHECK_FORTRAN_FUNCTION_EXISTS)