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.
This commit is contained in:
parent
196d9a54aa
commit
180c60a86f
|
@ -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@")
|
||||
|
|
|
@ -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@")
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
include(Platform/Darwin-GNU)
|
||||
cmake_gnu_has_isysroot(C)
|
|
@ -0,0 +1,2 @@
|
|||
include(Platform/Darwin-GNU)
|
||||
cmake_gnu_has_isysroot(CXX)
|
|
@ -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()
|
|
@ -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
|
||||
|
|
|
@ -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'))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue