@@ -177,27 +177,6 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
177177            v  =  search_version (o )
178178
179179        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 )
201180    elif  'GNU'  in  o  or  'GNU'  in  e :
202181        gnu_cls : T .Type [GnuDynamicLinker ]
203182        # 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
227206        linker  =  linkers .AIXDynamicLinker (
228207            compiler , for_machine , comp_class .LINKER_PREFIX , override ,
229208            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 )
230236    else :
231237        __failed_to_detect_linker (compiler , check_args , o , e )
232238    return  linker 
0 commit comments