o
    Wod$                     @  s  U d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZejr~dd	lmZ dd
lmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddlm%Z% ddl&m'Z' ddl(m)Z) i Z*de+d< e rg de*d< g de*d< g de*d< ddge*d< ddge*d< dd ge*d!< nCe, - d"krg d#e*d< g d$e*d< d%ge*d< d&ge*d< ng d'e*d< g d(e*d< g d)e*d< g d*e*d< g d+e*d< d dge*d!< g d,e*d-< d.ge*d/< d0ge*d1< d2ge*d3< d4ge*d5< d6ge*d7< d8d9ge*d8< d:d;ge*d<< d=ge*d=< d>ge*d?< d@ge*dA< dBge*dC< dDge*dE< dFge*dG< dHdIge*dH< ddRdSZ.ddTdUZ/ddWdXZ0	Yddd`daZ1ddddeZ2ddfddidjZ3ddkdlZ4ddmdnZ5ddodpZ6ddqdrZ7ddtduZ8ddvdwZ9ddxdyZ:ddzd{Z;dd|d}Z<dd~dZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddZGdS )    )annotations   )MesonExceptionEnvironmentExceptionMachineChoice	join_argssearch_version
is_windows
Popen_safewindows_proof_rm)BinaryTable)mlog)guess_win_linkerguess_nix_linkerN   )Compiler)	CCompiler)CPPCompiler)FortranCompiler)RustCompiler)StaticLinker)Environment)ExternalProgramzT.Dict[str, T.List[str]]defaults)iclclccgccclangclang-clpgccc)r   r   c++g++clang++r   cpp)ifortgfortranflang	pgfortrang95fortranr   r   objcr"   r#   objcppZcscZmcscse2k)r   r   lccr   )r"   r#   zl++r$   r   r$   )r   r   r   Znvcr    ZiccZicx)r"   r#   r$   znvc++zpgc++ZicpcZicpx)r   r   r   )r"   r#   r$   )r'   r(   Z	nvfortranr)   r&   Zifxr*   )Zldc2ZldcgdcZdmddjavacjavaZnvcccudarustcrustZswiftcswiftZvalacvalacythonZcython3arZgarstatic_linkerstriplibvs_static_linkerllvm-libclang_cl_static_linkerZnvlinkcuda_static_linkerzgcc-argcc_static_linkerzllvm-arclang_static_linkernasmyasmenv'Environment'langstrfor_machiner   returnT.Optional[Compiler]c                 C  s>   t ttttttttt	t
ttttd}||v r|| | |S d S )N)r!   r%   r,   r5   r-   r4   r.   r9   r2   r7   r+   r8   r:   rE   Zmasm)detect_c_compilerdetect_cpp_compilerdetect_objc_compilerdetect_cuda_compilerdetect_objcpp_compilerdetect_java_compilerdetect_cs_compilerdetect_vala_compilerdetect_d_compilerdetect_rust_compilerdetect_fortran_compilerdetect_swift_compilerdetect_cython_compilerdetect_nasm_compilerdetect_masm_compiler)rG   rI   rK   Zlang_map r]   zhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/compilers/detect.pycompiler_from_language^   s"   r_   c                 C  s6   t | ||}|d ur|j|ksJ | j|||  |S N)r_   rK   coredataZprocess_new_compiler)rG   rI   rK   compr]   r]   r^   detect_compiler_forr   s
   rc   HT.Tuple[T.List[T.List[str]], T.List[str], T.Optional['ExternalProgram']]c                 C  s   |  ||}|durt|\}}|g}n| j|s"t|ddd t| D }t }| j|r8d}n|  }|||fS )z
    The list of compilers is detected in the exact same way for
    C, C++, ObjC, ObjC++, Fortran, CS so consolidate it here.
    Nz4 compiler binary not defined in cross or native filec                 S     g | ]}|gqS r]   r]   .0xr]   r]   r^   
<listcomp>       z"_get_compilers.<locals>.<listcomp>)	lookup_binary_entryr   Zparse_entrymachinesZmatches_build_machiner   r   Zdetect_compiler_cacheZget_exe_wrapper)rG   rI   rK   valuerb   ccache	compilersexe_wrapr]   r]   r^   _get_compilers}   s   
rq   compiler
exceptions'T.Mapping[str, T.Union[Exception, str]]binariesT.List[T.List[str]]bintype
T.NoReturnc                 C  sL   d| d| }| r"|d7 }|   D ]\}}|d| d| d7 }qt|)NzUnknown z(s): z-
The following exception(s) were encountered:z

