Browse Source

Fix check for -isysroot on OS X

Previously we checked for this flag by parsing the version number of GCC
out of 'gcc --version', but this is not reliable because the format can
vary greatly.  Now we run 'gcc -v --help' and look for '-isysroot' in
the list of options.

We also now store the result on a per-language basis in the per-compiler
info file "CMake<LANG>Compiler.cmake".  This is necessary to make it
accessible from try-compile projects so that they generate correctly.
Brad King 16 years ago
parent
commit
180c60a86f

+ 2 - 0
Modules/CMakeCCompiler.cmake.in

@@ -35,5 +35,7 @@ IF(CMAKE_C_COMPILER_ABI)
   SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
 ENDIF(CMAKE_C_COMPILER_ABI)
 
+SET(CMAKE_C_HAS_ISYSROOT "@CMAKE_C_HAS_ISYSROOT@")
+
 SET(CMAKE_C_IMPLICIT_LINK_LIBRARIES "@CMAKE_C_IMPLICIT_LINK_LIBRARIES@")
 SET(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_DIRECTORIES@")

+ 2 - 0
Modules/CMakeCXXCompiler.cmake.in

@@ -36,5 +36,7 @@ IF(CMAKE_CXX_COMPILER_ABI)
   SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
 ENDIF(CMAKE_CXX_COMPILER_ABI)
 
+SET(CMAKE_CXX_HAS_ISYSROOT "@CMAKE_CXX_HAS_ISYSROOT@")
+
 SET(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_CXX_IMPLICIT_LINK_LIBRARIES@")
 SET(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")

+ 2 - 0
Modules/Platform/Darwin-GNU-C.cmake

@@ -0,0 +1,2 @@
+include(Platform/Darwin-GNU)
+cmake_gnu_has_isysroot(C)

+ 2 - 0
Modules/Platform/Darwin-GNU-CXX.cmake

@@ -0,0 +1,2 @@
+include(Platform/Darwin-GNU)
+cmake_gnu_has_isysroot(CXX)

+ 18 - 0
Modules/Platform/Darwin-GNU.cmake

@@ -0,0 +1,18 @@
+macro(cmake_gnu_has_isysroot lang)
+  if("x${CMAKE_${lang}_HAS_ISYSROOT}" STREQUAL "x")
+    set(_doc "${lang} compiler has -isysroot")
+    message(STATUS "Checking whether ${_doc}")
+    execute_process(
+      COMMAND ${CMAKE_${lang}_COMPILER} "-v" "--help"
+      OUTPUT_VARIABLE _gcc_help
+      ERROR_VARIABLE _gcc_help
+      )
+    if("${_gcc_help}" MATCHES "isysroot")
+      message(STATUS "Checking whether ${_doc} - yes")
+      set(CMAKE_${lang}_HAS_ISYSROOT 1)
+    else()
+      message(STATUS "Checking whether ${_doc} - no")
+      set(CMAKE_${lang}_HAS_ISYSROOT 0)
+    endif()
+  endif()
+endmacro()

+ 0 - 14
Modules/Platform/Darwin.cmake

@@ -182,20 +182,6 @@ IF(XCODE)
   SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
 ENDIF(XCODE)
 
-IF(NOT CMAKE_OSX_GCC_SUPPORT_ISYSROOT)
-  IF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU")
-    EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} "--version"
-      OUTPUT_VARIABLE GCC_VERSION)
-  ENDIF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU")
-  STRING(REGEX REPLACE "^[^ ]+[ ][^ ]+[ ]([^ ]+).*$" "\\1"
-         gcc_version_tmp "${GCC_VERSION}")
-  IF(${gcc_version_tmp} VERSION_GREATER 3.9)
-    SET(CMAKE_OSX_GCC_SUPPORT_ISYSROOT TRUE CACHE INTERNAL "GCC supports isysroot")
-  ELSE(${gcc_version_tmp} VERSION_GREATER 3.9)
-    SET(CMAKE_OSX_GCC_SUPPORT_ISYSROOT FALSE CACHE INTERNAL "GCC supports isysroot")
-  ENDIF(${gcc_version_tmp} VERSION_GREATER 3.9)
-ENDIF(NOT CMAKE_OSX_GCC_SUPPORT_ISYSROOT)
-
 # Need to list dependent shared libraries on link line.  When building
 # with -isysroot (for universal binaries), the linker always looks for
 # dependent libraries under the sysroot.  Listing them on the link

+ 2 - 7
Source/cmLocalGenerator.cxx

@@ -1760,13 +1760,8 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
       this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
     const char* deploymentTarget = 
       this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
-    const char* gccHasIsysroot = 
-      this->Makefile->GetRequiredDefinition("CMAKE_OSX_GCC_SUPPORT_ISYSROOT");
-    bool hasIsysroot = true;
-    if(cmSystemTools::IsOff(gccHasIsysroot))
-      {
-      hasIsysroot = false;
-      }
+    std::string isysrootVar = std::string("CMAKE_") + lang + "_HAS_ISYSROOT";
+    bool hasIsysroot = this->Makefile->IsOn(isysrootVar.c_str());
     bool flagsUsed = false;
     if(osxArch && sysroot && lang && (lang[0] =='C' || lang[0] == 'F'))
       {