[cmake-commits] king committed CMakeDetermineFortranCompiler.cmake 1.14 1.14.2.1 CMakeFortranCompiler.cmake.in 1.7 1.7.2.1 CMakeFortranCompilerId.F90 NONE 1.1.2.1 CMakeFortranInformation.cmake 1.13 1.13.2.1

cmake-commits at cmake.org cmake-commits at cmake.org
Tue May 1 18:28:33 EDT 2007


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

Modified Files:
      Tag: CMake-Modules-CompilerId
	CMakeDetermineFortranCompiler.cmake 
	CMakeFortranCompiler.cmake.in CMakeFortranInformation.cmake 
Added Files:
      Tag: CMake-Modules-CompilerId
	CMakeFortranCompilerId.F90 
Log Message:
ENH: Using CMAKE_DETERMINE_COMPILER_ID to determine the Fortran compiler.  This works only for Fortran90+ compilers that run the preprocessor.  Otherwise we fall back to the old behavior.


Index: CMakeFortranCompiler.cmake.in
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeFortranCompiler.cmake.in,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -d -r1.7 -r1.7.2.1
--- CMakeFortranCompiler.cmake.in	4 Jul 2006 15:06:38 -0000	1.7
+++ CMakeFortranCompiler.cmake.in	1 May 2007 22:28:30 -0000	1.7.2.1
@@ -1,5 +1,7 @@
 SET(CMAKE_Fortran_COMPILER "@CMAKE_Fortran_COMPILER@")
 SET(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@")
+SET(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@")
+SET(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@")
 SET(CMAKE_AR "@CMAKE_AR@")
 SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
 SET(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@)
@@ -11,10 +13,12 @@
   SET(UNIX 1)
 ENDIF(CMAKE_COMPILER_IS_CYGWIN)
 
+SET(CMAKE_Fortran_COMPILER_ENV_VAR "FC")
+
 IF(CMAKE_COMPILER_IS_MINGW)
   SET(MINGW 1)
 ENDIF(CMAKE_COMPILER_IS_MINGW)
-SET(CMAKE_COMPILER_IS_GNUG77_RUN 1)
+SET(CMAKE_Fortran_COMPILER_ID_RUN 1)
 SET(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;f77;F77;f90;F90;for;f95;F95)
 SET(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
 SET(CMAKE_Fortran_LINKER_PREFERENCE Prefered)
@@ -23,4 +27,3 @@
 ELSE(UNIX)
   SET(CMAKE_Fortran_OUTPUT_EXTENSION .obj)
 ENDIF(UNIX)
-SET(CMAKE_Fortran_COMPILER_ENV_VAR "FC")

Index: CMakeFortranInformation.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeFortranInformation.cmake,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -d -r1.13 -r1.13.2.1
--- CMakeFortranInformation.cmake	15 Sep 2006 18:02:41 -0000	1.13
+++ CMakeFortranInformation.cmake	1 May 2007 22:28:30 -0000	1.13.2.1
@@ -8,6 +8,11 @@
 IF(CMAKE_COMPILER_IS_GNUG77)
   SET(CMAKE_BASE_NAME g77)
 ENDIF(CMAKE_COMPILER_IS_GNUG77)
+IF(CMAKE_Fortran_COMPILER_ID)
+  IF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_Fortran_COMPILER_ID}-Fortran.cmake)
+    SET(CMAKE_BASE_NAME ${CMAKE_Fortran_COMPILER_ID}-Fortran)
+  ENDIF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_Fortran_COMPILER_ID}-Fortran.cmake)
+ENDIF(CMAKE_Fortran_COMPILER_ID)
 SET(CMAKE_SYSTEM_AND_Fortran_COMPILER_INFO_FILE
   ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
 INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
@@ -42,9 +47,9 @@
   SET(CMAKE_SHARED_LIBRARY_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
 ENDIF(NOT CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
 
-IF(NOT CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
+IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
   SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
-ENDIF(NOT CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
+ENDIF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
 
 IF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
   SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}) 

--- NEW FILE: CMakeFortranCompilerId.F90 ---
PROGRAM CMakeFortranCompilerId
!     Identify the compiler
#if defined(__INTEL_COMPILER) || defined(__ICC)
   PRINT *, 'INFO:compiler[Intel]'
#elif defined(__SUNPRO_F90) || defined(__SUNPRO_F95)
   PRINT *, 'INFO:compiler[SunPro]'
#elif defined(__GNUC__)
   PRINT *, 'INFO:compiler[GNU]'
#elif defined(_COMPILER_VERSION)
   PRINT *, 'INFO:compiler[MIPSpro]'
!     This compiler is either not known or is too old to define an
!     identification macro.  Try to identify the platform and guess that
!     it is the native compiler.
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
   PRINT *, 'INFO:compiler[VisualAge]'
#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
   PRINT *, 'INFO:compiler[MIPSpro]'
#elif defined(__hpux) || defined(__hpux__)
   PRINT *, 'INFO:compiler[HP]'
#else
   PRINT *, 'INFO:compiler[]'
#endif

!     Identify the platform
#if defined(__linux) || defined(__linux__) || defined(linux)
   PRINT *, 'INFO:platform[Linux]'
#elif defined(__CYGWIN__)
   PRINT *, 'INFO:platform[Cygwin]'
#elif defined(__MINGW32__)
   PRINT *, 'INFO:platform[MinGW]'
#elif defined(__APPLE__)
   PRINT *, 'INFO:platform[Darwin]'
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
   PRINT *, 'INFO:platform[Windows]'
#elif defined(__FreeBSD__) || defined(__FreeBSD)
   PRINT *, 'INFO:platform[FreeBSD]'
#elif defined(__NetBSD__) || defined(__NetBSD)
   PRINT *, 'INFO:platform[NetBSD]'
#elif defined(__OpenBSD__) || defined(__OPENBSD)
   PRINT *, 'INFO:platform[OpenBSD]'
#elif defined(__sun) || defined(sun)
   PRINT *, 'INFO:platform[SunOS]'
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
   PRINT *, 'INFO:platform[AIX]'
#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
   PRINT *, 'INFO:platform[IRIX]'
#elif defined(__hpux) || defined(__hpux__)
   PRINT *, 'INFO:platform[HP-UX]'
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
   PRINT *, 'INFO:platform[BeOS]'
#elif defined(__QNX__) || defined(__QNXNTO__)
   PRINT *, 'INFO:platform[QNX]'
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
   PRINT *, 'INFO:platform[Tru64]'
#elif defined(__riscos) || defined(__riscos__)
   PRINT *, 'INFO:platform[RISCos]'
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
   PRINT *, 'INFO:platform[SINIX]'
#elif defined(__UNIX_SV__)
   PRINT *, 'INFO:platform[UNIX_SV]'
#elif defined(__bsdos__)
   PRINT *, 'INFO:platform[BSDOS]'
#elif defined(_MPRAS) || defined(MPRAS)
   PRINT *, 'INFO:platform[MP-RAS]'
#elif defined(__osf) || defined(__osf__)
   PRINT *, 'INFO:platform[OSF1]'
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
   PRINT *, 'INFO:platform[SCO_SV]'
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
   PRINT *, 'INFO:platform[ULTRIX]'
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
   PRINT *, 'INFO:platform[Xenix]'
#else
   PRINT *, 'INFO:platform[]'
#endif
END PROGRAM

Index: CMakeDetermineFortranCompiler.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeDetermineFortranCompiler.cmake,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -d -r1.14 -r1.14.2.1
--- CMakeDetermineFortranCompiler.cmake	21 Feb 2007 15:03:11 -0000	1.14
+++ CMakeDetermineFortranCompiler.cmake	1 May 2007 22:28:30 -0000	1.14.2.1
@@ -74,41 +74,61 @@
 ENDIF(NOT CMAKE_RANLIB)
 MARK_AS_ADVANCED(CMAKE_RANLIB)
 
-# do not test for GNU if the generator is visual studio
+# Build a small source file to identify the compiler.
 IF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-  SET(CMAKE_COMPILER_IS_GNUG77_RUN 1)
-ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio") 
+  SET(CMAKE_Fortran_COMPILER_ID_RUN 1)
+  SET(CMAKE_Fortran_PLATFORM_ID "Windows")
 
-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}${CMAKE_FILES_DIRECTORY}/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}${CMAKE_FILES_DIRECTORY}/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)
+  # TODO: Set the compiler id.  It is probably MSVC but
+  # the user may be using an integrated Intel compiler.
+  # SET(CMAKE_Fortran_COMPILER_ID "MSVC")
+ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+
+IF(NOT CMAKE_Fortran_COMPILER_ID_RUN)
+  SET(CMAKE_Fortran_COMPILER_ID_RUN 1)
 
