§
    »lac  ã                  ó$  — d dl mZ d dlZd dlZd dlZd dlZddlm	Z	 ddl
mZmZmZmZ ddlmZmZm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 ddl
mZ ddlmZ g g ddgddgddgddgddgdœZ G d„ de¦  «        Z  G d„ de ¦  «        Z!dS )é    )ÚannotationsNé   )Úcoredata)ÚEnvironmentExceptionÚMesonExceptionÚ
Popen_safeÚ	OptionKeyé   )ÚCompilerÚrust_buildtype_argsÚclike_debug_args)ÚMutableKeyedOptionDictTypeÚKeyedOptionDictType)ÚMachineInfo)ÚEnvironment)ÚDynamicLinker)ÚMachineChoice)ÚExternalProgramú-Czopt-level=0zopt-level=1zopt-level=2zopt-level=3zopt-level=s)ÚplainÚ0ÚgÚ1Ú2Ú3Úsc                  ó  ‡ — e Zd ZU dZdZddgg g ddgdœZded<   	 	 	 dBdCˆ fd„ZdDd„ZdEd!„Z	dFd$„Z
dGd&„ZdHd'„ZdId)„ZdJd+„ZdKd.„ZdLd0„ZedMd1„¦   «         ZdNd3„ZdOd6„ZdPd8„ZdQd:„ZdRˆ fd;„ZdRd<„ZdSd>„ZdRd?„ZdRd@„ZdRdA„Zˆ xZS )TÚRustCompilerÚrustÚrustcz-AÚwarningsz-W)r   r   r   r   zT.Dict[str, T.List[str]]Ú_WARNING_LEVELSNÚexelistúT.List[str]ÚversionÚstrÚfor_machiner   Úis_crossÚboolÚinfoú'MachineInfo'Úexe_wrapperúT.Optional['ExternalProgram']Úfull_versionúT.Optional[str]ÚlinkerúT.Optional['DynamicLinker']c	           
     ó$  •— t          ¦   «                              g |||||||¬¦  «         || _        | j                             t          d¦  «        ¦  «         d| j        j        v r)| j                             t          d¦  «        ¦  «         d S d S )N)r(   r.   r0   Ú
b_coloroutÚlinkÚb_vscrt)ÚsuperÚ__init__r,   Úbase_optionsÚaddr	   r0   Úid)
Úselfr#   r%   r'   r(   r*   r,   r.   r0   Ú	__class__s
            €ú;/usr/lib/python3/dist-packages/mesonbuild/compilers/rust.pyr7   zRustCompiler.__init__8   s�   ø€ õ
 	‰Œ×Ò˜˜W g¨{¸DØ"*¸Ø &ð 	ñ 	(ô 	(ð 	(ð 'ˆÔØÔ×Ò�i¨Ñ5Ô5Ñ6Ô6Ð6Ø�T”[”^Ð#Ð#ØÔ×!Ò!¥)¨IÑ"6Ô"6Ñ7Ô7Ð7Ð7Ð7ð $Ð#ó    Úreturnc                ó   — dS )NF© ©r;   s    r=   Úneeds_static_linkerz RustCompiler.needs_static_linkerE   s   € Øˆur>   Úwork_dirÚenvironmentú'Environment'ÚNonec                ó<  — t           j                             |d¦  «        }t           j                             |d¦  «        }t          |dd¬¦  «        5 }|                     t          j        d¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        | j	        d||gz   t          j
        t          j
        |¬¦  «        }|                     ¦   «         \  }}t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|                     dd	¬