Running `z` gave "")itemsr   )rs   ru   rw   errmsgr!   er]   r]   r^   _handle_exceptions   s   r}   r   r   c                 C  sR  ddl m} ddlm} | |jd}|d ur|g}ndd td D }|jd	kr1td
 g| }nq| dkr@td td g}nb|jdkrMtd g| }nU|jdkrZtd g| }nH|jdkrqt	 rntd td |
 g}n4|}n1|jdkr|jdkrdgg}n"t	 r|jdkrdgg}nt	 r|jdkrtd td g| }n|}i }|D ]w}tj|d }tdd |D rd}	n	|dv rd}	nd}	zt||	g \}
}}W n ty } z||t||	g < W Y d }~qd }~ww d|v r||t|d d   S d!| v sd!| v r||t|d d   S d"|v r$||  S |
jdkr6d#|v r6||  S d$|v s@d%|v rRt||jsIJ |||j  S d&|v rmt||js`J |j||j| d'  S d(|v rd)|v rt||jsJ |||j  S |d*rd+|v r||  S |d,rd-|v r| |  S d.|v rd/|v r|!|  S |"|  S |d0r|#|  S |
jdkr|$|j|  S |
jdkr|d1r|%|j|  S |
jdkr	|d2r	|&|  S |
jdkr|d3r|$|j|  S qt'||d4 t(d5)6Nr   )r2   r   linkersr;   c                 S  re   r]   r]   )rg   lr]   r]   r^   ri      rj   z(detect_static_linker.<locals>.<listcomp>r<   r5   rB   msvcr?   rA   r   rC   r   rD   r2   zintel-clr!   xilibZpgirE   r   c                 s       | ]}t j|d v V  qdS )>   r   zlib.exezllvm-lib.exer>   z	xilib.exer@   Nospathbasenamerf   r]   r]   r^   	<genexpr>       z'detect_static_linker.<locals>.<genexpr>/?>   Zar430z
ar2000.exez	armar.exear2000z	ar430.exearmar?	--versionzxilib: executing 'lib'machinez/OUT:z"ar-Error-Unknown switch: --versionr   zDMD32 D CompilerzDMD64 D CompilerzLDC - the LLVM D compiler)Z
rsp_syntaxZGDCz based on D ZRenesasZrlinkzGNU arzxc16-arzTexas Instruments Incorporatedr   zThe CompCertusageZUsagezar: bad option: --linker/Unreachable code (exception to make mypy happy))) r2   r   rk   rK   r   languageZget_argument_syntaxidr	   Zget_linker_exelistr   r   r   anyr
   OSErrorr   ZIntelVisualStudioLinkergetattrupperZVisualStudioLinkerZPGIStaticLinker
returncodeZArmarLinker
isinstanceZ	DCompilerZDLinkerarchZrsp_file_syntax
startswithZ
CcrxLinkerZ
Xc16LinkerZC2000LinkerZTILinkerZCompCertLinkerZArLinkerZAppleArLinkerZAIXArLinkerr}   r   )rG   rr   r2   r   r   ZtrialsZdefault_linkerspopen_exceptionsZlinker_nameargpouterrr|   r]   r]   r^   detect_static_linker   s   










r   override_compilerr   T.Optional[T.List[str]]c          *      C  s  ddl m}m} ddlm} i }t| ||\}}	}
|dur |g}| |}| j| }|D ]}t|tr7|g}t	j
|d }tdd |D rd	t	jv rdbdd}|t	j
t	jd	 dd|t	j
t	jd	 dd|t	j
t	jd	 dd|t	j
t	jd	 ddg}|td}||v rtd| q,d}n,d|v rd}n%d|v rd}nd|v rd}nd|v rd}n|dv rd}n	|dv rd}nd}||g }z0td  td!t|  t|\}}}td"|  td#|  td$|  W n ty } z||t|< W Y d}~q,d}~ww d|v r|}|d%dd }t|}d}d&|v s4|d'r6d(}d)|v rBd*|v rBd*}d+|v rId}|rt|}|sZd,|t|< q,|d*krot|}|d-krk|jn|j}nt|}|d-kr{|jn|j}t | ||||}||	||||||
|||d.
  S d/|v r|d-kr|j!n|j"}| j#$|j%|||  t&j'd0d1}||j(d |j)g }t|\}} }W d   n	1 sw   Y  |j*|||j(g t| d2}||	||||||
