o
    uJAfl                    @  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
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rd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'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/ 0 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Z1ddVdWZ2ddYdZZ3	[dddbdcZ4ddfdgZ5ddhddkdlZ6ddmdnZ7ddodpZ8ddqdrZ9ddsdtZ:ddvdwZ;ddxdyZ<ddzd{Z=dd|d}Z>dd~dZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddZGdddZHdddZIdddZJdS )    )annotations   )	MesonExceptionEnvironmentExceptionMachineChoice	join_argssearch_version
is_windows
Popen_safePopen_safe_loggedwindows_proof_rm)BinaryTable)mlog)guess_win_linkerguess_nix_linkerN   )Compiler)	CCompiler)CPPCompiler)FortranCompiler)RustCompiler)StaticLinkerDynamicLinker)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.   r7   r/   r6   r0   r;   r4   r9   r-   r:   r<   rG   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)rI   rK   rM   Zlang_map r`   @/usr/lib/python3.10/site-packages/mesonbuild/compilers/detect.pycompiler_from_language^   s"   rb   skip_sanity_checkboolc                 C  s`   t | ||}|d u r|S |j|ksJ | j|||  |s%||  |  || jj|j |< |S N)rb   rM   coredataprocess_new_compilersanity_checkZget_scratch_dir	compilers)rI   rK   rM   rc   compr`   r`   ra   detect_compiler_forr   s   rk   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`   ra   
<listcomp>       z"_get_compilers.<locals>.<listcomp>)	lookup_binary_entryr   Zparse_entrymachinesmatches_build_machiner   r   Zdetect_compiler_cacheZget_exe_wrapper)rI   rK   rM   valuerj   ccacheri   exe_wrapr`   r`   ra   _get_compilers   s   
ry   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   )r{   r}   r   errmsgr#   er`   r`   ra   _handle_exceptions   s   r   r   r   c                 C  s  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 ]}tj|d }tdd |D rd}	n	|dv rd}	nd}	zt||	g dd \}
}}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r9d%|v r9||  S d&|v sCd'|v rUt||jsLJ |||j  S d(|v rpt||jscJ |j||j| d)  S d*|v rd+|v rt||jsJ |||j  S |d,rd-|v r||  S |d.rd/|v r| |  S d0|v rd1|v r|!|  S |"|  S |d2r|#|  S |$ d3s|$ d4rd5|v r|%|  S |&|  S |
jdkr|'|j|  S |
jdkr|d6r|(|j|  S |
jdkr/|d7r/|)|  S |
jdkrD|d8rD|'|j|  S qt*||d9 t+d:);Nr   )r4   r   linkersr=   c                 S  rm   r`   r`   )ro   lr`   r`   ra   rq      rr   z(detect_static_linker.<locals>.<listcomp>r>   r7   rD   msvcrA   rC   r   rE   r    rF   r4   zintel-clr#   xilibZpgirG   r   c                 s       | ]}t j|d v V  qdS )>   rB   zlib.exezllvm-lib.exer   r@   z	xilib.exeNospathbasenamern   r`   r`   ra   	<genexpr>       z'detect_static_linker.<locals>.<genexpr>/?>   z
ar2000.exez	armar.exear2000Zar430z	ar430.exearmar?	--versionzDetecting linker viamsgz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
Metrowerks	FreescaleARMusageZUsagezar: bad option: --linker/Unreachable code (exception to make mypy happy)), r4   r   rs   rM   r   languageget_argument_syntaxidr	   get_linker_exelistr   r   r   anyr   OSErrorr   ZIntelVisualStudioLinkergetattrupperZVisualStudioLinkerZPGIStaticLinker
returncodeZArmarLinker
isinstanceZ	DCompilerZDLinkerarchrsp_file_syntax
startswithZ
CcrxLinkerZ
Xc16LinkerZC2000LinkerZTILinkerZCompCertLinkerr?   ZMetrowerksStaticLinkerARMZ%MetrowerksStaticLinkerEmbeddedPowerPCZArLinkerZAppleArLinkerZAIXArLinkerr   r   )rI   rz   r4   r   r   ZtrialsZdefault_linkerspopen_exceptionsZlinker_nameargpouterrr   r`   r`   ra   detect_static_linker   s   











 
r   override_compilerr   T.Optional[T.List[str]]c          0      C  s"  ddl m}m} ddlm} i }t| ||\}}	}
|dur |g}| |}| j| }|D ]W}t|tr7|g}t	j
|d }tdd |D rd	t	jv rdid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 }zt|d d!\}}}W n ty } z||t|< W Y d}~q,d}~ww d|v r|}|d"dd }t|}d}d#|v s|d$rd%}d&|v rd'|v rd'}d(|v r"d}|rot|}|s3d)|t|< q,|d'krHt|}|d*krD|jn|j}nt|}|d*krT|jn|j}t | ||||}||	||||||
|||d+
  S d,|v r|d*kr||j!n|j"}| j#$|j%|||  t&j'd-d.}||j(d |j)g }t*|\}} }W d   n	1 sw   Y  |j+|||j(g t| d/}||	||||||
||d0	  S d1|v rt,-d2|}!|!dusJ d3d4d5d6 |!. D }|d*kr|j/}n|d7kr|j0}t | ||||}||	||||||
|d8  S d9|v rat,-d:|}!|!du r+d;|t|< q,|!1d}"t|"}|"}|d*kr>|j2n|j3}|j4||d/}| 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,-d>|t,j5}#|#r|#1d}$nd?}$|d*kr|j6n|j7}t8| d@g|||}|||||||$|
|d8  S dA|v sdB|v r7d}t9|}dC|v r|d*kr|j:n|j;}n|d*kr|j<n|j=}dD|v s| j| > rzt8| ||||dEdF}W n
 t?y   Y nw |du r't | ||||}||	||||||
|||d+
  S dG|v rtt|}dH|v rGdIndJ}$|d*krQ|j@n|jA}| j#$|j%|||  |jB|g |d/}|||||||$|
|d8  S dK|v rt|}dH|v rdIndJ}$|d*kr|jCn|jD}| j#$|j%|||  |jB|g |d/}|||||||$|
|d8  S dL|v sdL|v r!||fD ]}%t|%}|dMkr n	qtEdN||%jd"ddOd }&t,-dP|&}#|#r|#1d}$n	dQ|& }'tE|'|d*kr|jFn|jG}t8| dRg|||}dS|	vrg }	||	||||||$|
|&|d<
  S dT|v rT|d*kr.|jHn|jI}| j#$|j%|||  |jJ|||j(g |d/}||	||||||
|d8  S dU|v r|d*kra|jKn|jL}| j#$|j%|||  |jM|||j(g |d/}||	||||||
|d8  S dV|v r|d*kr|jNn|jO}t | ||||}(||	||||||
||(d<	  S dW|v r|d*kr|jPn|jQ}t | ||||}(||	||||||
||(d<	  S dX|v sdY|v sdZ|v r&dX|v r|d*kr|jRn|jS}|jT})n|d*kr |jUn|jV}|jW})| j#$|j%|||  |)|||d/}||	||||||
||d<	  S d[|v r`d\|v s`d]|v s`|d*kr=|jXn|jY}| j#$|j%|||  |jZ||d/}||	||||||
||d<	  S d^|v r|d*krm|j[n|j\}| j#$|j%|||  |j]||d/}||	||||||
||d<	  S d(|v r|j^}| j#$|j%|||  |j_||d/}||	||||||
||d<	  S d_|v r|j`}| j#$|j%|||  |ja||d/}||	||||||
||d<	  S d`|v sda|v rd[|v r|d*kr|jbn|jc}|jd})n|d*kr|jen|jf}|jg})t,-db|}*|*dusJ d3d4dcd |*. D }+| j#$|j%|||  | h||j%dd },|,durlt*|,dg \}}-}t,-db|-}.|.dusXJ d3d4ded |.. D }/|)|,||/d/}n	tEdf|jidg||	||+||||
||d<	  S q,tj|| tEdh| )jzShared 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   )>   r   cl.exer!   zclang-cl.exeNr   rn   r`   r`   ra   r      r   z,_detect_c_or_cpp_compiler.<locals>.<genexpr>ZWATCOMr   rL   rN   c                 S  s   t jt j| S re   )r   r   normcaseabspath)r   r`   r`   ra   sanitize+  s   z+_detect_c_or_cpp_compiler.<locals>.sanitizeZBINNTr   r   ZBINNT64z%Skipping unsupported cl.exe clone at:r   Zarmccz--vsnccrx-vxc16r   Zccomp-version>   z	cl430.exeZarmclZcl2000z	armcl.exez
cl2000.exeZcl430>   zicl.exer   r   Detecting compiler viar   
Free Software Foundationzxt-r   r1   r2   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 re   r`   rn   r`   r`   ra   rq         z-_detect_c_or_cpp_compiler.<locals>.<listcomp>r'   r   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
linksccachePGI CompilersNVIDIA Compilers and Toolsz(ICC)zIntel(R) oneAPIzTMS320C2000 C/C++zMSP430 C/C++zTI ARM C/C++ Compilerr   r   r   z	RX FamilyZCompCertzMetrowerks C/C++zFreescale C/C++z)Version (\d+)\.(\d+)\.?(\d+)? build (\d+)c                 s      | ]	}|d ur|V  qd S re   r`   rn   r`   r`   ra   r   N      Z_ldc                 s  r   re   r`   rn   r`   r`   ra   r   X  r   zFailed to detect linker for z, compiler. Please update your cross file(s).zUnknown compiler )r   rL   rN   rL   )kr   r#   r'   r   ry   is_cross_buildrt   r   rL   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EmscriptenCPPCompilerrf   add_lang_argsr   tempfileNamedTemporaryFileLINKER_PREFIXnamer
   Z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CompCertDynamicLinkerZMetrowerksCCompilerARMZMetrowerksCPPCompilerARMZMetrowerksLinkerARMZ"MetrowerksCCompilerEmbeddedPowerPCZ$MetrowerksCPPCompilerEmbeddedPowerPCZMetrowerksLinkerEmbeddedPowerPCrs   r   r   )0rI   rK   rM   r   r#   r'   r   r   ri   rw   rx   is_crossinforz   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lnkZmwcc_ver_matchZcompiler_versionldZo_ldZmwld_ver_matchZlinker_versionr`   r`   ra   _detect_c_or_cpp_compiler	  sJ  






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

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

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

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

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

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

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

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

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



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

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

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






r  c                 C     t | d|S )Nr#   r  rI   rM   r`   r`   ra   rQ   e     rQ   c                 C  r  )Nr'   r	  r
  r`   r`   ra   rR   h  r  rR   c                 C  s0  ddl m} ddlm} i }| |}t| d|\}}}| j| }	|D ]d}
d}zt|
|g dd\}}}W n tyP } 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   )
CudaLinkerr7   r   r   r   Vr   r   )Zhost_compilerr   r   z(Could not find suitable CUDA compiler: "z; c                 S  s   g | ]}d  |qS ) )r   )ro   r#   r`   r`   ra   rq     s    z(detect_cuda_compiler.<locals>.<listcomp>r   )r7   r  linkers.linkersr  r   ry   rt   r   r   r   r?   rsplitrR   rf   r   r   r   Zparse_versionr   r   )rI   rM   r  r  r   r   ri   rw   rx   r   rz   r   r   r   r   r   r   Zcpp_compilerr   r   r`   r`   ra   rT   k  s,   


 rT   c                 C  s  ddl m} ddlm} i }t| d|\}}}| |}| j| }	|D ]}
dD ]}zt|
|g dd\}}}W n tyT } z||t|
|g < W Y d }~q(d }~ww t	|}|
d	dd
 }d }d|v rid}d|v rsd|v rsd}|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 rBt	|}|j}t| |
|||}||
||||	|||d    S d|v ryt	|}d|v rRd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 sd#|v r|j}t| |
|||}||
||||	|||d    S d$|v r|j |
||||	||d%    S d&|v r<|j!}| j|j|||  |j"|
||j#g |d}||
||||	|||d    S d'|v ri|j$}| j|j|||  |j"|
||j#g |d}||
||||	|||d    S d(|v ssd)|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   r   r   zGNU Fortranr   r1   r2   r   r   r   r   r   r   c                 S  r   re   r`   rn   r`   r`   ra   rq     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	ifx (IFX)zPathScale EKOPath(tm))r   r   r   r*   r    zOpen64 Compiler SuitezNAG Fortranr  r   )+r   r-   r   ry   r   rt   r   r   r   r   r   r   r   ZElbrusFortranCompilerr   r   ZGnuFortranCompilerZArmLtdFlangFortranCompilerr   r   r   r   ZG95FortranCompilerZSunFortranCompilerZIntelLLVMClFortranCompilerrf   r   r   r   ZIntelClFortranCompilerZIntelFortranCompilerZIntelLLVMFortranCompilerZPathScaleFortranCompilerZPGIFortranCompilerr   r   ZNvidiaHPC_FortranCompilerZFlangFortranCompilerZOpen64FortranCompilerZNAGFortranCompilerZNAGDynamicLinkerr   r   )rI   rM   r-   r   r   ri   rw   rx   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r  r  r`   r`   ra   r[     sF  


























  
r[   
'Compiler'c                 C  r  )Nr.   _detect_objc_or_objcpp_compilerr
  r`   r`   ra   rS   -  r  rS   c                 C  r  )Nr/   r  r
  r`   r`   ra   rU   0  r  rU   c                 C  s  ddl m}m} i }t| ||\}}}| |}	| j| }
