瀏覽代碼

Move CMAKE_<LANG>_COMPILER_WORKS to compiler information files

Since the parent commit this test result is specific to the version of
CMake.  Store it in the version-specific compiler information files
instead of CMakeCache.txt so testing can be re-done to meet the
requirements of the current version of CMake even if another version of
CMake was already used to configure the build tree.
Brad King 13 年之前
父節點
當前提交
3df81b4912

+ 1 - 0
Modules/CMakeCCompiler.cmake.in

@@ -9,6 +9,7 @@ set(CMAKE_RANLIB "@CMAKE_RANLIB@")
 set(CMAKE_LINKER "@CMAKE_LINKER@")
 set(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@)
 set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS @CMAKE_C_COMPILER_WORKS@)
 set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
 set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
 if(CMAKE_COMPILER_IS_CYGWIN)

+ 1 - 0
Modules/CMakeCXXCompiler.cmake.in

@@ -9,6 +9,7 @@ set(CMAKE_RANLIB "@CMAKE_RANLIB@")
 set(CMAKE_LINKER "@CMAKE_LINKER@")
 set(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@)
 set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS @CMAKE_CXX_COMPILER_WORKS@)
 set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
 set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
 if(CMAKE_COMPILER_IS_CYGWIN)

+ 0 - 3
Modules/CMakeForceCompiler.cmake

@@ -46,7 +46,6 @@ macro(CMAKE_FORCE_C_COMPILER compiler id)
   set(CMAKE_C_COMPILER "${compiler}")
   set(CMAKE_C_COMPILER_ID_RUN TRUE)
   set(CMAKE_C_COMPILER_ID ${id})
-  set(CMAKE_C_COMPILER_WORKS TRUE)
   set(CMAKE_C_COMPILER_FORCED TRUE)
 
   # Set old compiler id variables.
@@ -59,7 +58,6 @@ macro(CMAKE_FORCE_CXX_COMPILER compiler id)
   set(CMAKE_CXX_COMPILER "${compiler}")
   set(CMAKE_CXX_COMPILER_ID_RUN TRUE)
   set(CMAKE_CXX_COMPILER_ID ${id})
-  set(CMAKE_CXX_COMPILER_WORKS TRUE)
   set(CMAKE_CXX_COMPILER_FORCED TRUE)
 
   # Set old compiler id variables.
@@ -72,7 +70,6 @@ macro(CMAKE_FORCE_Fortran_COMPILER compiler id)
   set(CMAKE_Fortran_COMPILER "${compiler}")
   set(CMAKE_Fortran_COMPILER_ID_RUN TRUE)
   set(CMAKE_Fortran_COMPILER_ID ${id})
-  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
   set(CMAKE_Fortran_COMPILER_FORCED TRUE)
 
   # Set old compiler id variables.

+ 1 - 0
Modules/CMakeFortranCompiler.cmake.in

@@ -7,6 +7,7 @@ set(CMAKE_AR "@CMAKE_AR@")
 set(CMAKE_RANLIB "@CMAKE_RANLIB@")
 set(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@)
 set(CMAKE_Fortran_COMPILER_LOADED 1)
+set(CMAKE_Fortran_COMPILER_WORKS @CMAKE_Fortran_COMPILER_WORKS@)
 set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
 set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
 if(CMAKE_COMPILER_IS_CYGWIN)

+ 27 - 16
Modules/CMakeTestCCompiler.cmake

@@ -1,6 +1,6 @@
 
 #=============================================================================
-# Copyright 2003-2009 Kitware, Inc.
+# Copyright 2003-2012 Kitware, Inc.
 #
 # Distributed under the OSI-approved BSD License (the "License");
 # see accompanying file Copyright.txt for details.
@@ -12,8 +12,19 @@
 # (To distribute this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
+if(CMAKE_C_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_C_COMPILER_WORKS TRUE)
+  return()
+endif()
+
 include(CMakeTestCompilerCommon)
 
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCCompiler.cmake.
+unset(CMAKE_C_COMPILER_WORKS CACHE)
+
 # This file is used by EnableLanguage in cmGlobalGenerator to
 # determine that that selected C compiler can actually compile
 # and link the most basic of programs.   If not, a fatal error
@@ -36,6 +47,9 @@ if(NOT CMAKE_C_COMPILER_WORKS)
   try_compile(CMAKE_C_COMPILER_WORKS ${CMAKE_BINARY_DIR}
     ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
     OUTPUT_VARIABLE __CMAKE_C_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_C_COMPILER_WORKS ${CMAKE_C_COMPILER_WORKS})
+  unset(CMAKE_C_COMPILER_WORKS CACHE)
   set(C_TEST_WAS_RUN 1)
 endif()
 
@@ -60,22 +74,19 @@ else()
       "Determining if the C compiler works passed with "
       "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n")
   endif()
-  set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")
 
-  if(CMAKE_C_COMPILER_FORCED)
-    # The compiler configuration was forced by the user.
-    # Assume the user has configured all compiler information.
-  else()
-    # Try to identify the ABI and configure it into CMakeCCompiler.cmake
-    include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-    CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c)
-    configure_file(
-      ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
-      ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
-      @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
-      )
-    include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake)
-  endif()
+  # Try to identify the ABI and configure it into CMakeCCompiler.cmake
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+  CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c)
+
+  # Re-configure to save learned information.
+  configure_file(
+    ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
+    ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
+    @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
+    )
+  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake)
+
   if(CMAKE_C_SIZEOF_DATA_PTR)
     foreach(f ${CMAKE_C_ABI_FILES})
       include(${f})

+ 27 - 16
Modules/CMakeTestCXXCompiler.cmake

@@ -1,6 +1,6 @@
 
 #=============================================================================
