浏览代码

ENH: Create Fortran ABI detection framework

This invokes CMakeDetermineCompilerABI.cmake for Fortran at the same
place it is already done for C and CXX.
Brad King 16 年之前
父节点
当前提交
de6f88d06f
共有 2 个文件被更改,包括 17 次插入0 次删除
  1. 3 0
      Modules/CMakeFortranCompilerABI.F
  2. 14 0
      Modules/CMakeTestFortranCompiler.cmake

+ 3 - 0
Modules/CMakeFortranCompilerABI.F

@@ -0,0 +1,3 @@
+      PROGRAM CMakeFortranCompilerId
+        PRINT *, 'ABI Detection Binary'
+      END

+ 14 - 0
Modules/CMakeTestFortranCompiler.cmake

@@ -34,6 +34,20 @@ ELSE(NOT CMAKE_Fortran_COMPILER_WORKS)
       "the following output:\n${OUTPUT}\n\n")
   ENDIF(FORTRAN_TEST_WAS_RUN)
   SET(CMAKE_Fortran_COMPILER_WORKS 1 CACHE INTERNAL "")
+
+  IF(CMAKE_Fortran_COMPILER_FORCED)
+    # The compiler configuration was forced by the user.
+    # Assume the user has configured all compiler information.
+  ELSE(CMAKE_Fortran_COMPILER_FORCED)
+    # Try to identify the ABI and configure it into CMakeFortranCompiler.cmake
+    INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+    CMAKE_DETERMINE_COMPILER_ABI(Fortran ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F)
+    CONFIGURE_FILE(
+      ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake
+      @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
+      )
+  ENDIF(CMAKE_Fortran_COMPILER_FORCED)
 ENDIF(NOT CMAKE_Fortran_COMPILER_WORKS)
 
 IF(CMAKE_Fortran_COMPILER_WORKS)