Skip to content

Commit

Permalink
linkers: make sure the linker is actually Apple when matching failure
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
eli-schwartz authored and nirbheek committed Aug 8, 2022
1 parent df5596e commit c1ee446
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions mesonbuild/linkers/detect.py
Expand Up @@ -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]
Expand Down

0 comments on commit c1ee446

Please sign in to comment.