||d3	  S d4|v r;t+,d5|}!|!dusJ d6d7d8d9 |!- D }|d-kr|j.}n|d:kr%|j/}t | ||||}||	||||||
|d;  S d<|v rt+,d=|}!|!du rRd>|t|< q,|!0d}"t|"}|"}|d-kre|j1n|j2}|j3||d2}| j#$|j%|||  ||	||||||
||d?	  S d@|v rd}zt||g \}}}W n ty } z||t||g < W Y d}~nd}~ww t|}t+,dA|t+j4}#|#r|#0d}$ndB}$|d-kr|j5n|j6}t7| dCg|||}|||||||$|
|d;  S dD|v sdE|v r^d}t8|}dF|v r|d-kr|j9n|j:}n|d-kr|j;n|j<}dG|v s*| j| = rAzt7| ||||dHdI}W n
 t>y@   Y nw |du rNt | ||||}||	||||||
|||d.
  S dJ|v rt|}dK|v rndLndM}$|d-krx|j?n|j@}| j#$|j%|||  |jA|g |d2}|||||||$|
|d;  S dN|v rt|}dK|v rdLndM}$|d-kr|jBn|jC}| j#$|j%|||  |jA|g |d2}|||||||$|
|d;  S dO|v sdO|v rH||fD ]}%t|%}|dPkr n	qtDdQ||%jd%ddRd }&t+,dS|&}#|#r|#0d}$n	dT|& }'tD|'|d-kr%|jEn|jF}t7| dUg|||}dV|	vr8g }	||	||||||$|
|&|d?
  S dW|v r{|d-krU|jGn|jH}| j#$|j%|||  |jI|||j(g |d2}||	||||||
