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}")
|
SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
|
||||||
ENDIF(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_LIBRARIES "@CMAKE_C_IMPLICIT_LINK_LIBRARIES@")
|
||||||
SET(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_DIRECTORIES@")
|
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}")
|
SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
|
||||||
ENDIF(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_LIBRARIES "@CMAKE_CXX_IMPLICIT_LINK_LIBRARIES@")
|
||||||
SET(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")
|
SET(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")
|
||||||
|
2
Modules/Platform/Darwin-GNU-C.cmake
Normal file
2
Modules/Platform/Darwin-GNU-C.cmake
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
include(Platform/Darwin-GNU)
|
||||||
|
cmake_gnu_has_isysroot(C)
|
2
Modules/Platform/Darwin-GNU-CXX.cmake
Normal file
2
Modules/Platform/Darwin-GNU-CXX.cmake
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
include(Platform/Darwin-GNU)
|
||||||
|
cmake_gnu_has_isysroot(CXX)
|
18
Modules/Platform/Darwin-GNU.cmake
Normal file
18
Modules/Platform/Darwin-GNU.cmake
Normal file
@ -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)
|
SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
|
||||||
ENDIF(XCODE)
|
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
|
# Need to list dependent shared libraries on link line. When building
|
||||||
# with -isysroot (for universal binaries), the linker always looks for
|
# with -isysroot (for universal binaries), the linker always looks for
|
||||||
# dependent libraries under the sysroot. Listing them on the link
|
# 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");
|
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
|
||||||
const char* deploymentTarget =
|
const char* deploymentTarget =
|
||||||
this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
|
this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
|
||||||
const char* gccHasIsysroot =
|
std::string isysrootVar = std::string("CMAKE_") + lang + "_HAS_ISYSROOT";
|
||||||
this->Makefile->GetRequiredDefinition("CMAKE_OSX_GCC_SUPPORT_ISYSROOT");
|
bool hasIsysroot = this->Makefile->IsOn(isysrootVar.c_str());
|
||||||
bool hasIsysroot = true;
|
|
||||||
if(cmSystemTools::IsOff(gccHasIsysroot))
|
|
||||||
{
|
|
||||||
hasIsysroot = false;
|
|
||||||
}
|
|
||||||
bool flagsUsed = false;
|
bool flagsUsed = false;
|
||||||
if(osxArch && sysroot && lang && (lang[0] =='C' || lang[0] == 'F'))
|
if(osxArch && sysroot && lang && (lang[0] =='C' || lang[0] == 'F'))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user