diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2004-08-06 18:51:41 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2004-08-06 18:51:41 (GMT) |
commit | 9655299f08b5aa04ea63193ebecfa08efae7ca3d (patch) | |
tree | 69f0415d9b8414cee074b25d80c4520a6feb6086 /Modules/CMakeDetermineFortranCompiler.cmake | |
parent | 0220a85e3337f87c3b34c2d49d85b6ace127ea50 (diff) | |
download | CMake-9655299f08b5aa04ea63193ebecfa08efae7ca3d.zip CMake-9655299f08b5aa04ea63193ebecfa08efae7ca3d.tar.gz CMake-9655299f08b5aa04ea63193ebecfa08efae7ca3d.tar.bz2 |
ENH: initial fortran support
Diffstat (limited to 'Modules/CMakeDetermineFortranCompiler.cmake')
-rw-r--r-- | Modules/CMakeDetermineFortranCompiler.cmake | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/Modules/CMakeDetermineFortranCompiler.cmake b/Modules/CMakeDetermineFortranCompiler.cmake new file mode 100644 index 0000000..52004ee --- /dev/null +++ b/Modules/CMakeDetermineFortranCompiler.cmake @@ -0,0 +1,83 @@ +# determine the compiler to use for C programs +# NOTE, a generator may set CMAKE_C_COMPILER before +# loading this file to force a compiler. +# use environment variable CCC first if defined by user, next use +# the cmake variable CMAKE_GENERATOR_CC which can be defined by a generator +# as a default compiler + +IF(NOT CMAKE_FORTRAN_COMPILER) + # prefer the environment variable CC + IF($ENV{FC} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_FORTRAN_COMPILER_INIT $ENV{FC} PROGRAM PROGRAM_ARGS CMAKE_FORTRAN_FLAGS_ENV_INIT) + IF(EXISTS ${CMAKE_FORTRAN_COMPILER_INIT}) + ELSE(EXISTS ${CMAKE_FORTRAN_COMPILER_INIT}) + MESSAGE(FATAL_ERROR "Could not find compiler set in environment variable FC:\n$ENV{FC}.") + ENDIF(EXISTS ${CMAKE_FORTRAN_COMPILER_INIT}) + ENDIF($ENV{FC} MATCHES ".+") + + # next try prefer the compiler specified by the generator + IF(CMAKE_GENERATOR_FC) + IF(NOT CMAKE_FORTRAN_COMPILER_INIT) + SET(CMAKE_FORTRAN_COMPILER_INIT ${CMAKE_GENERATOR_FC}) + ENDIF(NOT CMAKE_FORTRAN_COMPILER_INIT) + ENDIF(CMAKE_GENERATOR_FC) + + + # if no compiler has been specified yet, then look for one + IF(NOT CMAKE_FORTRAN_COMPILER_INIT) + # if not in the envionment then search for the compiler in the path + SET(CMAKE_FORTRAN_COMPILER_LIST g77 ifort f77 f90 epcf90 efc ecc) + FIND_PROGRAM(CMAKE_FORTRAN_COMPILER_FULLPATH NAMES ${CMAKE_FORTRAN_COMPILER_LIST} ) + GET_FILENAME_COMPONENT(CMAKE_FORTRAN_COMPILER_INIT + ${CMAKE_FORTRAN_COMPILER_FULLPATH} NAME) + SET(CMAKE_FORTRAN_COMPILER_FULLPATH "${CMAKE_FORTRAN_COMPILER_FULLPATH}" CACHE INTERNAL "full path to the compiler cmake found") + ENDIF(NOT CMAKE_FORTRAN_COMPILER_INIT) + + SET(CMAKE_FORTRAN_COMPILER ${CMAKE_FORTRAN_COMPILER_INIT} CACHE STRING "Fortran compiler") +ENDIF(NOT CMAKE_FORTRAN_COMPILER) + +MARK_AS_ADVANCED(CMAKE_FORTRAN_COMPILER) + +FIND_PROGRAM(CMAKE_AR NAMES ar ) + +FIND_PROGRAM(CMAKE_RANLIB NAMES ranlib) +IF(NOT CMAKE_RANLIB) + SET(CMAKE_RANLIB : CACHE INTERNAL "noop for ranlib") +ENDIF(NOT CMAKE_RANLIB) +MARK_AS_ADVANCED(CMAKE_RANLIB) + +IF(NOT CMAKE_COMPILER_IS_GNUG77_RUN) + # test to see if the Fortran compiler is gnu + + IF(CMAKE_FORTRAN_FLAGS) + SET(CMAKE_BOOT_FORTRAN_FLAGS ${CMAKE_FORTRAN_FLAGS}) + ELSE(CMAKE_FORTRAN_FLAGS) + SET(CMAKE_BOOT_FORTRAN_FLAGS $ENV{FFLAGS}) + ENDIF(CMAKE_FORTRAN_FLAGS) + EXEC_PROGRAM(${CMAKE_FORTRAN_COMPILER} ARGS ${CMAKE_BOOT_FORTRAN_FLAGS} -E "\"${CMAKE_ROOT}/Modules/CMakeTestGNU.c\"" OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RETURN_VALUE CMAKE_COMPILER_RETURN) + SET(CMAKE_COMPILER_IS_GNUG77_RUN 1) + IF(NOT CMAKE_COMPILER_RETURN) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + SET(CMAKE_COMPILER_IS_GNUG77 1) + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeOutput.log + "Determining if the Fortran compiler is GNU succeeded with " + "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n") + ELSE("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeOutput.log + "Determining if the Fortran compiler is GNU failed with " + "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n") + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" ) + SET(CMAKE_COMPILER_IS_MINGW 1) + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" ) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" ) + SET(CMAKE_COMPILER_IS_CYGWIN 1) + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" ) + ENDIF(NOT CMAKE_COMPILER_RETURN) +ENDIF(NOT CMAKE_COMPILER_IS_GNUG77_RUN) + + +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in + ${CMAKE_BINARY_DIR}/CMakeFortranCompiler.cmake IMMEDIATE) +MARK_AS_ADVANCED(CMAKE_AR) |