|d;  S dX|v r|d-kr|jJn|jK}| j#$|j%|||  |jL|||j(g |d2}||	||||||
|d;  S dY|v r|d-kr|jMn|jN}t | ||||}(||	||||||
||(d?	  S dZ|v r|d-kr|jOn|jP}t | ||||}(||	||||||
||(d?	  S d[|v sd\|v sd]|v rMd[|v r|d-kr|jQn|jR}|jS})n|d-kr'|jTn|jU}|jV})| j#$|j%|||  |)|||d2}||	||||||
||d?	  S d^|v r}|d-krZ|jWn|jX}| j#$|j%|||  |jY||d2}||	||||||
||d?	  S d_|v r|d-kr|jZn|j[}| j#$|j%|||  |j\||d2}||	||||||
||d?	  S d+|v r|j]}| j#$|j%|||  |j^||d2}||	||||||
||d?	  S d`|v r|j_}| j#$|j%|||  |j`||d2}||	||||||
||d?	  S q,ta|| tDda| )czShared implementation for finding the C or C++ compiler to use.

    the override_compiler option is provided to allow compilers which use
    the compiler (GCC or Clang usually) as their shared linker, to find
    the linker they need.
    r   )r!   r%   r   r~   Nr   c                 s  r   )>   zclang-cl.execl.exer   r   Nr   rf   r]   r]   r^   r     r   z,_detect_c_or_cpp_compiler.<locals>.<genexpr>ZWATCOMr   rJ   rL   c                 S  s   t jt j| S r`   )r   r   normcaseabspath)r   r]   r]   r^   sanitize!  s   z+_detect_c_or_cpp_compiler.<locals>.sanitizeZBINNTr   r   ZBINNT64z%Skipping unsupported cl.exe clone at:r   Zarmccz--vsnZccrx-vZxc16r   Zccomp-version>   Zcl2000z
cl2000.exez	armcl.exez	cl430.exeZcl430Zarmcl>   zicl.exer   r   z-----zDetecting compiler via: zcompiler returned zcompiler stdout:
zcompiler stderr:

Free Software Foundationzxt-r   r/   r0   zMicrochip Technologyno pre-processor definesr!   )definesfull_versionr   Z
Emscriptenz.csuffixversion)r   r   Arm C/C++/Fortran Compiler4version (\d+)\.(\d+)\.?(\d+)? \(build number (\d+)\)for mypy.c                 S     g | ]}|d ur|qS r`   r]   rf   r]   r]   r^   ri         z-_detect_c_or_cpp_compiler.<locals>.<listcomp>r%   r   Zarmclangz.*Component.*zversion string not foundr   r   zCL.EXE COMPATIBILITYz^Target: (.*?)-zunknown targetzlld-linkr   ZClangApplewindowsF)invoked_directlyzIntel(R) C++ Intel(R)IA-32x86x86_64z3Intel(R) oneAPI DPC++/C++ Compiler for applications	Microsoftunknown versionz3Failed to detect MSVC compiler version: stderr was
maxsplitz&.*(x86|x64|ARM|ARM64)([^_A-Za-z0-9]|$)zFFailed to detect MSVC compiler target architecture: 'cl /?' output is
linkZsccachePGI CompilersNVIDIA Compilers and Toolsz(ICC)zIntel(R) oneAPIzTMS320C2000 C/C++zMSP430 C/C++zTI ARM C/C++ CompilerZARMz	RX FamilyZCompCertzUnknown compiler )r   rJ   rL   rJ   )br   r!   r%   r   rq   is_cross_buildrl   r   rJ   r   r   r   r   environjoinshutilwhichr   debugr   r
   r   splitr   r   _get_gnu_compiler_defines_get_lcc_version_from_definesZElbrusCCompilerZElbrusCPPCompiler_get_gnu_version_from_definesZGnuCCompilerZGnuCPPCompilerr   ZEmscriptenCCompilerZEmscriptenCPPCompilerra   add_lang_argsr   tempfileNamedTemporaryFileLINKER_PREFIXnameZWASMDynamicLinkerresearchgroupsZArmLtdClangCCompilerZArmLtdClangCPPCompilergroupZArmclangCCompilerZArmclangCPPCompilerZArmClangDynamicLinker	MULTILINEZClangClCCompilerZClangClCPPCompilerr   _get_clang_compiler_definesZAppleClangCCompilerZAppleClangCPPCompilerZClangCCompilerZClangCPPCompilerr	   r   ZIntelClCCompilerZIntelClCPPCompilerXilinkDynamicLinkerZIntelLLVMClCCompilerZIntelLLVMClCPPCompilerr   VisualStudioCCompilerZVisualStudioCPPCompilerZPGICCompilerZPGICPPCompilerPGIDynamicLinkerZNvidiaHPC_CCompilerZNvidiaHPC_CPPCompilerZNvidiaHPC_DynamicLinkerZIntelCCompilerZIntelCPPCompilerZIntelLLVMCCompilerZIntelLLVMCPPCompilerZC2000CCompilerZC2000CPPCompilerZC2000DynamicLinkerZTICCompilerZTICPPCompilerZTIDynamicLinkerZArmCCompilerZArmCPPCompilerZArmDynamicLinkerZCcrxCCompilerZCcrxCPPCompilerZCcrxDynamicLinkerZXc16CCompilerZXc16DynamicLinkerZCompCertCCompilerZCompCertDynamicLinkerr}   )*rG   rI   rK   r   r!   r%   r   r   ro   rn   rp   is_crossinforr   Zcompiler_namer   Z
watcom_clsZfound_clr   cmdr   r   r   r|   r   r   guess_gcc_or_lccr   clsr   f_oarm_ver_matchZarm_ver_strmatchtargetZlookatZcl_signaturemr   Zlnkr]   r]   r^   _detect_c_or_cpp_compiler   s(  


























































r   c                 C     t | d|S )Nr!   r   rG   rK   r]   r]   r^   rN   C     rN   c                 C  r   )Nr%   r   r   r]   r]   r^   rO   F  r   rO   c                 C  s,  ddl m} ddlm} i }| |}t| d|\}}}| j| }	|D ]b}
d}zt|
|g \}}}W n tyN } z||t	|
|g < W Y d }~q#d }~ww |
 jdddd	 }t| |}|}| j|j|||  ||
