summaryrefslogtreecommitdiff
path: root/Modules/CMakeDetermineCompiler.cmake
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-01-03 17:36:34 +0100
committerBrad King <brad.king@kitware.com>2015-01-14 15:26:53 -0500
commit1f085e11e40a20f8e8702da7920e950e47deb27c (patch)
treec01057c7aa540fa3eed3fdaf905687e89db33505 /Modules/CMakeDetermineCompiler.cmake
parent85d3173590e4bae63e8422ac8083a77806491b92 (diff)
downloadcmake-1f085e11e40a20f8e8702da7920e950e47deb27c.tar.gz
OS X: Resolve compiler in /usr/bin to that reported by Xcode xcrun
The compiler in the PATH on mac is a stub for a different delegate depending on the environment. Rather than requiring xcode-select to change the used Xcode globally, users should be able to choose the compiler per-session. That is possible with the DEVELOPER_DIR environment variable. However, the environment can change between running CMake and invoking the build. In such cases, CMake prefers to record the relevant paths from the environment and use them when invoking the build. That is not currently done for the compilers on APPLE, so the compiler used is not the one reported when running cmake: $ DEVELOPER_DIR=/Applications/Xcode2.app/Contents/Developer/ cc --version Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn) Target: x86_64-apple-darwin13.4.0 Thread model: posix $ DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/ cc --version Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn) Target: x86_64-apple-darwin13.4.0 Thread model: posix Update that now by querying Xcode for the correct compiler path if the compiler located by ordinary means is located in /usr/bin.
Diffstat (limited to 'Modules/CMakeDetermineCompiler.cmake')
-rw-r--r--Modules/CMakeDetermineCompiler.cmake24
1 files changed, 16 insertions, 8 deletions
diff --git a/Modules/CMakeDetermineCompiler.cmake b/Modules/CMakeDetermineCompiler.cmake
index 7a5cbcd7e2..85c866276a 100644
--- a/Modules/CMakeDetermineCompiler.cmake
+++ b/Modules/CMakeDetermineCompiler.cmake
@@ -71,7 +71,7 @@ macro(_cmake_find_compiler lang)
unset(_languages)
# Look for a make tool provided by Xcode
- if(CMAKE_${lang}_COMPILER STREQUAL "CMAKE_${lang}_COMPILER-NOTFOUND" AND CMAKE_HOST_APPLE)
+ if(CMAKE_HOST_APPLE)
macro(_query_xcrun compiler_name result_var_keyword result_var)
if(NOT "x${result_var_keyword}" STREQUAL "xRESULT_VAR")
message(FATAL_ERROR "Bad arguments to macro")
@@ -81,13 +81,21 @@ macro(_cmake_find_compiler lang)
ERROR_VARIABLE _xcrun_err)
set("${result_var}" "${_xcrun_out}")
endmacro()
- foreach(comp ${CMAKE_${lang}_COMPILER_LIST})
- _query_xcrun("${comp}" RESULT_VAR _xcrun_result)
- if(_xcrun_result)
- set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${_xcrun_result}")
- break()
- endif()
- endforeach()
+
+ set(xcrun_result)
+ if (CMAKE_${lang}_COMPILER MATCHES "^/usr/bin/(.+)$")
+ _query_xcrun("${CMAKE_MATCH_1}" RESULT_VAR xcrun_result)
+ elseif (CMAKE_${lang}_COMPILER STREQUAL "CMAKE_${lang}_COMPILER-NOTFOUND")
+ foreach(comp ${CMAKE_${lang}_COMPILER_LIST})
+ _query_xcrun("${comp}" RESULT_VAR xcrun_result)
+ if(xcrun_result)
+ break()
+ endif()
+ endforeach()
+ endif()
+ if (xcrun_result)
+ set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${xcrun_result}")
+ endif()
endif()
endmacro()