|D ]}dg}zt|| dd\}}}W n tyK } z||t|| < W Y d }~qd }~ww t	|}d|v rt
|}|sad|t|< qt|}|dkrl|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   r.   r/   ry   r   rt   r   r   r   r   r   r   ZGnuObjCCompilerZGnuObjCPPCompilerr   r   ZAppleClangObjCCompilerZAppleClangObjCPPCompilerZClangObjCCompilerZClangObjCPPCompilerr	   r   r   r   r   )rI   rK   rM   r.   r/   r   ri   rw   rx   r   r   rz   r   r   r   r   r   r   r   rj   r   r`   r`   ra   r  3  sf   





r  c                 C  s  ddl m} | |d}| j| }|d u rtd d g}zt|dg dd\}}}W n ty:   tdt	|w d	|v sCd	|v rzt
d	|v rJ|n|}|rS|d
krgd	|v rY|n| }	t|	dkrg|	d }|}
| j|
j|
||  |
||||S tdt	| )Nr   )JavaCompilerr6   r   r   r   r   z#Could not execute Java compiler: {}r5   r   Unknown compiler: )r6   r  rs   rt   r   r   r   r   formatr   r   r   lenrf   r   r   )rI   rM   r  exelistr   r   r   r   r   parts
comp_classr`   r`   ra   rV   g  s(   
rV   c                 C  s   ddl m} t| d|\}}}i }| j| }|D ]S}zt|dg dd\}	}
}W n tyC } z||t|dg < W Y d }~qd }~ww t|
}d|
v rP|j}n	d|
v rX|j	}nq| j
|j|||  |||||  S t|| td	)
Nr   )r0   r0   r   r   r   ZMonoz	Visual C#r   )r   r0   ry   rt   r   r   r   r   ZMonoCompilerZVisualStudioCsCompilerrf   r   r   r   r   )rI   rM   r0   ri   rw   rx   r   r   rj   r   r   r   r   r   r   r`   r`   ra   rW   ~  s,   