¦  «        }	|                     dd	¬
¦  «        }
|j        dk    r6t!          d                     |                      ¦   «         |	|
¦  «        ¦  «        ‚| j        r'| j        €d S | j                             ¦   «         |gz   }n|g}t          j        |t          j        t          j        ¬¦  «        }|                     ¦   «          |j        dk    r$t!          d|                      ¦   «         z  ¦  «        ‚d S )Nz	sanity.rsÚrusttestÚwzutf-8)Úencodingz.fn main() {
                }
                ú-o)ÚstdoutÚstderrÚcwdÚreplace)Úerrorsr   z0Rust compiler {} can not compile programs.
{}
{})rM   rN   z9Executables created by Rust compiler %s are not runnable.)ÚosÚpathÚjoinÚopenÚwriteÚtextwrapÚdedentÚ
subprocessÚPopenr#   ÚPIPEÚcommunicateÚ
isinstanceÚbytesÚdecodeÚ
returncoder   ÚformatÚname_stringr(   r,   Úget_commandÚDEVNULLÚwait)r;   rD   rE   Úsource_nameÚoutput_nameÚofileÚpcÚ_stdoÚ_stdeÚstdoÚstdeÚcmdlistÚpes                r=   Úsanity_checkzRustCompiler.sanity_checkH   sB  € Ý”g—l’l 8¨[Ñ9Ô9ˆÝ”g—l’l 8¨ZÑ8Ô8ˆÝ�+˜s¨WÐ5Ñ5Ô5ð 	¸Ø�KŠK�œðñô ñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 Ô˜dœl¨d°KÀÐ-MÑMÝ%/¤_Ý%/¤_Ø"*ð,ñ ,ô ,ˆð —~’~Ñ'Ô'‰ˆˆuÝ˜%¥Ñ'Ô'Ð'Ð'Ð'Ý˜%¥Ñ'Ô'Ð'Ð'Ð'Ø�|Š|˜G¨Iˆ|Ñ6Ô6ˆØ�|Š|˜G¨Iˆ|Ñ6Ô6ˆØŒ=˜AÒÐÝ&Ð'[×'bÒ'bØ× Ò Ñ"Ô"ØØñ(ô (ñ ô ð ð Œ=ð 	$ØÔÐ'à�ØÔ&×2Ò2Ñ4Ô4¸°}ÑDˆGˆGà"�mˆGÝÔ˜g­jÔ.@ÍÔI[Ð\Ñ\Ô\ˆØ
�Š‰	Œ	ˆ	ØŒ=˜AÒÐÝ&Ð'bÐei×euÒeuÑewÔewÑ'wÑxÔxÐxð Ðs   Á(BÂBÂBÚ	outtargetÚoutfilec                ó
   — d|gS )Nz
--dep-inforA   )r;   rq   rr   s      r=   Úget_dependency_gen_argsz$RustCompiler.get_dependency_gen_argsj   s   € Ø˜gÐ&Ð&r>   Ú	buildtypec                ó   — t           |         S ©N)r   )r;   ru   s     r=   Úget_buildtype_argszRustCompiler.get_buildtype_argsm   s   € Ý" 9Ô-Ð-r>   c                ó˜   — |                       d¬¦  «        ddgz   }t          |¦  «        \  }}}|                     dd¬¦  «        d         S )	NF)Úccachez--printÚsysrootú
r
   )Úmaxsplitr   )Úget_exelistr   Úsplit)r;   ÚcmdÚprl   rm   s        r=   Úget_sysrootzRustCompiler.get_sysrootp   sN   € Ø×Ò eÐÑ,Ô,°	¸9Ð/EÑEˆÝ" 3™œ‰ˆˆ4�Ø�zŠz˜$¨ˆzÑ+Ô+¨AÔ.Ð.r>   Úis_debugc                ó   — t           |         S rw   )r   )r;   rƒ   s     r=   Úget_debug_argszRustCompiler.get_debug_argsu   s   € Ý Ô)Ð)r>   Úoptimization_levelc                ó   — t           |         S rw   )Úrust_optimization_args)r;   r†   s     r=   Úget_optimization_argsz"RustCompiler.get_optimization_argsx   s   € Ý%Ð&8Ô9Ð9r>   Úparameter_listÚ	build_dirc                óH  — t          |¦  «        D ]‘\  }}|d d…         dk    r~dD ]{}t          |¦  «        dz   }|d |…         d|› d�k    rU|d |…         t          j                             t          j                             |||d …         ¦  «        ¦  «        z   ||<    nŒ|Œ’|S )Nr   z-L)Ú
