[Cmake-commits] [cmake-commits] king committed CMakeDetermineFortranCompiler.cmake 1.25 1.26

cmake-commits at cmake.org cmake-commits at cmake.org
Wed Sep 9 16:39:49 EDT 2009


Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv6669/Modules

Modified Files:
	CMakeDetermineFortranCompiler.cmake 
Log Message:
Bias Fortran compiler search with C/C++ compilers

When CMAKE_Fortran_COMPILER and ENV{FC} are not defined CMake searches
for an available Fortran compiler.  This commit teaches the search code
to look for compiler executables next to the C and C++ compilers if they
are already found.  Furthermore, we bias the compiler executable name
preference order based on the vendor of the C and C++ compilers, which
increases the chance of finding a compatible compiler by default.


Index: CMakeDetermineFortranCompiler.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeDetermineFortranCompiler.cmake,v
retrieving revision 1.25
retrieving revision 1.26
diff -C 2 -d -r1.25 -r1.26
*** CMakeDetermineFortranCompiler.cmake	25 Jun 2009 12:45:19 -0000	1.25
--- CMakeDetermineFortranCompiler.cmake	9 Sep 2009 20:39:47 -0000	1.26
***************
*** 57,63 ****
--- 57,98 ----
        pgf90 xlf90 epcf90 fort77 frt pgf77 xlf fl32 af77 g77 f77
        )
+ 
+     # Vendor-specific compiler names.
+     SET(_Fortran_COMPILER_NAMES_GNU       gfortran gfortran-4 g95 g77)
+     SET(_Fortran_COMPILER_NAMES_Intel     ifort ifc efc)
+     SET(_Fortran_COMPILER_NAMES_PGI       pgf95 pgf90 pgf77)
+     SET(_Fortran_COMPILER_NAMES_XL        xlf)
+     SET(_Fortran_COMPILER_NAMES_VisualAge xlf95 xlf90 xlf)
+ 
+     # Prefer vendors matching the C and C++ compilers.
+     SET(CMAKE_Fortran_COMPILER_LIST
+       ${_Fortran_COMPILER_NAMES_${CMAKE_C_COMPILER_ID}}
+       ${_Fortran_COMPILER_NAMES_${CMAKE_CXX_COMPILER_ID}}
+       ${CMAKE_Fortran_COMPILER_LIST})
+     LIST(REMOVE_DUPLICATES CMAKE_Fortran_COMPILER_LIST)
    ENDIF(CMAKE_Fortran_COMPILER_INIT)
  
+   # Look for directories containing the C and C++ compilers.
+   SET(_Fortran_COMPILER_HINTS)
+   FOREACH(lang C CXX)
+     IF(CMAKE_${lang}_COMPILER AND IS_ABSOLUTE "${CMAKE_${lang}_COMPILER}")
+       GET_FILENAME_COMPONENT(_hint "${CMAKE_${lang}_COMPILER}" PATH)
+       IF(IS_DIRECTORY "${_hint}")
+         LIST(APPEND _Fortran_COMPILER_HINTS "${_hint}")
+       ENDIF()
+       SET(_hint)
+     ENDIF()
+   ENDFOREACH()
+ 
    # Find the compiler.
+   IF(_Fortran_COMPILER_HINTS)
+     # Prefer directories containing C and C++ compilers.
+     LIST(REMOVE_DUPLICATES _Fortran_COMPILER_HINTS)
+     FIND_PROGRAM(CMAKE_Fortran_COMPILER
+       NAMES ${CMAKE_Fortran_COMPILER_LIST}
+       PATHS ${_Fortran_COMPILER_HINTS}
+       NO_DEFAULT_PATH
+       DOC "Fortran compiler")
+   ENDIF()
    FIND_PROGRAM(CMAKE_Fortran_COMPILER NAMES ${CMAKE_Fortran_COMPILER_LIST} DOC "Fortran compiler")
    IF(CMAKE_Fortran_COMPILER_INIT AND NOT CMAKE_Fortran_COMPILER)



More information about the Cmake-commits mailing list