rW   c                 C  s  ddl m} t| dtj\}}}| |}| j| }i }|D ][}zt|dg dd\}}	}
W n tyI } z||t	|dg < W Y d}~qd}~ww d}d|	v rUt
|	}nd|
v r]t
|
}|dury|}| j|j|||  |g |||||d	  S qt|| td
)zSearch for a cython compiler.r   )CythonCompilerr<   r  r   r   NZCythonr   r   )r<   r  ry   r   BUILDr   rt   r   r   r   r   rf   r   r   r   r   )rI   rM   r  ri   r   r   r   r   rj   r   r   r   r   r  r`   r`   ra   r]     s2   



r]   c           
      C  s   ddl m} | tjd}| |}| j| }|d u r"td d g}zt|dg dddd \}}W n t	yC   t
d	t|w t|}d
|v r`|}	| j|	j|	||  |	|||||S t
dt| )Nr   )ValaCompilerr;   r   r   r   r   r   z#Could not execute Vala compiler: {}ZValar  )r;   r!  rs   r   r   r   rt   r   r   r   r   r  r   r   rf   r   r   )
rI   rM   r!  r  r   r   r   r   r   r  r`   r`   ra   rX     s"   

"rX   r   c                 C  sb  ddl m} ddlm} i }t| d|\}}}| |}| j| }	t| |}
t|
j|j	}| 
|d}|D ]q}dg}zt|| dd	d }W n tya } 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 r?i }g }|r|||
jjd d d|d< |
jj|d< n3|
jj|
j  }t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 rit"| ||||dd}t||j	sYJ 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   )r9   r   r   r9   Zrust_ldr   r   r   Zclippyz--rustcr8   c                 s  s    | ]}| d V  qdS )zlinker=N)r   )ro   ar`   r`   ra   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 RUSTC_LD environment variable, otherwise meson will override your selection.r   r   Tdirectr   >   r   rw   z-Cz	link-arg=r   )r  r   )always_argsr   r   F)use_linker_prefixr#   r   rw   r   r   )+r   r9   r   ry   r   rt   rQ   r   r   ZVisualStudioLikeLinkerMixinrs   r   r   r   r   r   r
   ZClippyRustCompilerr   r   warningcopyextenduse_linker_argsr  r   get_always_argsr   r   r   poptyper   r   r   r#  r  endswithrf   r   r   r   r   )rI   rM   r9   r   r   ri   r   rx   r   r   r   Zis_link_exeoverriderz   r   r   r   r   r   
extra_argsr$  r  r#   r   r   r`   r`   ra   rZ     s   








&

JrZ   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#   r4   r#   r   )detect_cpu_familyr   Z
x86_mscoffr4   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_outputr3   )exe_wrapperr   r   r   zThe D Language FoundationzDigital Marsr   z-m64z-m32)r   r/  r   r  r   )!r   r#   r4   rt   rQ   r   r   environmentr0  r   ry   r   r   r   r   r   r
   r   r   r   r   ZLLVMDCompilerr   mkstempcloser	   	is_cygwinr   r   r   ZGnuDCompilerZDmdDCompilerr   )rI   rM   r#   r4   r   Z
c_compilerZis_msvcr0  r   r   r   ri   rw   rx   r  r   r   r   r   r   r   r  r   objfiler   Zarch_argr`   r`   ra   rY   >  s   

















rY   c              	   C  s   ddl m} | |d}| |}| j| }|d u r!td d g}zt|dg dd\}}}W n ty?   td	t
|w t|}	d	|v rvtjd
d}
|}t| |||	||
jgd}W d    n1 sgw   Y  |||	||||dS tdt
| )Nr   )SwiftCompilerr:   r   r   r   r   z$Could not execute Swift compiler: {}ZSwiftz.swiftr   r2  r   r  )r:   r9  rs   r   rt   r   r   r   r   r  r   r   r   r   r   r   )rI   rM   r9  r  r   r   r   r   r   r   r   r   r   r`   r`   ra   r\     s0   

r\   c                 C  s,  ddl m}m}m}m} t| d|\}}}| |}t| |}	|s.ddlm	}
 |
d|	i}n| j
| }i }|D ]}|dgkrat rat|d satjtjd d	}tj|d |d
p^|d |d< zt|dg ddd }W n ty } z||d|dg < W Y d }~q7d }~ww t|}d	|v r|}| j|j|||  |g |||||	j|d  S d|v r|}| j|j|||  |g |||||	j|d  S d|v sd|v rd|v r|}| j|j|||  |g |||||	j|d  S |}| j|j|||  |g |||||	j|d  S q7t|| td)Nr   )NasmCompilerYasmCompilerMetrowerksAsmCompilerARM$MetrowerksAsmCompilerEmbeddedPowerPCrG   r   detect_machine_infor#   r   ProgramFilesZNASM)r   r   r   r   r  r  rH   r   r   r   r   )asmr:  r;  r<  r=  ry   r   rQ   r4  r?  rt   r	   r   r   r   r   r   r   r   r   r   rf   r   r   r   r   r   )rI   rM   r:  r;  r<  r=  ri   r   r   r   r?  r   r   rj   Zdefault_pathoutputr   r   r  Zcomp_class_mwasmarmZcomp_class_mwasmeppcr`   r`   ra   r^     sP   




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   rQ   r4  r?  rt   rA  rC  rD  Z
cpu_familyr   r
   r   rf   r   r   r   r   r   r   )rI   rM   r   r   r?  r   rC  rD  rj   r  r   r   rB  r   r   r`   r`   ra   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  	rz   argsr   rB  errorr   liner4   restr`   r`   ra   r   #  s,   

r   c           	      C  rJ  )z5
    Get the list of Clang pre-processor defines
    rK  rM  r   rN  r   z<Unable to get clang pre-processor defines:
Compiler stdout:
rQ  rR  r   r  r   rS  r   rT  rW  r`   r`   ra   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`   ra   r   X  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
generationr`  ra  r`   r`   ra   r   _  s   r   )rI   rJ   rK   rL   rM   r   rN   rO   )
rI   rJ   rK   rL   rM   r   rc   rd   rN   rO   )rI   rJ   rK   rL   rM   r   rN   rl   )rz   )r{   r|   r}   r~   r   rL   rN   r   )rI   rJ   rz   r   rN   r   )
rI   rJ   rK   rL   rM   r   r   r   rN   r   )rI   rJ   rM   r   rN   r   )rI   rJ   rM   r   rN   r  )rI   rJ   rK   rL   rM   r   rN   r  )rI   rJ   rM   r   rN   r   )rz   rH  rN   rI  )r   rI  rN   rL   )K
__future__r   mesonlibr   r   r   r   r   r	   r
   r   r   Z	envconfigr   r   r   r   r   r   rU  platformr   r   r   r   typingTTYPE_CHECKINGri   r   r#   r   r'   r   r-   r   r9   r   r  r   r   r4  r   programsr   r   __annotations__r   lowerrb   rk   ry   r   r   r  rQ   rR   rT   r[   rS   rU   r  rV   rW   r]   rX   rZ   rY   r\   r^   r_   r   r   r   r   r`   r`   r`   ra   <module>   s   ,















b  
^


% 



4




u
o

/
-