+  # Try to identify the compiler.
+  SET(CMAKE_Fortran_COMPILER_ID)
+  INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(Fortran FFLAGS ${CMAKE_ROOT}/Modules/CMakeFortranCompilerId.F90)
+
+  # Fall back to old is-GNU test.
+  IF(NOT CMAKE_Fortran_COMPILER_ID)
+    EXEC_PROGRAM(${CMAKE_Fortran_COMPILER}
+      ARGS ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "\"${CMAKE_ROOT}/Modules/CMakeTestGNU.c\""
+      OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RETURN_VALUE CMAKE_COMPILER_RETURN)
+    IF(NOT CMAKE_COMPILER_RETURN)
+      IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" )
+        SET(CMAKE_Fortran_COMPILER_ID "GNU")
+        FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/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}${CMAKE_FILES_DIRECTORY}/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(NOT CMAKE_Fortran_PLATFORM_ID)
+        IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" )
+          SET(CMAKE_Fortran_PLATFORM_ID "MinGW")
+        ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" )
+        IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" )
+          SET(CMAKE_Fortran_PLATFORM_ID "Cygwin")
+        ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" )
+      ENDIF(NOT CMAKE_Fortran_PLATFORM_ID)
+    ENDIF(NOT CMAKE_COMPILER_RETURN)
+  ENDIF(NOT CMAKE_Fortran_COMPILER_ID)
+
+  # Set old compiler and platform id variables.
+  IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
+    SET(CMAKE_COMPILER_IS_GNUG77 1)
+  ENDIF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
+  IF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "MinGW")
+    SET(CMAKE_COMPILER_IS_MINGW 1)
+  ELSEIF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "Cygwin")
+    SET(CMAKE_COMPILER_IS_CYGWIN 1)
+  ENDIF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "MinGW")
+ENDIF(NOT CMAKE_Fortran_COMPILER_ID_RUN)
 
 # configure variables set in this file for fast reload later on
 CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in 



More information about the Cmake-commits mailing list