diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2022-07-27 01:56:52 -0400 |
---|---|---|
committer | Eli Schwartz <eschwartz@archlinux.org> | 2022-07-31 18:58:21 -0400 |
commit | 73985f98dc170713ed86324937fda6cd22f8c701 (patch) | |
tree | 0776c65735ae8f19de8c6a2ba21bc0edb3f91589 | |
parent | 06dfcd7de579832e223e83d16d6a7c8dde24f6d1 (diff) | |
download | meson-73985f98dc170713ed86324937fda6cd22f8c701.zip meson-73985f98dc170713ed86324937fda6cd22f8c701.tar.gz meson-73985f98dc170713ed86324937fda6cd22f8c701.tar.bz2 |
linkers: make sure the linker is actually Apple when matching failure
Not all "use -v" errors are Apple ld, and if it doesn't have better
output with -v instead of --version, we should not assume that is what
it is.
-rw-r--r-- | mesonbuild/linkers/detect.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/mesonbuild/linkers/detect.py b/mesonbuild/linkers/detect.py index 72bd0a1..17c5478 100644 --- a/mesonbuild/linkers/detect.py +++ b/mesonbuild/linkers/detect.py @@ -186,18 +186,24 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty v = search_version(o) linker = LLVMDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v) - # first is for apple clang, second is for real gcc, the third is icc + # first might be apple clang, second is for real gcc, the third is icc 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): - _, _, e = Popen_safe(compiler + [comp_class.LINKER_PREFIX + '-v'] + extra_args) + cmd = compiler + [comp_class.LINKER_PREFIX + '-v'] + extra_args else: - _, _, e = Popen_safe(compiler + comp_class.LINKER_PREFIX + ['-v'] + extra_args) - for line in e.split('\n'): + cmd = compiler + comp_class.LINKER_PREFIX + ['-v'] + extra_args + mlog.debug('-----') + mlog.debug(f'Detecting Apple linker via: {join_args(cmd)}') + _, newo, newerr = Popen_safe(cmd) + mlog.debug(f'linker stdout:\n{newo}') + mlog.debug(f'linker stderr:\n{newerr}') + + for line in newerr.split('\n'): if 'PROJECT:ld' in line: v = line.split('-')[1] break else: - v = 'unknown version' + __failed_to_detect_linker(compiler, check_args, o, e) linker = AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v) elif 'GNU' in o or 'GNU' in e: cls: T.Type[GnuDynamicLinker] |