-# Copyright 2003-2009 Kitware, Inc.
+# Copyright 2003-2012 Kitware, Inc.
 #
 # Distributed under the OSI-approved BSD License (the "License");
 # see accompanying file Copyright.txt for details.
@@ -12,8 +12,19 @@
 # (To distribute this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
+if(CMAKE_CXX_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_CXX_COMPILER_WORKS TRUE)
+  return()
+endif()
+
 include(CMakeTestCompilerCommon)
 
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCXXCompiler.cmake.
+unset(CMAKE_CXX_COMPILER_WORKS CACHE)
+
 # This file is used by EnableLanguage in cmGlobalGenerator to
 # determine that that selected C++ compiler can actually compile
 # and link the most basic of programs.   If not, a fatal error
@@ -29,6 +40,9 @@ if(NOT CMAKE_CXX_COMPILER_WORKS)
   try_compile(CMAKE_CXX_COMPILER_WORKS ${CMAKE_BINARY_DIR}
     ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx
     OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_CXX_COMPILER_WORKS ${CMAKE_CXX_COMPILER_WORKS})
+  unset(CMAKE_CXX_COMPILER_WORKS CACHE)
   set(CXX_TEST_WAS_RUN 1)
 endif()
 
@@ -53,22 +67,19 @@ else()
       "Determining if the CXX compiler works passed with "
       "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n")
   endif()
-  set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "")
 
-  if(CMAKE_CXX_COMPILER_FORCED)
-    # The compiler configuration was forced by the user.
-    # Assume the user has configured all compiler information.
-  else()
-    # Try to identify the ABI and configure it into CMakeCXXCompiler.cmake
-    include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-    CMAKE_DETERMINE_COMPILER_ABI(CXX ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp)
-    configure_file(
-      ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
-      ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
-      @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
-      )
-    include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake)
-  endif()
+  # Try to identify the ABI and configure it into CMakeCXXCompiler.cmake
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+  CMAKE_DETERMINE_COMPILER_ABI(CXX ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp)
+
+  # Re-configure to save learned information.
+  configure_file(
+    ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
+    ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
+    @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
+    )
+  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake)
+
   if(CMAKE_CXX_SIZEOF_DATA_PTR)
     foreach(f ${CMAKE_CXX_ABI_FILES})
       include(${f})

+ 47 - 37
Modules/CMakeTestFortranCompiler.cmake

@@ -1,6 +1,6 @@
 
 #=============================================================================
-# Copyright 2004-2009 Kitware, Inc.
+# Copyright 2004-2012 Kitware, Inc.
 #
 # Distributed under the OSI-approved BSD License (the "License");
 # see accompanying file Copyright.txt for details.
@@ -12,8 +12,19 @@
 # (To distribute this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
+if(CMAKE_Fortran_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
+  return()
+endif()
+
 include(CMakeTestCompilerCommon)
 
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeFortranCompiler.cmake.
+unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
+
 # This file is used by EnableLanguage in cmGlobalGenerator to
 # determine that that selected Fortran compiler can actually compile
 # and link the most basic of programs.   If not, a fatal error
@@ -29,6 +40,9 @@ if(NOT CMAKE_Fortran_COMPILER_WORKS)
   try_compile(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_BINARY_DIR}
     ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
     OUTPUT_VARIABLE OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_Fortran_COMPILER_WORKS})
+  unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
   set(FORTRAN_TEST_WAS_RUN 1)
 endif()
 
@@ -48,50 +62,46 @@ else()
       "Determining if the Fortran compiler works passed with "
       "the following output:\n${OUTPUT}\n\n")
   endif()
-  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()
-    # 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)
+  # 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)
 
-    # Test for Fortran 90 support by using an f90-specific construct.
-    if(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90)
-      message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90")
-      file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 "
+  # Test for Fortran 90 support by using an f90-specific construct.
+  if(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90)
+    message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90")
+    file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 "
       PROGRAM TESTFortran90
       stop = 1 ; do while ( stop .eq. 0 ) ; end do
       END PROGRAM TESTFortran90
 ")
-      try_compile(CMAKE_Fortran_COMPILER_SUPPORTS_F90 ${CMAKE_BINARY_DIR}
-        ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90
-        OUTPUT_VARIABLE OUTPUT)
-      if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
-        message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- yes")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Determining if the Fortran compiler supports Fortran 90 passed with "
-          "the following output:\n${OUTPUT}\n\n")
-        set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
-      else()
-        message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- no")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "Determining if the Fortran compiler supports Fortran 90 failed with "
-          "the following output:\n${OUTPUT}\n\n")
-        set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 0)
-      endif()
-      unset(CMAKE_Fortran_COMPILER_SUPPORTS_F90 CACHE)
+    try_compile(CMAKE_Fortran_COMPILER_SUPPORTS_F90 ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90
+      OUTPUT_VARIABLE OUTPUT)
+    if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
+      message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- yes")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the Fortran compiler supports Fortran 90 passed with "
+        "the following output:\n${OUTPUT}\n\n")
+      set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
+    else()
+      message(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- no")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the Fortran compiler supports Fortran 90 failed with "
+        "the following output:\n${OUTPUT}\n\n")
+      set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 0)
     endif()
-
-    configure_file(
-      ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
-      ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
-      @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
-      )
-    include(${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake)
+    unset(CMAKE_Fortran_COMPILER_SUPPORTS_F90 CACHE)
   endif()
+
+  # Re-configure to save learned information.
+  configure_file(
+    ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
+    ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
+    @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
+    )
+  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake)
+
   if(CMAKE_Fortran_SIZEOF_DATA_PTR)
     foreach(f ${CMAKE_Fortran_ABI_FILES})
       include(${f})