aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2020-08-17 22:07:07 -0700
committerNirbheek Chauhan <nirbheek@centricular.com>2020-09-09 18:10:18 +0530
commit3e95a73978ee54068d51fd2f68bd3798738dd16b (patch)
treef89f02fe851df4a70064103f4f2fb54a5e42ce0d
parentf3c86c6863d16411ebde5d7a3ce323b83b0ac084 (diff)
downloadmeson-3e95a73978ee54068d51fd2f68bd3798738dd16b.zip
meson-3e95a73978ee54068d51fd2f68bd3798738dd16b.tar.gz
meson-3e95a73978ee54068d51fd2f68bd3798738dd16b.tar.bz2
cmake: Fix detection of AppleClang
It's not enough to detect that the linker is ld64: gcc, icc, and vanilla clang all use ld64 on macoOS. Instead we have to detect the class of the compiler, and determine if it's an Apple Compiler or a vanilla one.
-rw-r--r--mesonbuild/cmake/executor.py25
1 files changed, 19 insertions, 6 deletions
diff --git a/mesonbuild/cmake/executor.py b/mesonbuild/cmake/executor.py
index e29e67a..2226c02 100644
--- a/mesonbuild/cmake/executor.py
+++ b/mesonbuild/cmake/executor.py
@@ -29,13 +29,18 @@ from .. import mlog, mesonlib
from ..mesonlib import PerMachine, Popen_safe, version_compare, MachineChoice
from ..environment import Environment
from ..envconfig import get_env_var
+from ..compilers import (
+ AppleClangCCompiler, AppleClangCPPCompiler, AppleClangObjCCompiler,
+ AppleClangObjCPPCompiler
+)
if T.TYPE_CHECKING:
from ..dependencies.base import ExternalProgram
+ from ..compilers import Compiler
TYPE_result = T.Tuple[int, T.Optional[str], T.Optional[str]]
-MESON_TO_CMAKE_MAPPING = {
+_MESON_TO_CMAKE_MAPPING = {
'arm': 'ARMCC',
'armclang': 'ARMClang',
'clang': 'Clang',
@@ -51,13 +56,21 @@ MESON_TO_CMAKE_MAPPING = {
'sun': 'SunPro',
}
-def meson_compiler_to_cmake_id(cobj):
- # cland and apple clang both map to 'clang' in meson, so we need to look at
- # the linker that's being used
- if cobj.linker.get_id() == 'ld64':
+def meson_compiler_to_cmake_id(cobj: 'Compiler') -> str:
+ """Translate meson compiler's into CMAKE compiler ID's.
+
+ Most of these can be handled by a simple table lookup, with a few
+ exceptions.
+
+ Clang and Apple's Clang are both identified as "clang" by meson. To make
+ things more complicated gcc and vanilla clang both use Apple's ld64 on
+ macOS. The only way to know for sure is to do an isinstance() check.
+ """
+ if isinstance(cobj, (AppleClangCCompiler, AppleClangCPPCompiler,
+ AppleClangObjCCompiler, AppleClangObjCPPCompiler)):
return 'AppleClang'
# If no mapping, try GNU and hope that the build files don't care
- return MESON_TO_CMAKE_MAPPING.get(cobj.get_id(), 'GNU')
+ return _MESON_TO_CMAKE_MAPPING.get(cobj.get_id(), 'GNU')
class CMakeExecutor: