compilers: Add Apple subclasses for ObjC and ObjC++

These are needed because in some cases we need to be able to know if
we're using vanilla clang or Apple's clang.
pull/7609/head
Dylan Baker 4 years ago
parent 7092efabb5
commit b6c28d282c
  1. 4
      mesonbuild/compilers/__init__.py
  2. 5
      mesonbuild/compilers/objc.py
  3. 6
      mesonbuild/compilers/objcpp.py
  4. 9
      mesonbuild/environment.py

@ -36,6 +36,8 @@ __all__ = [
'AppleClangCCompiler',
'AppleClangCPPCompiler',
'AppleClangObjCCompiler',
'AppleClangObjCPPCompiler',
'ArmCCompiler',
'ArmCPPCompiler',
'ArmclangCCompiler',
@ -183,11 +185,13 @@ from .fortran import (
from .java import JavaCompiler
from .objc import (
ObjCCompiler,
AppleClangObjCCompiler,
ClangObjCCompiler,
GnuObjCCompiler,
)
from .objcpp import (
ObjCPPCompiler,
AppleClangObjCPPCompiler,
ClangObjCPPCompiler,
GnuObjCPPCompiler,
)

@ -92,3 +92,8 @@ class ClangObjCCompiler(ClangCompiler, ObjCCompiler):
'1': default_warn_args,
'2': default_warn_args + ['-Wextra'],
'3': default_warn_args + ['-Wextra', '-Wpedantic']}
class AppleClangObjCCompiler(ClangObjCCompiler):
"""Handle the differences between Apple's clang and vanilla clang."""

@ -90,3 +90,9 @@ class ClangObjCPPCompiler(ClangCompiler, ObjCPPCompiler):
'1': default_warn_args,
'2': default_warn_args + ['-Wextra'],
'3': default_warn_args + ['-Wextra', '-Wpedantic']}
class AppleClangObjCPPCompiler(ClangObjCPPCompiler):
"""Handle the differences between Apple's clang and vanilla clang."""

@ -74,6 +74,8 @@ from .compilers import (
ArmclangCPPCompiler,
AppleClangCCompiler,
AppleClangCPPCompiler,
AppleClangObjCCompiler,
AppleClangObjCPPCompiler,
ClangCCompiler,
ClangCPPCompiler,
ClangObjCCompiler,
@ -1506,7 +1508,7 @@ class Environment:
def detect_objcpp_compiler(self, for_machine: MachineInfo) -> 'Compiler':
return self._detect_objc_or_objcpp_compiler(for_machine, False)
def _detect_objc_or_objcpp_compiler(self, for_machine: MachineInfo, objc: bool) -> 'Compiler':
def _detect_objc_or_objcpp_compiler(self, for_machine: MachineChoice, objc: bool) -> 'Compiler':
popen_exceptions = {}
compilers, ccache, exe_wrap = self._get_compilers('objc' if objc else 'objcpp', for_machine)
is_cross = self.is_cross_build(for_machine)
@ -1535,7 +1537,10 @@ class Environment:
exe_wrap, defines, linker=linker)
if 'clang' in out:
linker = None
comp = ClangObjCCompiler if objc else ClangObjCPPCompiler
if 'Apple' in out:
comp = AppleClangObjCCompiler if objc else AppleClangObjCPPCompiler
else:
comp = ClangObjCCompiler if objc else ClangObjCPPCompiler
if 'windows' in out or self.machines[for_machine].is_windows():
# If we're in a MINGW context this actually will use a gnu style ld
try:

Loading…
Cancel
Save