
    e+                    B   U d dl mZ ddlmZ ddlmZmZmZmZm	Z	 d dl
Z
d dlZd dlZej                  rddlmZmZ ddlmZ dd	lmZ dd
lmZ i Zded<   ddged<   dged<   dged<   dged<   dged<   dged<   d dZdddd	 	 	 	 	 	 	 	 	 	 	 d!dZdd	 	 	 	 	 	 	 d"dZy)#    )annotations   )mlog)EnvironmentException
Popen_safePopen_safe_logged	join_argssearch_versionN   )DynamicLinkerGnuDynamicLinker)Environment)Compiler)MachineChoicezT.Dict[str, T.List[str]]defaultsargarstatic_linkerlibvs_static_linkerzllvm-libclang_cl_static_linkernvlinkcuda_static_linkerzgcc-argcc_static_linkerzllvm-arclang_static_linkerc                V    dj                  t        | |z         ||      }t        |      )Nz?Unable to detect linker for compiler `{}`
stdout: {}
stderr: {})formatr	   r   )compilerargsstdoutstderrmsgs        ;/usr/lib/python3/dist-packages/mesonbuild/linkers/detect.py__failed_to_detect_linkerr$   )   s-    
M
T
T(T/"FF4C
s
##    T)use_linker_prefixinvoked_directly
extra_argsc          
        ddl m} | j                  j                  |j                  |||        |r|j
                  ddg}	ntt        |j
                  t              r|j
                  dz   |j
                  dz   g}	n;t        |j
                  t              r!|j
                  dgz   |j
                  z   dgz   }		| j                  j                  ||j                        z  }	g }
| j                  ||j                  dz         }||j                  |d   |      }
|	|
z  }	||	j                  |       t        ||	z         \  }}}d|j                  dd	      d   v rZd
|v r)|j                  |||j
                  |
t!        |            S |s+|j#                  ||
||j
                  t!        |      dd       S ||r|}t        ||	z         \  }}}d|j                  dd	      d   v r.|j#                  |g |r|j
                  ng |t!        |      |      S d|v r|j%                  ||t!        |            S |j'                  d      s|j'                  d      rj|xs |}t)        j*                  d|      }|rt        |j-                  d            }nd}|j/                  |g |||r|j
                  ng t!        |      |      S d|v r'dd l}|j3                  |d         }t5        d| d      t7        ||	||       y )Nr   linkersz/logo	--version_ldr   LLD
maxsplitz(compatible with GNU linkers)versionF)exelistprefixr3   directmachine)r5   r4   r3   r6   OPTLINK	Microsoftz.*(X86|X64|ARM|ARM64).*x86)r7   r4   r5   r3   r6   zGNU coreutilsz/Found GNU link.exe instead of MSVC link.exe in zi.
This link.exe is not a linker.
You may need to reorder entries to your %PATH% variable to resolve this.) r+   coredataadd_lang_argslanguageLINKER_PREFIX
isinstancestrlistget_external_link_argslookup_binary_entryuse_linker_argsextendr   splitLLVMDynamicLinkerr
   ClangClDynamicLinkerOptlinkDynamicLinker
startswithresearchgroupMSVCDynamicLinkershutilwhichr   r$   )envr   
comp_classcomp_versionfor_machiner&   r'   r(   r+   
check_argsoverridevaluepo_eoutmatchtargetrP   fullpaths                        r#   guess_win_linkerra   /   s<    LLz22JSQ 
 8 8 @{+
	J,,c	2 ..8*:R:RU`:`a
	J,,d	3--	9J<T<TTXcWdd
#,,55k:CVCVWWJH##K1D1Du1LME--eAhEh
*%J./GAq!q)!,,*a/,,+z'?'?."3 - 5 5 "//Xx
@X@X&q)% 0 G G - J./GAq!q)!,,++/@:++bnQ&7@P , R 	R 
a++Hk>Z[K\+]]	
k	"all;&?f1		4c:Q(FF((VX/@:++b"3'0@ ) B 	B 
A	<<,"=hZ HW WX 	X h
Aq9r%   )r(   c          	     P   ddl m} | j                  j                  |j                  |||        |xs g }| j                  j                  ||j                        }||j                  || j                  |         z  }t        |j                  t              r|j                  dz   g|z   }n|j                  dgz   |z   }g }	| j                  ||j                  dz         }
|
|j                  |
d   |      }	||	z  }t        j                  d       t        ||z   d      \  }}}t!        ||z         }d	|j#                  d
d      d   v rt        |j                  t              r||	z   |j                  dz   gz   |z   }n||	z   |j                  z   dgz   |z   }t        |d      \  }}}d|v r|j$                  }n|j&                  } ||||j                  |	|      }|S d|v r&d|v r"|j)                  |||j                  |	|      }|S |j+                  d      rt-        ||z   dgz         \  }}}	 t/        j0                  d|t.        j2                        j5                  d      }t7        j"                  |      d   }t-        |dg      \  }}}t!        |      }|j'                  |||j                  |	|      }|S d|j#                  d
d      d   v rN|j#                  dd      d   }|j#                  dd      d   }|j?                  |||j                  |	|      }|S |jA                  d      sd|v sd|v rt        |j                  t              r||j                  dz   gz   |z   }n||j                  z   dgz   |z   }t        |d      \  }}}|j#                  d
      D ]   }d|v sd|v s|j#                  d      d   } n tC        ||||       |j?                  |||j                  |	|      }|S d|v sd|v r|j+                  d      s|j+                  d      r|jD                  }n;|j+                  d       s|j+                  d       r|jF                  }n|jH                  } ||||j                  |	|      }|S d!|v sd!|v re||z   j#                  d
      D ]*  }d"|v s|j#                  d#      d   jK                         } n d$}|jM                  |||j                  |	|      }|S d%|v rt        |j                  t              r$t-        ||j                  d&z   gz   |z         \  }}}n#t-        ||j                  z   d&gz   |z         \  }}}|jO                  |||j                  |	t!        |            }|S tC        ||||       S # t8        t:        t<        f$ r Y w xY w)'aP  Helper for guessing what linker to use on Unix-Like OSes.

    :compiler: Invocation to use to get linker
    :comp_class: The Compiler Type (uninstantiated)
    :comp_version: The compiler version string
    :for_machine: which machine this linker targets
    :extra_args: Any additional arguments required (such as a source file)
    r   r*   r,   r-   r   z-----zDetecting linker via)r"   r.   r/   r0   z-vzDetecting LLD linker viazld64.lldr2   