||jg | d
}|||
||||||	|d	  S tdddd |D  d)Nr   )CudaCompilerr   )
CudaLinkerr5   r   Vr   r   )Zhost_compilerr   r   z(Could not find suitable CUDA compiler: "z; c                 S  s   g | ]}d  |qS ) )r   )rg   r!   r]   r]   r^   ri   l  s    z(detect_cuda_compiler.<locals>.<listcomp>ry   )r5   r   Zlinkers.linkersr   r   rq   rl   r
   r   r   r=   rsplitrO   ra   r   r   r   parse_versionr   r   )rG   rK   r   r   r   r   ro   rn   rp   r   rr   r   r   r   r   r|   r   Zcpp_compilerr   r   r]   r]   r^   rQ   I  s,   


 rQ   c                 C  s  ddl m} ddlm} i }t| d|\}}}| |}| j| }	|D ]}
dD ]}zt|
|g \}}}W n tyR } z||t|
|g < W Y d }~q(d }~ww t	|}|
ddd }d }d	|v rgd
}d|v rqd|v rqd}|rt|
}|sd|t|
< q(|dkrt|}|j}t| |
|||}||
||||	||||d	    S t|}|j}t| |
|||}||
||||	||||d	    S d|v r|j}td|}|d usJ dddd | D }t| |
|||}||
||||	||d    S d|v r|j}t| |
|||}||
||||	|||d    S d|v r@t	|}|j}t| |
|||}||
||||	|||d    S d|v rwt	|}d|v rPdnd}|j}| j|j|||  |j|g |d}||
||||	|||d    S d|v sd|v rt	|}d|v rdnd}|j}| j|j|||  |j|g |d}||
||||	|||d    S d|v r|j}t| |
|||}||
||||	|||d    S d |v r|j}t| |
|||}||
||||	|||d    S d!|v r|j |
||||	||d"    S d#|v r5|j!}| j|j|||  |j"|
||j#g |d}||
||||	|||d    S d$|v rb|j$}| j|j|||  |j"|
||j#g |d}||
||||	|||d    S d%|v sld&|v r|j%}t| |
|||}||
||||	|||d    S d'|v r|j&}t| |
|||}||
||||	|||d    S d(|v r|
ddd }|
 d) }|j'}| j|j|||  |j(|
||j#g |d}||
||||	|||d    S q(q#t)|| t*d*)+Nr   )r+   r   r~   r+   )r   -Vr   r   zGNU Fortranr   r/   r0   r   r   r   r   r   r   c                 S  r   r`   r]   rf   r]   r]   r^   ri     r   z+detect_fortran_compiler.<locals>.<listcomp>r   ZG95zSun Fortranz*Intel(R) Fortran Compiler for applicationsr   r   r   r   zIntel(R) Visual FortranzIntel(R) Fortranzifort (IFORT)zifx (IFORT)zPathScale EKOPath(tm))r   r   r   r(   r   zOpen64 Compiler SuitezNAG Fortranr   r   )+r   r+   r   rq   r   rl   r
   r   r   r   r   r   r   ZElbrusFortranCompilerr   r   ZGnuFortranCompilerZArmLtdFlangFortranCompilerr   r   r   r   ZG95FortranCompilerZSunFortranCompilerZIntelLLVMClFortranCompilerra   r   r   r   ZIntelClFortranCompilerZIntelFortranCompilerZIntelLLVMFortranCompilerZPathScaleFortranCompilerZPGIFortranCompilerr   r   ZNvidiaHPC_FortranCompilerZFlangFortranCompilerZOpen64FortranCompilerZNAGFortranCompilerZNAGDynamicLinkerr}   r   )rG   rK   r+   r   r   ro   rn   rp   r   r   rr   r   r   r   r   r|   r   r   r   r   r   r   r   r   r]   r]   r^   rX   n  sF  



























  