dependencyÚcrateÚnativeÚ	frameworkÚallé   ú=)Ú	enumerateÚlenrR   rS   ÚnormpathrT   )r;   rŠ   r‹   ÚidxÚiÚjÚcombined_lens          r=   Ú&compute_parameters_with_absolute_pathsz3RustCompiler.compute_parameters_with_absolute_paths{   sÅ   € å Ñ/Ô/ð 	ð 	‰FˆC�Ø��!�Œu˜Š}ˆ}ØNð ð �AÝ#& q¡6¤6¨A¡:�LØ˜˜,˜Ô'¨9°¨9¨9¨9Ò4Ð4Ø./°°°Ô.>ÅÄ×AQÒAQÕRTÔRY×R^ÒR^Ð_hÐjkÐlxÐlyÐlyÔjzÑR{ÔR{ÑA|ÔA|Ñ.|˜ sÑ+Ø˜ð 5øð Ðr>   Ú
outputnamec                ó
   — d|gS )NrL   rA   )r;   rœ   s     r=   Úget_output_argszRustCompiler.get_output_args‡   s   € Ø�jÐ!Ð!r>   c                ó   — dd|› �gS )Nr   zlinker=rA   )Úclsr0   r%   s      r=   Úuse_linker_argszRustCompiler.use_linker_argsŠ   s   € àÐ( Ð(Ð(Ð)Ð)r>   ú'MutableKeyedOptionDictType'c                ón   — t          d| j        | j        ¬¦  «        }|t          j        dg d¢d¦  «        iS )NÚstd©ÚmachineÚlangzRust edition to use)ÚnoneÚ2015Ú2018Ú2021r¨   )r	   r'   Úlanguager   ÚUserComboOption)r;   Úkeys     r=   Úget_optionszRustCompiler.get_options’   sF   € Ý˜ tÔ'7¸d¼mÐLÑLÔLˆà•Ô)Ø%Ø0Ð0Ð0Øñô ð
ð 	
r>   Úoptionsú'KeyedOptionDictType'c                ó¢   — g }t          d| j        | j        ¬¦  «        }||         }|j        dk    r|                     d|j        z   ¦  «         |S )Nr¤   r¥   r¨   z
--edition=)r	   r'   r¬   ÚvalueÚappend)r;   r°   Úargsr®   r¤   s        r=   Úget_option_compile_argsz$RustCompiler.get_option_compile_argsœ   sT   € ØˆÝ˜ tÔ'7¸d¼mÐLÑLÔLˆØ�cŒlˆØŒ9˜ÒÐØ�KŠK˜ s¤yÑ0Ñ1Ô1Ð1Øˆr>   Úcrt_valc                ó   — g S rw   rA   )r;   r·   ru   s      r=   Úget_crt_compile_argsz!RustCompiler.get_crt_compile_args¤   s   € àˆ	r>   Ú	colortypec                ó:   — |dv rd|› �gS t          d|› �¦  «        ‚)N>   ÚautoÚneverÚalwaysz--color=zInvalid color type for rust )r   )r;   rº   s     r=   Úget_colorout_argszRustCompiler.get_colorout_args¨   s6   € ØÐ3Ð3Ð3Ø*˜yÐ*Ð*Ð+Ð+ÝÐG¸IÐGÐGÑHÔHÐHr>   c                ó†   •— g }t          ¦   «                              ¦   «         D ]}|                     dd|› �g¦  «         Œ|S )Nr   z	link-arg=)r6   Úget_linker_always_argsÚextend)r;   rµ   Úar<   s      €r=   rÁ   z#RustCompiler.get_linker_always_args­   sL   ø€ ØˆÝ‘”×/Ò/Ñ1Ô1ð 	1ð 	1ˆAØ�KŠK˜˜¨1˜˜Ð/Ñ0Ô0Ð0Ð0Øˆr>   c                ó
   — ddgS )Nz-Dr!   rA   rB   s    r=   Úget_werror_argszRustCompiler.get_werror_args³   s   € ð �jÐ!Ð!r>   Úlevelc                ó   — | j         |         S rw   ©r"   )r;   rÆ   s     r=   Úget_warn_argszRustCompiler.get_warn_args¸   s   € àÔ# EÔ*Ð*r>   c                ó   — | j         d         S )Nr   rÈ   rB   s    r=   Úget_no_warn_argszRustCompiler.get_no_warn_args¼   s   € ØÔ# CÔ(Ð(r>   c                ó
   — ddgS )Nr   zrelocation-model=picrA   rB   s    r=   Úget_pic_argszRustCompiler.get_pic_args¿   s   € àÐ,Ð-Ð-r>   c                ó   — g S rw   rA   rB   s    r=   Úget_pie_argszRustCompiler.get_pie_argsÃ   s	   € ð ˆ	r>   )NNN)r#   r$   r%   r&   r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   )r?   r)   )rD   r&   rE   rF   r?   rG   )rq   r&   rr   r&   r?   r$   )ru   r&   r?   r$   )r?   r&   )rƒ   r)   r?   r$   )r†   r&   r?   r$   )rŠ   r$   r‹   r&   r?   r$   )rœ   r&   r?   r$   )r0   r&   r%   r&   r?   r$   )r?   r¢   )r°   r±   r?   r$   )r·   r&   ru   r&   r?   r$   )rº   r&   r?   r$   )r?   r$   )rÆ   r&   r?   r$   )Ú__name__Ú
