@@ -177,27 +177,6 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
177
177
v = search_version (o )
178
178
179
179
linker = linkers .LLVMDynamicLinker (compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
180
- # detect xtools first, bug #10805
181
- elif 'xtools-' in o .split ('\n ' , maxsplit = 1 )[0 ]:
182
- xtools = o .split (' ' , maxsplit = 1 )[0 ]
183
- v = xtools .split ('-' , maxsplit = 2 )[1 ]
184
- linker = linkers .AppleDynamicLinker (compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
185
- # First might be apple clang, second is for real gcc, the third is icc.
186
- # Note that "ld: unknown option: " sometimes instead is "ld: unknown options:".
187
- elif e .endswith ('(use -v to see invocation)\n ' ) or 'macosx_version' in e or 'ld: unknown option' in e :
188
- if isinstance (comp_class .LINKER_PREFIX , str ):
189
- cmd = compiler + [comp_class .LINKER_PREFIX + '-v' ] + extra_args
190
- else :
191
- cmd = compiler + comp_class .LINKER_PREFIX + ['-v' ] + extra_args
192
- _ , newo , newerr = Popen_safe_logged (cmd , msg = 'Detecting Apple linker via' )
193
-
194
- for line in newerr .split ('\n ' ):
195
- if 'PROJECT:ld' in line or 'PROJECT:dyld' in line :
196
- v = line .split ('-' )[1 ]
197
- break
198
- else :
199
- __failed_to_detect_linker (compiler , check_args , o , e )
200
- linker = linkers .AppleDynamicLinker (compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
201
180
elif 'GNU' in o or 'GNU' in e :
202
181
gnu_cls : T .Type [GnuDynamicLinker ]
203
182
# this is always the only thing on stdout, except for swift
@@ -227,6 +206,33 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
227
206
linker = linkers .AIXDynamicLinker (
228
207
compiler , for_machine , comp_class .LINKER_PREFIX , override ,
229
208
version = search_version (e ))
209
+ elif o .startswith ('zig ld' ):
210
+ linker = linkers .ZigCCDynamicLinker (
211
+ compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
212
+ # detect xtools first, bug #10805
213
+ elif 'xtools-' in o .split ('\n ' , maxsplit = 1 )[0 ]:
214
+ xtools = o .split (' ' , maxsplit = 1 )[0 ]
215
+ v = xtools .split ('-' , maxsplit = 2 )[1 ]
216
+ linker = linkers .AppleDynamicLinker (compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
217
+ # detect linker on MacOS - must be after other platforms because the
218
+ # "(use -v to see invocation)" will match clang on other platforms,
219
+ # but the rest of the checks will fail and call __failed_to_detect_linker.
220
+ # First might be apple clang, second is for real gcc, the third is icc.
221
+ # Note that "ld: unknown option: " sometimes instead is "ld: unknown options:".
222
+ elif e .endswith ('(use -v to see invocation)\n ' ) or 'macosx_version' in e or 'ld: unknown option' in e :
223
+ if isinstance (comp_class .LINKER_PREFIX , str ):
224
+ cmd = compiler + [comp_class .LINKER_PREFIX + '-v' ] + extra_args
225
+ else :
226
+ cmd = compiler + comp_class .LINKER_PREFIX + ['-v' ] + extra_args
227
+ _ , newo , newerr = Popen_safe_logged (cmd , msg = 'Detecting Apple linker via' )
228
+
229
+ for line in newerr .split ('\n ' ):
230
+ if 'PROJECT:ld' in line or 'PROJECT:dyld' in line :
231
+ v = line .split ('-' )[1 ]
232
+ break
233
+ else :
234
+ __failed_to_detect_linker (compiler , check_args , o , e )
235
+ linker = linkers .AppleDynamicLinker (compiler , for_machine , comp_class .LINKER_PREFIX , override , version = v )
230
236
else :
231
237
__failed_to_detect_linker (compiler , check_args , o , e )
232
238
return linker
0 commit comments