SnapdragonLLVMz
lld-link: z.*\n(.*?)\nlld-link: zxtools- -r   z(use -v to see invocation)
macosx_versionzld: unknown optionzDetecting Apple linker viaz
PROJECT:ldzPROJECT:dyldGNUzGNU goldmoldSolarisz!ld: Software Generation Utilities:zunknown versionz*ld: 0706-012 The -- flag is not recognizedz-V)(r;   r+   r<   r=   r>   rC   _unix_args_to_nativemachinesr@   r?   rA   rD   rE   r   debugr   r
   rG   LLVMLD64DynamicLinkerrH   QualcommLLVMDynamicLinkerrK   r   rL   r^   DOTALLrN   shlexAttributeError
IndexError
ValueErrorAppleDynamicLinkerendswithr$   GnuGoldDynamicLinkerMoldDynamicLinkerGnuBFDDynamicLinkerlstripSolarisDynamicLinkerAIXDynamicLinker)rR   r   rS   rT   rU   r(   r+   ldflagsrV   rW   rX   rY   rZ   r\   vcmdr[   newonewerrlld_clslinker
linker_cmdxtoolslinegnu_clss                            r#   guess_nix_linkerr   v   s    LLz22JSQ!rJll11+z?R?RSG*11'3<<;TUUJ***C0 ..<=
J
--=
J
H##K1D1Du1LME--eAhEh
JJw: 5;QRGAq!q1uAq)!,,j..4X%)A)AD)H(IIJVCX%
(@(@@D6IJVC+C5OP4 33G//Gk:#;#;XqRV MS 
	v{22k:#;#;Xq 3 RP MM 
l	# X
2dV;<1a	"":AryyIOOPQRJZ03J !*k!:;GAq!q!A**8[*BZBZ\dno*pj Mg 
aggdQg/2	2q)!,LLqL)!,++Hk:C[C[]eop+q` M[ 
2	37G17LPdhiPij..4j66=>>KCZ555>KC+C5QR4LL& 	BDt#~'=JJsOA&	B
 &h
AqA++Hk:C[C[]eop+q@ M? 
!uz <<
#q||J'?22G\\&!Q\\&%9//G11G;
0H0H(\]^* M) 
a9>qSKK% 	"D2d:JJsOA&--/	"
 "A--k:#;#;X .  M 
6	:j..4 Z-E-E-L,M!MPZ!Z[GAq! J,D,D!Dv!MPZ!Z[GAq!))k:#;#;X"1% * '
 M 	"(J1=Mw 
J7 		s   0AV V%$V%)
r   T.List[str]r   r   r    rA   r!   rA   returnz'T.NoReturn')rR   'Environment'r   r   rS   T.Type['Compiler']rT   rA   rU   r   r&   boolr'   r   r(   T.Optional[T.List[str]]r   'DynamicLinker')rR   r   r   r   rS   r   rT   rA   rU   r   r(   r   r   r   )
__future__r   r;   r   mesonlibr   r   r   r	   r
   rL   rr   typingTTYPE_CHECKINGr+   r   r   environmentr   	compilersr   r   r   __annotations__r$   ra   r    r%   r#   <module>r      s   #  
 
  ??8)$(%'
" '!5M  %w	 &0\	! ""*	 !)
	 #,+	 $ 04d;?E:#&E:5BE:(,E:GKE: "9E: ETE:R <@z#&z5Bz!8zDSzr%   