o
    uJAf)                     @  s  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rDd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< d8d"d#Zd$d$dd%d9d3d4Zdd5d:d6d7ZdS );    )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_linkercompilerT.List[str]argsstdoutstrstderrreturn'T.NoReturn'c                 C  s   d t| | ||}t|)Nz?Unable to detect linker for compiler `{}`
stdout: {}
stderr: {})formatr   r   )r   r   r   r    msg r%   >/usr/lib/python3.10/site-packages/mesonbuild/linkers/detect.py__failed_to_detect_linker)   s   r'   T)use_linker_prefixinvoked_directly
extra_argsenv'Environment'
comp_classT.Type['Compiler']comp_versionfor_machiner   r(   boolr)   r*   T.Optional[T.List[str]]'DynamicLinker'c             	   C  sj  ddl m} | j|j|||  |r|jd u rddg}	n#t|jtr-|jd |jd g}	nt|jtr?|jdg |j dg }	|	| j	||j7 }	g }
| 
||jd }|d urd||d |}
|	|
7 }	|d urm|	| t||	 \}}}d|jddd	d v rd
|v r|j|||j|
t|dS |s|j||
||jt|dd dS |d ur|r|}t||	 \}}}d|jddd	d v r|j|g |r|jng |t||dS d|v r|j||t|dS |ds|dr|p|}td|}|rt|d}nd}|j|g |||r|jng t||dS d|v r,dd l}||d }td| dt||	|| d S )Nr
   linkersz/logo	--version_ldr   LLD
maxsplitz(compatible with GNU linkers)versionF)exelistprefixr=   directmachine)r?   r>   r=   r@   ZOPTLINK	Microsoftz.*(X86|X64|ARM|ARM64).*x86)rA   r>   r?   r=   r@   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.) r5   coredataadd_lang_argslanguageLINKER_PREFIX
isinstancer   listget_external_link_argslookup_binary_entryuse_linker_argsextendr   splitLLVMDynamicLinkerr	   ZClangClDynamicLinkerZOptlinkDynamicLinker
startswithresearchgroupZMSVCDynamicLinkershutilwhichr   r'   )r+   r   r-   r/   r0   r(   r)   r*   r5   
check_argsoverridevaluepo_eoutmatchtargetrU   fullpathr%   r%   r&   guess_win_linker/   sr   






rb   )r*   c             
   C  sb  ddl m} | j|j|||  |pg }| j||j}|||| j| 7 }t|j	t
r6|j	d g| }n|j	dg | }g }	| ||jd }
|
durY||
d |}	||	7 }td t|| dd	\}}}t|| }d
|jdddd v rt|j	t
r||	 |j	d g | }n||	 |j	 dg | }t|dd	\}}}d|v r|j}n|j}||||j	|	|d}|S d|v rd|v r|j|||j	|	|d}|S |drt|| dg \}}}ztd|tjd}t|d }W n tttfy   Y nw t|dg\}}}t|}|j|||j	|	|d}|S |ds,d|v s,d|v rt|j	t
r>||j	d g | }n
||j	 dg | }t|dd	\}}}|dD ]}d|v sbd|v rk|dd } n	qVt |||| |j!|||j	|	|d}|S d|v sd|v r|ds|dr|j"}n|ds|dr|j#}n|j$}||||j	|	|d}|S d|v sd|v r|| dD ]}d |v r|d!d" % } nqd#}|j&|||j	|	|d}|S d$|v r(t|j	t
r
t||j	d% g | \}}}nt||j	 d%g | \}}}|j'|||j	|	t|d}|S t |||| |S )&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
   r4   r6   r7   Nr   z-----zDetecting linker via)r$   r8   r9   r:   z-vzDetecting LLD linker viazld64.lldr<   Z
SnapdragonZLLVMz
lld-link: z.*\n(.*?)\nlld-link: z(use -v to see invocation)
Zmacosx_versionzld: unknown optionzDetecting Apple linker viaz
PROJECT:ldzPROJECT:dyld-ZGNUzGNU goldZmoldSolarisz!ld: Software Generation Utilities:r   zunknown versionz*ld: 0706-012 The -- flag is not recognizedz-V)(rD   r5   rE   rF   rG   rK   _unix_args_to_nativemachinesrI   rH   r   rL   rM   r   debugr   r	   rO   ZLLVMLD64DynamicLinkerrP   ZQualcommLLVMDynamicLinkerrQ   r   rR   r_   DOTALLrT   shlexAttributeError
IndexError
ValueErrorendswithr'   ZAppleDynamicLinkerZGnuGoldDynamicLinkerZMoldDynamicLinkerZGnuBFDDynamicLinkerlstripZSolarisDynamicLinkerZAIXDynamicLinker)r+   r   r-   r/   r0   r*   r5   ZldflagsrW   rX   rY   rZ   r[   r]   vcmdr\   ZnewoZnewerrZlld_clslinkerZ
linker_cmdlineZgnu_clsr%   r%   r&   guess_nix_linkerv   s   
FC0  


 
rt   )
r   r   r   r   r   r   r    r   r!   r"   )r+   r,   r   r   r-   r.   r/   r   r0   r   r(   r1   r)   r1   r*   r2   r!   r3   )r+   r,   r   r   r-   r.   r/   r   r0   r   r*   r2   r!   r3   )
__future__r   rD   r   mesonlibr   r   r   r   r	   rR   rj   typingTTYPE_CHECKINGr5   r   r   environmentr   	compilersr   r   r   __annotations__r'   rb   rt   r%   r%   r%   r&   <module>   s0   





I