rX   
'Compiler'c                 C  r   )Nr,   _detect_objc_or_objcpp_compilerr   r]   r]   r^   rP     r   rP   c                 C  r   )Nr-   r   r   r]   r]   r^   rR     r   rR   c                 C  s  ddl m}m} i }t| ||\}}}| |}	| j| }
|D ]}dg}zt|| \}}}W n tyI } z||t|| < W Y d }~qd }~ww t	|}d|v rt
|}|s_d|t|< qt|}|dkrj|jn|j}t| ||||}||||||	|
|||d	  S d|v rd }t|}|sd|t|< qd	|v r|dkr|jn|j}n
|dkr|jn|j}d
|v s| j|  rz
t| ||||}W n	 ty   Y nw |st| ||||}||||||	|
|||d	  S qt|| td)Nr   )r,   r-   r   r   r   r,   r   r   r   r   )r   r   r   )r   r,   r-   rq   r   rl   r
   r   r   r   r   r   ZGnuObjCCompilerZGnuObjCPPCompilerr   r   ZAppleClangObjCCompilerZAppleClangObjCPPCompilerZClangObjCCompilerZClangObjCPPCompilerr	   r   r   r}   r   )rG   rI   rK   r,   r-   r   ro   rn   rp   r   r   rr   r   r   r   r   r|   r   r   rb   r   r]   r]   r^   r     sf   





r   c                 C  s   ddl m} | |d}| j| }|d u rtd d g}zt|dg \}}}W n ty8   tdt	|w d|v sAd|v rxt
d|v rH|n|}|rQ|dkred|v rW|n| }	t|	dkre|	d }|}
| j|
j|
||  |
||||S td	t	| )
Nr   )JavaCompilerr4   r   r   z#Could not execute Java compiler: {}r3   r   Unknown compiler: )r4   r   rk   rl   r   r
   r   r   formatr   r   r   lenra   r   r   )rG   rK   r   exelistr   r   r   r   r   parts
comp_classr]   r]   r^   rS   E  s(   
rS   c                 C  s   ddl m} t| d|\}}}i }| j| }|D ]Q}zt|dg \}	}
}W n tyA } z||t|dg < W Y d }~qd }~ww t|
}d|
v rN|j}n	d|
v rV|j	}nq| j
|j|||  |||||  S t|| td)Nr   )r.   r.   r   ZMonoz	Visual C#r   )r   r.   rq   rl   r
   r   r   r   ZMonoCompilerZVisualStudioCsCompilerra   r   r   r}   r   )rG   rK   r.   ro   rn   rp   r   r   rb   r   r   r   r|   r   r   r]   r]   r^   rT   \  s,   

rT   c                 C  s   ddl m} t| dtj\}}}| |}| j| }i }|D ]I}zt|dg d }	W n tyF }
 z|
|t	|dg < W Y d}
~
qd}
~
ww t
|	}d|	v rg|}| j|j|||  |g |||||d  S qt|| td	)
zSearch for a cython compiler.r   )CythonCompilerr:   r   r   NZCythonr   r   )r:   r  rq   r   BUILDr   rl   r
   r   r   r   ra   r   r   r}   r   )rG   rK   r  ro   r   r   r   r   rb   r   r|   r   r  r]   r]   r^   rZ   v  s*   


rZ   c           
      C  s   ddl m} | tjd}| |}| j| }|d u r"td d g}zt|dg dd \}}W n t	yA   t
dt|w t|}d|v r^|}	| j|	j|	||  |	|||||S t
d	t| )
Nr   )ValaCompilerr9   r   r   r   z#Could not execute Vala compiler: {}ZValar   )r9   r	  rk   r   r  r   rl   r   r
   r   r   r  r   r   ra   r   r   )
rG   rK   r	  r  r   r   r   r   r   r  r]   r]   r^   rU     s"   