__module__Ú__qualname__r¬   r:   r"   Ú__annotations__r7   rC   rp   rt   rx   r‚   r…   r‰   r›   rž   Úclassmethodr¡   r¯   r¶   r¹   r¿   rÁ   rÅ   rÉ   rË   rÍ   rÏ   Ú__classcell__)r<   s   @r=   r   r   +   sC  ø€ € € € € € ð €HØ	€Bð �JÐØØØ�JÐð	1ð 1€Oð ð ð ñ ð ?CØ15Ø7;ð	8ð 8ð 8ð 8ð 8ð 8ð 8ðð ð ð ð yð  yð  yð  yðD'ð 'ð 'ð 'ð.ð .ð .ð .ð/ð /ð /ð /ð
*ð *ð *ð *ð:ð :ð :ð :ð
ð 
ð 
ð 
ð"ð "ð "ð "ð ð*ð *ð *ñ „[ð*ð
ð 
ð 
ð 
ðð ð ð ðð ð ð ðIð Ið Ið Ið
ð ð ð ð ð ð"ð "ð "ð "ð
+ð +ð +ð +ð)ð )ð )ð )ð.ð .ð .ð .ðð ð ð ð ð ð ð r>   r   c                  ó   — e Zd ZdZdZdS )ÚClippyRustCompilerzSClippy is a linter that wraps Rustc.

    This just provides us a different id
    zclippy-driver rustcN)rÐ   rÑ   rÒ   Ú__doc__r:   rA   r>   r=   r×   r×   É   s   € € € € € ðð ð
 
€B€B€Br>   r×   )"Ú
__future__r   rY   Úos.pathrR   rW   ÚtypingÚTÚ r   Úmesonlibr   r   r   r	   Ú	compilersr   r   r   ÚTYPE_CHECKINGr   r   Ú	envconfigr   rE   r   Úlinkersr   r   Úprogramsr   rˆ   r   r×   rA   r>   r=   ú<module>rä      sº  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà„?ð +ØJÐJÐJÐJÐJÐJÐJÐJØ'Ð'Ð'Ð'Ð'Ð'Ø)Ð)Ð)Ð)Ð)Ð)Ø'Ð'Ð'Ð'Ð'Ð'Ø(Ð(Ð(Ð(Ð(Ð(Ø*Ð*Ð*Ð*Ð*Ð*ð Ø	Ø
�Ð	Ø
�Ð	Ø
�Ð	Ø
�Ð	Ø
�Ð	ðð Ð ð[ð [ð [ð [ð [�8ñ [ô [ð [ð|ð ð ð ð ˜ñ ô ð ð ð r>   