diff options
author | İsmail Dönmez <ismail@i10z.com> | 2017-11-24 12:22:46 (GMT) |
---|---|---|
committer | İsmail Dönmez <ismail@i10z.com> | 2017-11-28 16:08:33 (GMT) |
commit | f969f1a9ce1d0045b9d056fd08c4683c34c420fa (patch) | |
tree | a1468a9f20bf7d3ee3f662778e7f87682d78fe0e | |
parent | 7746fdb2fe0177341aadeafec2ae73aa08ddfaf6 (diff) | |
download | CMake-f969f1a9ce1d0045b9d056fd08c4683c34c420fa.zip CMake-f969f1a9ce1d0045b9d056fd08c4683c34c420fa.tar.gz CMake-f969f1a9ce1d0045b9d056fd08c4683c34c420fa.tar.bz2 |
Clang: Do not mistake clang-cl 6.0 for GNU-like clang
The check added by commit v3.10.0-rc2~2^2 (Clang: Diagnose unsupported
GNU-like clang targeting MSVC ABI, 2017-10-10) is incorrectly detecting
clang-cl 6.0 as GNU-like. Currently cmake is testing if the clang
compiler accepts `--version` to see if it accepts GNU style flags.
However, with the latest llvm snapshot this also works for clang-cl:
> clang-cl --version
clang version 6.0.0 (trunk)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
So instead we should use the `/?` flag which fails with clang but
works with clang-cl:
> clang-cl /? &> /dev/null; echo $?
0
> clang /? &> /dev/null; echo $?
1
Fixes: #17518
-rw-r--r-- | Modules/CMakeDetermineCompilerId.cmake | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 347106e..15c304c 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -742,12 +742,12 @@ function(CMAKE_DIAGNOSE_UNSUPPORTED_CLANG lang envvar) return() endif() - # Test whether a GNU-like command-line option works. - execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --version + # Test whether an MSVC-like command-line option works. + execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" /? RESULT_VARIABLE _clang_result OUTPUT_VARIABLE _clang_stdout ERROR_VARIABLE _clang_stderr) - if(NOT _clang_result EQUAL 0) + if(_clang_result EQUAL 0) return() endif() |