rU   r   c                 C  sV  ddl m} ddlm} i }t| d|\}}}| |}| j| }	t| |}
t|
j|j	}| 
|d}|D ]k}dg}z
t|| d }W n ty_ } z||t|| < W Y d }~q5d }~ww t|}|j}d|v rd	dg}z
t|| d }W n ty } z||t|| < W Y d }~q5d }~ww t|}|j}d
|v rtdd |D rtd | }|d u r9i }g }|r|||
jjd d d|d< |
jj|d< n/|
jj|
j  }d|d v r|d= |d}|||d |D ]}|dd| g q|
jd usJ d|r%t|
j||f|
jj|
jjd|}net|
j|||
jf||
jjd|}nQd|d v rct| ||||dd}t||j	sSJ d|_|||jd d n't | d||d}
|
j}|jd !dr||jd n|jd }|||d | j"#|j$|||  ||||||	||d  S q5t%|| t&d) Nr   )r7   r   r~   r7   Zrust_ldr   Zclippyz--rustcr6   c                 s  s    | ]}| d V  qdS )zlinker=N)r   )rg   ar]   r]   r^   r     s    z'detect_rust_compiler.<locals>.<genexpr>zPlease do not put -C linker= in your compiler command, set rust_ld=command in your cross file or use the RUST_LD environment variable, otherwise meson will override your selection.r   r   Tdirectr   rn   z-Cz	link-arg=r   )r  r   )always_argsr   r   F)use_linker_prefixr!   r   r   r   )'r   r7   r   rq   r   rl   rN   r   r   ZVisualStudioLikeLinkerMixinrk   r
   r   r   r   r   ZClippyRustCompilerr   r   warningcopyextendZuse_linker_argsr  r   Zget_always_argspoptyper   r   r   r  r   endswithra   r   r   r}   r   )rG   rK   r7   r   r   ro   r   rp   r   r   r   Zis_link_exeoverriderr   r   r   r|   r   r   
extra_argsr  r  r!   r   r   r]   r]   r^   rW     s   








&

JrW   c                 C  sb  ddl m}m} | j| }dt| |i}t|d |j}|s i }ddlm} ||}|r2|dkr2d}i }	| 	|}
t
| d|\}}}|D ]b}tj|d	 d
r\td|d	  dzt|dg dd \}}W n ty } z||	t|dg < W Y d }~qDd }~ww t|}|ddd }d|v r|j}td\}}t| zC| s| rtj|d d	 d }t| ||||dd|gd}ntj|d d	 d }t| |||||gd}W t| t| n	t| t| w |||||||||d  S d|v r!|j}t| ||||}||||||||
||d	  S d|v s+d|v r|j}td\}}t| |dkrAdnd}zF| sN| rhtj|d d	 d }t| ||||d||gd }ntj|d d	 d }t| ||||||gd}W t| t| n	t| t| w ||||||||d!  S td"t| t |	| td#)$Nr   )r!   r2   r!   r   )detect_cpu_familyr   Z
x86_mscoffr2   r   )ZldmdZgdmdzMeson does not support z as it is only a DMD frontend for another compiler.Please provide a valid value for DC or unset it so that Meson can resolve the compiler by itself.r   r   r   zLLVM D compilerz.dobjTF)r  r   r  r   r  )r   r   Zversion_outputr1   )Zexe_wrapperr   r   r   zThe D Language FoundationzDigital Marsr   z-m64z-m32)r   r  r   r   r   )!r   r!   r2   rl   rN   r   r   environmentr  r   rq   r   r   r   r   r   r
   r   r   r   r   ZLLVMDCompilerr   mkstempcloser	   Z	is_cygwinr   r   r   ZGnuDCompilerZDmdDCompilerr}   )rG   rK   r!   r2   r   Z
c_compilerZis_msvcr  r   r   r   ro   rn   rp   r  r   r   r|   r   r   r   r   r   Zobjfiler   Zarch_argr]   r]   r^   rV     s   

















rV   c              	   C  s   ddl m} | |d}| |}| j| }|d u r!td d g}zt|dg \}}}W n ty=   td	t
|w t|}	d|v rttjdd	}
|}t| |||	||
jgd
}W d    n1 sew   Y  |||	||||dS tdt
| )Nr   )SwiftCompilerr8   r   r   z$Could not execute Swift compiler: {}ZSwiftz.swiftr   r  r   r   )r8   r  rk   r   rl   r   r
   r   r   r  r   r   r   r   r   r   )rG   rK   r  r  r   r   r   r   r   r   r   r   r   r]   r]   r^   rY     s0   

