summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/linkers/detect.py45
-rw-r--r--unittests/allplatformstests.py2
2 files changed, 26 insertions, 21 deletions
diff --git a/mesonbuild/linkers/detect.py b/mesonbuild/linkers/detect.py
index e928f3e0d..493430a87 100644
--- a/mesonbuild/linkers/detect.py
+++ b/mesonbuild/linkers/detect.py
@@ -186,27 +186,6 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
v = search_version(o)
linker = linkers.LLVMDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
- # detect xtools first, bug #10805
- elif 'xtools-' in o.split('\n', maxsplit=1)[0]:
- xtools = o.split(' ', maxsplit=1)[0]
- v = xtools.split('-', maxsplit=2)[1]
- linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
- # First might be apple clang, second is for real gcc, the third is icc.
- # Note that "ld: unknown option: " sometimes instead is "ld: unknown options:".
- elif e.endswith('(use -v to see invocation)\n') or 'macosx_version' in e or 'ld: unknown option' in e:
- if isinstance(comp_class.LINKER_PREFIX, str):
- cmd = compiler + [comp_class.LINKER_PREFIX + '-v'] + extra_args
- else:
- cmd = compiler + comp_class.LINKER_PREFIX + ['-v'] + extra_args
- _, newo, newerr = Popen_safe_logged(cmd, msg='Detecting Apple linker via')
-
- for line in newerr.split('\n'):
- if 'PROJECT:ld' in line or 'PROJECT:dyld' in line:
- v = line.split('-')[1]
- break
- else:
- __failed_to_detect_linker(compiler, check_args, o, e)
- linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
elif 'GNU' in o or 'GNU' in e:
gnu_cls: T.Type[GnuDynamicLinker]
# this is always the only thing on stdout, except for swift
@@ -239,6 +218,30 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
elif o.startswith('zig ld'):
linker = linkers.ZigCCDynamicLinker(
compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
+ # detect xtools first, bug #10805
+ elif 'xtools-' in o.split('\n', maxsplit=1)[0]:
+ xtools = o.split(' ', maxsplit=1)[0]
+ v = xtools.split('-', maxsplit=2)[1]
+ linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
+ # detect linker on MacOS - must be after other platforms because the
+ # "(use -v to see invocation)" will match clang on other platforms,
+ # but the rest of the checks will fail and call __failed_to_detect_linker.
+ # First might be apple clang, second is for real gcc, the third is icc.
+ # Note that "ld: unknown option: " sometimes instead is "ld: unknown options:".
+ elif e.endswith('(use -v to see invocation)\n') or 'macosx_version' in e or 'ld: unknown option' in e:
+ if isinstance(comp_class.LINKER_PREFIX, str):
+ cmd = compiler + [comp_class.LINKER_PREFIX + '-v'] + extra_args
+ else:
+ cmd = compiler + comp_class.LINKER_PREFIX + ['-v'] + extra_args
+ _, newo, newerr = Popen_safe_logged(cmd, msg='Detecting Apple linker via')
+
+ for line in newerr.split('\n'):
+ if 'PROJECT:ld' in line or 'PROJECT:dyld' in line:
+ v = line.split('-')[1]
+ break
+ else:
+ __failed_to_detect_linker(compiler, check_args, o, e)
+ linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
else:
__failed_to_detect_linker(compiler, check_args, o, e)
return linker
diff --git a/unittests/allplatformstests.py b/unittests/allplatformstests.py
index 3be97cb3b..ca4b194e6 100644
--- a/unittests/allplatformstests.py
+++ b/unittests/allplatformstests.py
@@ -1129,6 +1129,8 @@ class AllPlatformTests(BasePlatformTests):
# ld-like linker of link.exe-like linker (usually the
# former for msys2, the latter otherwise)
self.assertIsInstance(cc.linker, (linkers.MSVCDynamicLinker, linkers.GnuLikeDynamicLinkerMixin))
+ elif is_sunos():
+ self.assertIsInstance(cc.linker, (linkers.SolarisDynamicLinker, linkers.GnuLikeDynamicLinkerMixin))
else:
self.assertIsInstance(cc.linker, linkers.GnuLikeDynamicLinkerMixin)
if isinstance(cc, intel):