rY   c                 C  s  ddl m}m} t| d|\}}}| |}t| |}|s*ddlm} |d|i}	n| j| }	i }
|D ]}|dgkr]t	 r]t
|d s]tjtjd d	}t
j|d |d
pZ|d |d< zt|dg d }W n ty } z||
d|dg < W Y d }~q3d }~ww t|}d	|v r|}| j|j|||  |g ||||	|j|d  S d|v r|}| j|j|||  |g ||||	|j|d  S q3t|
| td)Nr   )NasmCompilerYasmCompilerrE   r   detect_machine_infor!   r   ProgramFilesZNASM)r   r   r   r  rF   r   )asmr  r  rq   r   rN   r  r   rl   r	   r   r   r   r   r   r   r
   r   r   ra   r   r   r   r}   r   )rG   rK   r  r  ro   r   r   r   r   r   r   rb   Zdefault_pathoutputr|   r   r  r]   r]   r^   r[     s@   



r[   c              
   C  s`  |  |}t| |}|sddlm} |d|i}n| j| }ddlm}m} |jdkr3dg}|}	d}
n0|jd	kr@d
g}|}	d}
n#|jdkrMdg}|}	d}
n|jdkrZdg}|}	d}
n	t	d|j di }z$t
||
g d }t|}| j|	j|	||  |	g |||||j|dW S  ty } z||d||
g < W Y d }~nd }~ww t||g t	d)Nr   r  r!   r   )MasmCompilerMasmARMCompilerr   mlr   r   Zml64armZarmasmz-haarch64Zarmasm64z	Platform z not supported by MASMr  r   r   )r   rN   r  r   rl   r"  r$  r%  Z
cpu_familyr   r
   r   ra   r   r   r   r   r   r}   )rG   rK   r   r   r   r   r$  r%  rb   r  r   r   r#  r   r|   r]   r]   r^   r\     sH   






 r\   T.List[str]T.Dict[str, str]c           	      C     | g d }t dt|  t|dtjd\}}}|jdkr+td| d| di }|d	D ],}|s7q2|d
d^}}|dkrDq2t	|dkrPd||d < t	|dkr^|d ||d < q2|S )z@
    Detect GNU compiler platform type (Apple, MinGW, Unix)
    z-Ez-dM-Running command: r   writestdinr   z5Unable to detect GNU compiler type:
Compiler stdout:

-----
Compiler stderr:

-----
r   r   r   #definer   
r   r   r   r
   
subprocessPIPEr   r   r   r  	rr   argsr   r#  errorr   liner2   restr]   r]   r^   r     s,   

r   c           	      C  r+  )z5
    Get the list of Clang pre-processor defines
    r,  r.  r   r/  r   z<Unable to get clang pre-processor defines:
Compiler stdout:
r2  r3  r   r   r   r4  r   r5  r8  r]   r]   r^   r     s,   

r   r   c                 C  s8   d}|  dd}|  dd}|  dd}||||fS )Nr   Z__GNUC__0Z__GNUC_MINOR__Z__GNUC_PATCHLEVEL__getr   )r   dotmajorminorZpatchr]   r]   r^   r   &  s
   r   c                 C  sD   d}|  dd}|d d }|dd  }|  dd}||||fS )Nr   Z__LCC__Z100r   Z__LCC_MINOR__r=  r>  )r   r@  Zgeneration_and_majorZ
generationrA  rB  r]   r]   r^   r   -  s   r   )rG   rH   rI   rJ   rK   r   rL   rM   )rG   rH   rI   rJ   rK   r   rL   rd   )rr   )rs   rt   ru   rv   rw   rJ   rL   rx   )rG   rH   rr   r   rL   r   )
rG   rH   rI   rJ   rK   r   r   r   rL   r   )rG   rH   rK   r   rL   r   )rG   rH   rK   r   rL   r   )rG   rH   rI   rJ   rK   r   rL   r   )rG   rH   rK   r   rL   r   )rr   r)  rL   r*  )r   r*  rL   rJ   )H
__future__r   Zmesonlibr   r   r   r   r   r	   r
   r   Z	envconfigr   r   r   r   r   r   r6  platformr   r   r   r   typingTTYPE_CHECKINGro   r   r!   r   r%   r   r+   r   r7   r   r   r  r   Zprogramsr   r   __annotations__r   lowerr_   rc   rq   r}   r   r   rN   rO   rQ   rX   rP   rR   r   rS   rT   rZ   rU   rW   rV   rY   r[   r\   r   r   r   r   r]   r]   r]   r^   <module>   s   (















]  
E


% 



4




u
o

%
-

