o
    uJAf ©  ã                   @  sh  U d dl 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	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mZmZmZmZmZ ddlmZmZmZmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ej'rddl(m)Z) ddlm*Z*m+Z+ ddlm,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddlm3Z3 d dl4m5Z5m6Z6 G dd„ de5ƒZ7G dd„ de5ƒZ8G dd„ de5ƒZ9G dd„ de9ƒZ:G d d!„ d!e9ƒZ;G d"d#„ d#e;ƒZ<G d$d%„ d%e;e/ƒZ=G d&d'„ d'e;e/ƒZ>G d(d)„ d)e/ƒZ?G d*d+„ d+e/e0ƒZ@G d,d-„ d-e5ƒZAG d.d/„ d/ejBƒZCG d0d1„ d1ed2 ƒZDed3eeEeFƒd4g d5ZGd6eHd7< ed8eeEejIƒd4g d5ZJd9eHd:< ed;eeEe
jKƒg d4d<ZLd=eHd>< ed?eFeeEeFƒfd@eEdAidBdC„ dDZMdEeHdF< edGeNdHdIZOedJeFd@dIZPedKeNdHdLdMZQeGeJeLeMeOgZRdNeHdO< ePeGeJeLeOeQgZSdNeHdP< e$jTdQdHdRgeR¢ZUdNeHdS< e$jTdLdHdRZVG dTdU„ dUedV ƒZWdS )Wé    )ÚannotationsNé   )Úbuild)Úcoredata)Údependencies)Úmesonlib)Úmlog)ÚSUFFIX_TO_LANG)ÚCompileCheckMode)ÚObjectHolderÚ	noPosargsÚnoKwargsÚ
FeatureNewÚdisablerIfNotFoundÚInterpreterException)ÚContainerTypeInfoÚtyped_kwargsÚ	KwargInfoÚtyped_pos_args)Ú	OptionKeyé   )Úextract_required_kwargÚextract_search_dirs)ÚREQUIRED_KWÚin_set_validatorÚNoneType)ÚInterpreter)ÚCompilerÚ	RunResult)ÚTYPE_varÚTYPE_kwargs)ÚExtractRequiredÚExtractSearchDirs)ÚSourceOutputs)ÚTV_LoggableList)Ú	TypedDictÚLiteralc                   @  s   e Zd ZU ded< dS )ÚGetSupportedArgumentKwz!Literal['warn', 'require', 'off']ÚcheckedN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r.   r.   úD/usr/lib/python3.10/site-packages/mesonbuild/interpreter/compiler.pyr'   &   s   
 r'   c                   @  ó&   e Zd ZU ded< ded< ded< dS )ÚAlignmentKwÚstrÚprefixúT.List[str]ÚargsúT.List[dependencies.Dependency]r   Nr)   r.   r.   r.   r/   r1   *   ó   
 r1   c                   @  r0   )ÚBaseCompileKWÚboolÚno_builtin_argsúT.List[build.IncludeDirs]Úinclude_directoriesr4   r5   Nr)   r.   r.   r.   r/   r8   0   s   
 r8   c                   @  r0   )Ú	CompileKWr2   Únamer6   r   r9   ÚwerrorNr)   r.   r.   r.   r/   r=   5   r7   r=   c                   @  s   e Zd ZU ded< ded< dS )ÚCommonKWr2   r3   r6   r   Nr)   r.   r.   r.   r/   r@   ;   s   
 r@   c                   @  s&   e Zd ZU ded< ded< ded< dS )ÚComputeIntKWzT.Optional[int]ÚguessÚhighÚlowNr)   r.   r.   r.   r/   rA   @   r7   rA   c                   @  ó   e Zd ZdS )ÚHeaderKWN©r*   r+   r,   r.   r.   r.   r/   rF   F   ó    rF   c                   @  rE   )ÚHasKWNrG   r.   r.   r.   r/   rI   I   rH   rI   c                   @  rE   )ÚHasArgumentKWNrG   r.   r.   r.   r/   rJ   L   rH   rJ   c                   @  sV   e Zd ZU ded< ded< ded< ded< ded< d	ed
< ded< ded< ded< dS )ÚFindLibraryKWr9   Údisablerr4   Úhas_headersÚstaticÚheader_argsr6   Úheader_dependenciesr;   Úheader_include_directoriesÚheader_no_builtin_argsr2   Úheader_prefixz)T.Union[bool, coredata.UserFeatureOption]Zheader_requiredNr)   r.   r.   r.   r/   rK   O   s   
 rK   c                   @  s.   e Zd ZU ded< ded< ded< ded< d	S )
ÚPreprocessKWr2   Úoutputr4   Úcompile_argsr;   r<   r6   r   Nr)   r.   r.   r.   r/   rT   ^   s
   
 rT   c                   @  s   e Zd ZdZdZdZdS )Ú	_TestModez/Whether we're doing a compiler or linker check.r   r   N)r*   r+   r,   Ú__doc__ÚCOMPILERÚLINKERr.   r.   r.   r/   rW   e   s    rW   c                      sf   e Zd Zd‡ fdd„Zeeddd„ƒƒZeeddd„ƒƒZeeddd„ƒƒZeeddd„ƒƒZ	‡  Z
S )ÚTryRunResultHolderÚresú'RunResult'Úinterpreterú'Interpreter'c                   s0   t ƒ  ||¡ | j | j| j| j| jdœ¡ d S )N)Ú
returncodeÚcompiledÚstdoutÚstderr)ÚsuperÚ__init__ÚmethodsÚupdateÚreturncode_methodÚcompiled_methodÚstdout_methodÚstderr_method)Úselfr\   r^   ©Ú	__class__r.   r/   re   n   s   
ýzTryRunResultHolder.__init__r5   úT.List['TYPE_var']Úkwargsú'TYPE_kwargs'ÚreturnÚintc                 C  ó   | j jS ©N)Úheld_objectr`   ©rl   r5   rp   r.   r.   r/   rh   v   ó   z$TryRunResultHolder.returncode_methodr9   c                 C  rt   ru   )rv   ra   rw   r.   r.   r/   ri   {   rx   z"TryRunResultHolder.compiled_methodr2   c                 C  rt   ru   )rv   rb   rw   r.   r.   r/   rj   €   rx   z TryRunResultHolder.stdout_methodc                 C  rt   ru   )rv   rc   rw   r.   r.   r/   rk   …   rx   z TryRunResultHolder.stderr_method)r\   r]   r^   r_   )r5   ro   rp   rq   rr   rs   ©r5   ro   rp   rq   rr   r9   ©r5   ro   rp   rq   rr   r2   )r*   r+   r,   re   r   r   rh   ri   rj   rk   Ú__classcell__r.   r.   rm   r/   r[   m   s    r[   r   r5   T©ÚlistifyÚdefaultzKwargInfo[T.List[str]]Ú_ARGS_KWr   z,KwargInfo[T.List['dependencies.Dependency']]Ú_DEPENDENCIES_KWr<   )r~   r}   z$KwargInfo[T.List[build.IncludeDirs]]Ú_INCLUDE_DIRS_KWr3   Ú z1.0.0c                 C  s   t | tƒr
d | ¡S | S )NÚ
)Ú
isinstanceÚlistÚjoin)Úxr.   r.   r/   Ú<lambda>¢   ó    rˆ   )r~   Úsince_valuesÚ	convertorzKwargInfo[str]Ú
_PREFIX_KWr:   F©r~   r>   r?   ú1.3.0©r~   ÚsincezT.List[KwargInfo]Ú_COMMON_KWSÚ_COMPILES_KWSú0.50.0)r   r~   Ú_HEADER_KWSc                      s   e Zd ZU e ej¡Zded< dÏ‡ fdd„Z	e
dÐd
d„ƒZdÑdd„ZeedÒdd„ƒƒZeedÓdd„ƒƒZejfdÔd d!„ZdÕdÖd%d&„Zed'eƒed'eeeƒd×d+d,„ƒƒZed-eejfƒed-ge¢R Ž dØd1d2„ƒƒZeedÒd3d4„ƒƒZ eee!d5d6ƒdÒd7d8„ƒƒƒZ"eedÙd9d:„ƒƒZ#ed;eeƒed;e$ge%¢R Ž dÚd>d?„ƒƒZ&ed@eedAdBed@e$ge%¢R Ž dÛdDdE„ƒƒZ'edFeƒedFe$ge%¢R Ž dÜdGdH„ƒƒZ(edIeƒedIe$ge%¢R Ž dÜdJdK„ƒƒZ)e!dLdMƒedLeƒedLe*dNe+e,fƒe*dOe+e,fƒe*dPe+e,fƒge%¢R Ž dÝdRdS„ƒƒƒZ-edTeƒedTge%¢R Ž dÞdVdW„ƒƒZ.e!dXdMƒedXeƒedXge%¢R Ž dßdYdZ„ƒƒƒZ/e!d[d\ƒed[eƒed[ge%¢R Ž dàd]d^„ƒƒƒZ0ed_eejfƒed_ge¢R Ž dád`da„ƒƒZ1edbeejfƒedbge¢R Ž dádcdd„ƒƒZ2e!dedfƒedeeƒedege3¢R Ž dâdhdi„ƒƒƒZ4dãdkdl„Z5edmeƒedmge3¢R Ž dâdndo„ƒƒZ6edpeeƒedpge3¢R Ž dädqdr„ƒƒZ7dådudv„Z8e9edweƒedwe*dxe:e;j<fdydze*d{e=e>eƒdyg d|d}e*d~e:e,fdd€e*de:d"d‚dƒe*d„e=e>eƒdyg d…gd†d‡„ e3D ƒ¢R Ž dæd‰dŠ„ƒƒƒZ?e@jAd‹fdçdd‘„ZBed’eƒed’e$ƒdèd”d•„ƒƒZCed–ed—ed–e$ƒe!d–d˜ƒdédšd›„ƒƒƒZDe!dœdƒedœed—edœe*džedŸd eEh d¡£ƒd¢ƒdêd¤d¥„ƒƒƒZFeed¦ed—dëd§d¨„ƒƒZGe!d©dªƒed©eƒed©e$ƒdèd«d¬„ƒƒƒZHe!d­dªƒed­ed—ed­e$ƒdéd®d¯„ƒƒƒZIe!d°dªƒeed°ed—dëd±d²„ƒƒƒZJe!d³dªƒeed´ed—dëdµd¶„ƒƒƒZKdìdíd¸d¹„ZLe!dºd»ƒedºeƒedºe$ƒdèd¼d½„ƒƒƒZMe!d¾d»ƒeed¾ed—dëd¿dÀ„ƒƒƒZNe!dÁd‚ƒeedÒdÂdÃ„ƒƒƒZOe!dÄdÅƒedÄeejePjQePjRePjSfdAdBedÄe*dÆedÇdze*dÈe=e>eƒdyg d…eTejUdÉd€ƒdîdÍdÎ„ƒƒƒZV‡  ZWS )ïÚCompilerHolderzT.Dict[str, itertools.count]Úpreprocess_uidÚcompilerú
'Compiler'r^   r_   c                   s2  t ƒ  ||¡ | j| _| j i d| j“d| j“d| j“d| j	“d| j
“d| j“d| j“d| j“d	| j“d
| j“d| j“d| j“d| j“d| j“d| j“d| j“d| j“i d| j“d| j“d| j“d| j“d| j“d| j“d| j“d| j“d| j“d| j “d| j!“d| j"“d| j#“d| j$“d | j%“d!| j&“¥¡ d S )"NÚcompilesÚlinksÚget_idÚget_linker_idÚcompute_intÚsizeofÚ
get_defineZ
has_defineÚcheck_headerÚ
has_headerÚhas_header_symbolÚrunÚhas_functionZ
has_memberÚhas_membersÚhas_typeÚ	alignmentÚversionZ	cmd_arrayÚfind_libraryZhas_argumentZhas_function_attributeZ!get_supported_function_attributesÚhas_multi_argumentsZget_supported_argumentsZfirst_supported_argumentZhas_link_argumentÚhas_multi_link_argumentsZget_supported_link_argumentsZfirst_supported_link_argumentÚsymbols_have_underscore_prefixÚget_argument_syntaxÚ
preprocess)'rd   re   ÚenvÚenvironmentrf   rg   Úcompiles_methodÚlinks_methodÚget_id_methodÚget_linker_id_methodÚcompute_int_methodÚsizeof_methodÚget_define_methodÚhas_define_methodÚcheck_header_methodÚhas_header_methodÚhas_header_symbol_methodÚ
run_methodÚhas_function_methodÚhas_member_methodÚhas_members_methodÚhas_type_methodÚalignment_methodÚversion_methodÚcmd_array_methodÚfind_library_methodÚhas_argument_methodÚhas_func_attribute_methodÚ(get_supported_function_attributes_methodÚhas_multi_arguments_methodÚget_supported_arguments_methodÚfirst_supported_argument_methodÚhas_link_argument_methodÚhas_multi_link_arguments_methodÚ#get_supported_link_arguments_methodÚ$first_supported_link_argument_methodÚ%symbols_have_underscore_prefix_methodÚget_argument_syntax_methodÚpreprocess_method)rl   r—   r^   rm   r.   r/   re   ¶   s†   ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá àzCompilerHolder.__init__rr   c                 C  s   | j S ru   )rv   ©rl   r.   r.   r/   r—   Ü   s   zCompilerHolder.compilerÚdepsú!T.List['dependencies.Dependency']Úcompile_onlyr9   Úendlr2   c           
      C  s¤   d}d}g }|D ]+}t |tjƒrtjdd| j| jd qt |tjƒr+|r%qd|j }n|j}| 	|¡ q|s8|S t
|ƒdkr@|n|}	|d u rHd}|	 d	 |¡¡| S )
Nzwith dependency {}zwith dependencies {}z6compiler method "dependencies" kwarg with internal depz0.57.0©Úlocationz-lr   r‚   ú, )r„   r   ÚInternalDependencyr   Ú
single_useÚ
subprojectÚcurrent_nodeÚExternalLibraryr>   ÚappendÚlenÚformatr†   )
rl   rÓ   rÕ   rÖ   Z
msg_singleZmsg_manyÚnamesÚdr>   Ztplr.   r.   r/   Ú_dep_msgà   s*   ÿzCompilerHolder._dep_msgr5   ro   rp   rq   c                 C  rt   ru   )r—   r¨   rw   r.   r.   r/   rÂ   ÷   rx   zCompilerHolder.version_methodr4   c                 C  rt   ru   )r—   Úexelistrw   r.   r.   r/   rÃ   ü   rx   zCompilerHolder.cmd_array_methodr8   Úmoder
   c                 C  sº   g }|d D ]}|  | j ¡ | j ¡ ¡D ]}| | j |d¡¡ qq|d sFt | jjj	| j
¡}|| j |¡7 }|tju rF| | j |¡¡ | dd¡rT| | j ¡ ¡ | |d ¡ |S )Nr<   Fr:   r?   r5   )Úto_string_listr°   Úget_source_dirÚget_build_dirÚextendr—   Úget_include_argsr   ÚOptionsViewÚoptionsrÜ   Úget_option_compile_argsr
   ÚLINKÚget_option_link_argsÚgetÚget_werror_args)rl   rp   ræ   r5   ÚiÚidirÚoptsr.   r.   r/   Ú_determine_args  s   ÿ
zCompilerHolder._determine_argsFú:ú/T.Tuple[T.List['dependencies.Dependency'], str]c                 C  s   t  |¡}||  |||¡fS ru   )r   Úget_leaf_external_dependenciesrä   )rl   rÓ   rÕ   rÖ   r.   r.   r/   Ú_determine_dependencies  s   
z&CompilerHolder._determine_dependencieszcompiler.alignmentúT.Tuple[str]ú'AlignmentKw'rs   c           	   	   C  s€   |d }| j |d | jjd\}}| jj||d | j|d |d\}}|r*t d¡nd}t d	t |d
¡|t t	|ƒ¡|¡ |S )Nr   r   ©rÕ   r3   r5   ©Ú
extra_argsr   ú(cached)r‚   zChecking for alignment ofT)
rú   r—   Úis_crossr§   r°   r   ÚblueÚlogÚboldr2   )	rl   r5   rp   ÚtypenamerÓ   ÚmsgÚresultÚcachedÚ
cached_msgr.   r.   r/   rÁ     s   
þÿzCompilerHolder.alignment_methodzcompiler.runú T.Tuple['mesonlib.FileOrString']ú'CompileKW'r]   c           
      C  sØ   |d }t |tjƒr| j |¡ tj | | jj¡¡}|d }t	 
| j|¡}| j|d dd d\}}| jj|| j||d}|rj|jsHt d¡}	n|jdkrSt d¡}	n
t d	|j› d
¡}	t dt |d¡|d|	¡ |S )Nr   r>   r   F)rÕ   rÖ   rþ   zDID NOT COMPILEÚYESzNO (ú)úChecking ifTzruns:)r„   r   ÚFiler^   Úadd_build_def_fileÚfrom_absolute_fileÚrel_to_builddirr°   Ú
source_dirÚ	functoolsÚpartialrö   rú   r—   r£   ra   r   Úredr`   Úgreenr  r  )
rl   r5   rp   ÚcodeÚtestnamerÿ   rÓ   r  r  Úhr.   r.   r/   r¼   '  s(   ÿÿ
zCompilerHolder.run_methodc                 C  ó
   | j  ¡ S ru   )r—   r›   rw   r.   r.   r/   r³   >  s   
zCompilerHolder.get_id_methodzcompiler.get_linker_idz0.53.0c                 C  r  ru   )r—   rœ   rw   r.   r.   r/   r´   C  ó   
z#CompilerHolder.get_linker_id_methodc                 C  s   | j  | j¡S )zŽ
        Check if the compiler prefixes _ (underscore) to global C symbols
        See: https://en.wikipedia.org/wiki/Name_mangling#C
        )r—   r¬   r°   rw   r.   r.   r/   rÏ   I  s   z4CompilerHolder.symbols_have_underscore_prefix_methodzcompiler.has_memberúT.Tuple[str, str]ú'HasKW'c              
   C  s  |\}}t || jdd\}}}|r)t dt |d¡dt |d¡dt |¡d¡ dS t | j|¡}|  |d ¡\}	}
| j	j
||g|d	 | j||	d
\}}|rRt d¡nd}|rh|sht| j	 ¡ › d|›d|›dƒ‚|rpt d¡}nt d¡}t dt |d¡dt |d¡|
||¡ |S )NFr   ÚTypeTz
has memberúskipped: featureÚdisabledr   r3   rþ   r   r‚   z member ú	 of type ú not usabler  ÚNOúChecking whether type)r   rÜ   r   r  r  r  r  rö   rú   r—   r¥   r°   r  r   Úget_display_languager  r  )rl   r5   rp   r  Z
membernamer!  ÚrequiredÚfeaturerÿ   rÓ   r  Úhadr  r	  Úhadtxtr.   r.   r/   r¾   R  s,   ,
ý 
ÿz CompilerHolder.has_member_methodzcompiler.has_membersr   )ÚvarargsÚmin_varargsúT.Tuple[str, T.List[str]]c              
   C  s  |\}}t  d dd„ |D ƒ¡¡}t|| jdd\}}}|r2t  dt  |d¡d|d	t  |¡d
¡ dS t | j|¡}	|  	|d ¡\}
}| j
j|||d | j|	|
d\}}|rZt  d¡nd}|rp|spt| j
 ¡ › d|›d|›dƒ‚|rxt  d¡}nt  d¡}t  dt  |d¡d||||¡ |S )NrÙ   c                 S  s   g | ]}d |› d ‘qS )ú"r.   )Ú.0Úmr.   r.   r/   Ú
<listcomp>o  r‰   z5CompilerHolder.has_members_method.<locals>.<listcomp>Fr   r  Tzhas membersr   r!  r   r3   rþ   r   r‚   z	 members r"  r#  r  r$  r%  )r   r  r†   r   rÜ   r  r  r  rö   rú   r—   r¥   r°   r  r   r&  r  r  )rl   r5   rp   r  ÚmembernamesÚmembersr!  r'  r(  rÿ   rÓ   r  r)  r  r	  r*  r.   r.   r/   r¿   k  s.   $
ý 

ÿz!CompilerHolder.has_members_methodzcompiler.has_functionc                 C  sò   |d }t || jdd\}}}|r#t dt |d¡dt |¡d¡ dS |  |¡}| j|d dd	\}}	| jj||d
 | j	||d\}
}|rJt 
d¡nd}|r]|
s]t| j ¡ › d|›dƒ‚|
ret d¡}nt d¡}t dt |d¡|	||¡ |
S )Nr   Fr   zHas functionTr   r!  r   rý   r3   rþ   r   r‚   z
 function r#  r  r$  zChecking for function)r   rÜ   r   r  r  rö   rú   r—   r¤   r°   r  r   r&  r  r  )rl   r5   rp   Úfuncnamer!  r'  r(  rÿ   rÓ   r  r)  r  r	  r*  r.   r.   r/   r½   †  s&    

þ
z"CompilerHolder.has_function_methodzcompiler.has_typec                 C  sò   |d }t || jdd\}}}|r#t dt |d¡dt |¡d¡ dS t | j|¡}|  |d ¡\}}	| j	j
||d	 | j||d
\}
}|rJt d¡nd}|r]|
s]t| j	 ¡ › d|›dƒ‚|
ret d¡}nt d¡}t dt |d¡|	||¡ |
S )Nr   Fr   zHas typeTr   r!  r   r3   rþ   r   r‚   z type r#  r  r$  zChecking for type)r   rÜ   r   r  r  r  r  rö   rú   r—   r¦   r°   r  r   r&  r  r  )rl   r5   rp   r  r!  r'  r(  rÿ   rÓ   r  r)  r  r	  r*  r.   r.   r/   rÀ     s$    
ÿ
zCompilerHolder.has_type_methodzcompiler.compute_intz0.40.0rD   rC   rB   ú'ComputeIntKW'c              
   C  sz   |d }t  | j|¡}| j|d | jjd\}}| jj||d |d |d |d | j||d}t 	d	t 
|d
¡||¡ |S )Nr   r   rý   rD   rC   rB   r3   rþ   zComputing int ofT)r  r  rö   rú   r—   r  r   r°   r   r  r  )rl   r5   rp   Ú
expressionrÿ   rÓ   r  r\   r.   r.   r/   rµ   ³  s   
ýz!CompilerHolder.compute_int_methodzcompiler.sizeofú
'CommonKW'c           
   	   C  sŠ   |d }t  | j|¡}| j|d | jjd\}}| jj||d | j||d\}}|r/t 	d¡nd}	t 
dt |d	¡|t t|ƒ¡|	¡ |S )
Nr   r   rý   r3   rþ   r   r‚   zChecking for size ofT)r  r  rö   rú   r—   r  rž   r°   r   r  r  r  r2   )
rl   r5   rp   Úelementrÿ   rÓ   r  Zesizer  r	  r.   r.   r/   r¶   Ç  s   
ÿÿzCompilerHolder.sizeof_methodzcompiler.get_definec                 C  s”   |d }t  | j|¡}|  |d ¡\}}| jj||d | j||d\}}|r+t d¡nd}	|d u r3dn|}
t 	dt 
|d	¡||
|	¡ |d urH|S dS )
Nr   r   r3   rþ   r   r‚   z(undefined)zFetching value of defineT)r  r  rö   rú   r—   rŸ   r°   r   r  r  r  )rl   r5   rp   r8  rÿ   rÓ   r  Úvaluer  r	  Z	value_msgr.   r.   r/   r·   Ô  s   
þz CompilerHolder.get_define_methodzcompiler.has_definerŽ   c                 C  sž   |d }t  | j|¡}| j|d d d\}}| jj||d | j||d\}}|r-t d¡nd}	|d ur8t 	d¡nt 
d	¡}
t d
t |d¡|d|
|	¡ |d uS )Nr   r   ©rÖ   r3   rþ   r   r‚   r  r$  zChecking if defineTzexists:)r  r  rö   rú   r—   rŸ   r°   r   r  r  r  r  r  )rl   r5   rp   Zdefine_namerÿ   rÓ   r  r9  r  r	  r  r.   r.   r/   r¸   ã  s   
þz CompilerHolder.has_define_methodzcompiler.compilesc                 C  sî   |d }t |tjƒr,|jrt dd| jd| j¡ | j 	|¡ tj 
| | jj| jj¡¡}|d }t | j|¡}| j|d d d\}}| jj|| j||d\}}	|ru|rYt d	¡}
nt d
¡}
|	ret d¡nd}t dt |d¡|d|
|¡ |S )Nr   z1compiler.compiles with file created at setup timeú1.2.0ú3It was broken and either errored or returned false.r>   r   r:  rþ   r  r$  r   r‚   r  Tz	compiles:)r„   r   r  Úis_builtr   rÛ   rÜ   rÝ   r^   r  r  Úabsolute_pathr°   r  Ú	build_dirr  r  rö   rú   r—   r™   r   r  r  r  r  r  )rl   r5   rp   r  r  rÿ   rÓ   r  r  r  r  r	  r.   r.   r/   r±   ó  s0   ÿÿ
þ
zCompilerHolder.compiles_methodzcompiler.linksc                 C  sp  |d }d }t |tjƒrl|jrt dd| jd| j¡ | j 	|¡ tj 
| | jj| jj¡¡}|j}|| jjvrl| jj}| jjj| }|tvrOt d|› ¡ nt| |vrft dt| › d| ¡ › d¡ n|t|  }|d	 }t | j|¡}	| j|d
 dd\}
}| jj|| j||	|
d\}}|r—t d¡nd}|r¶|r£t d¡}nt  d¡}t !dt "|d¡|d||¡ |S )Nr   z.compiler.links with file created at setup timer;  r<  zUnknown suffix for test file zPassed z+ source to links method, not specified for z	 machine.r>   r   Frý   )r—   rÿ   r   r   r‚   r  r$  r  Tzlinks:)#r„   r   r  r=  r   rÛ   rÜ   rÝ   r^   r  r  r>  r°   r  r?  Úsuffixr—   Úfile_suffixesÚfor_machiner   Ú	compilersr	   r   ÚwarningÚget_lower_case_namer  r  rö   rú   rš   r  r  r  r  r  )rl   r5   rp   r  r—   r@  rB  Zclistr  rÿ   rÓ   r  r  r  r	  r  r.   r.   r/   r²     sF   ÿÿ"
ý
zCompilerHolder.links_methodzcompiler.check_headerz0.47.0ú
'HeaderKW'c                 C  sò   |d }t || jdd\}}}|r#t dt |d¡dt |¡d¡ dS t | j|¡}|  |d ¡\}}	| j	j
||d	 | j||d
\}
}|rJt d¡nd}|r]|
s]t| j	 ¡ › d|›dƒ‚|
ret d¡}nt d¡}t dt |d¡|	||¡ |
S )Nr   Fr   zCheck usable headerTr   r!  r   r3   rþ   r   r‚   ú header r#  r  r$  )r   rÜ   r   r  r  r  r  rö   rú   r—   r    r°   r  r   r&  r  r  )rl   r5   rp   Úhnamer!  r'  r(  rÿ   rÓ   r  Úhazr  r	  r  r.   r.   r/   r¹   5  s&    
þ
z"CompilerHolder.check_header_methodrH  c                 C  sê   t || jdd\}}}|rt dt |d¡dt |¡d¡ dS t | j|¡}|  |d ¡\}}| j	j
||d | j||d	\}	}
|
rFt d
¡nd}|rY|	sYt| j	 ¡ › d|›dƒ‚|	rat d¡}nt d¡}t dt |d¡|||¡ |	S )NFr   z
Has headerTr   r!  r   r3   rþ   r   r‚   rG  z
 not foundr  r$  )r   rÜ   r   r  r  r  r  rö   rú   r—   r¡   r°   r  r   r&  r  r  )rl   rH  rp   r!  r'  r(  rÿ   rÓ   r  rI  r  r	  r  r.   r.   r/   Ú_has_header_implM  s"    
ÿ
zCompilerHolder._has_header_implzcompiler.has_headerc                 C  ó   |   |d |¡S ©Nr   )rJ  rw   r.   r.   r/   rº   `  s   z CompilerHolder.has_header_methodzcompiler.has_header_symbolc              
   C  s  |\}}t || jdd\}}}|r)t dt |d¡dt |d¡dt |¡d¡ dS t | j|¡}|  |d ¡\}	}
| j	j
|||d	 | j||	d
\}}|r]|s]t| j	 ¡ › d|› d|› ƒ‚|ret d¡}nt d¡}|rqt d¡nd}t dt |d¡dt |d¡|
||¡ |S )NFr   ÚHeaderTz
has symbolr   r!  r   r3   rþ   z symbol z not found in header r  r$  r   r‚   )r   rÜ   r   r  r  r  r  rö   rú   r—   r¢   r°   r   r&  r  r  r  )rl   r5   rp   rH  Úsymbolr!  r'  r(  rÿ   rÓ   r  rI  r  r  r	  r.   r.   r/   r»   e  s&   ,
þ
&z'CompilerHolder.has_header_symbol_methodÚlibnameú'dependencies.ExternalLibrary'c                 C  s   t j|d | j| jjdd}|S )NT)Úsilent)r   rÞ   r°   r—   Úlanguage)rl   rO  Úlibr.   r.   r/   Únotfound_library|  s   ýzCompilerHolder.notfound_libraryzcompiler.find_libraryr'  Tr   rM   r“   )r}   r~   r   rN   z0.51.0)r   rL   z0.49.0r   Údirsr|   c                 c  s$    | ]}|j d |j› dV  qdS )Zheader_)r>   N)Úevolver>   )r/  Úkr.   r.   r/   Ú	<genexpr>Œ  s   €" zCompilerHolder.<genexpr>ú'FindLibraryKW'c                 C  sZ  |d }t || jƒ\}}}|r#t dt |¡dt |¡d¡ |  |¡S ||d |d |d |d |d	 d
œ}|d D ]}|  ||¡sI|  |¡  S q:t|ƒ}	| jj	 
tdƒ¡}
|d du rbtjj}n|d du rmtjj}n|
rttjj}ntjj}| j || j|	|¡}|r |s |tjjkrd}n|j ¡ }td | j ¡ ||¡ƒ‚t ||| j| jj¡}|S )Nr   ÚLibraryr   r!  rO   rP   rQ   rS   rR   )r'  r5   r   r<   r3   r:   rM   Úprefer_staticrN   TFzshared or staticz{} {} library {!r} not found)r   rÜ   r   r  r  rT  rJ  r   r°   r   Ú
get_optionr   r   ÚLibTypeÚSTATICÚSHAREDÚPREFER_STATICÚPREFER_SHAREDr—   r©   r>   Úlowerr   rá   r&  r   rÞ   rR  )rl   r5   rp   rO  r!  r'  r(  Zhas_header_kwargsr  Úsearch_dirsr[  ÚlibtypeZlinkargsZ	libtype_srS  r.   r.   r/   rÄ   ƒ  sN   
úÿ




ÿÿÿz"CompilerHolder.find_library_methodNÚ	argumentsúT.Union[str, T.List[str]]rW   úT.Optional['ExtractRequired']c                 C  s
  t |tƒr|g}d| j ¡ d |tju rdnd¡d d |¡¡g}|p&ddi}t|| j	dd	\}}}|rE|d
t
 |¡dg7 }t
j|Ž  dS |tju rN| jjn| jj}||| jƒ\}	}
|rg|	sg|dg7 }t|Ž ‚||	rot
 d¡nt
 d¡|
rzt
 d¡ndg7 }t
j|Ž  |	S )zIShared implementation for methods checking compiler and linker arguments.zCompiler forz
supports{}z linkr‚   zarguments {}:ú r'  Fr   r   r!  ú
not usabler  r$  r   )r„   r2   r—   r&  rá   rW   rZ   r†   r   rÜ   r   r  r  r«   rª   r°   r   r  r  r  )rl   re  ræ   rp   Úlogargsr!  r'  r(  Útestr  r  r.   r.   r/   Ú_has_argument_impl½  s0   
ü

þ
z!CompilerHolder._has_argument_implzcompiler.has_argumentú'HasArgumentKW'c                 C  s   | j |d g|dS ©Nr   )rp   ©rl  rw   r.   r.   r/   rÅ   Ü  s   z"CompilerHolder.has_argument_methodzcompiler.has_multi_arguments)r+  z0.37.0úT.Tuple[T.List[str]]c                 C  s   | j |d |dS rn  ro  rw   r.   r.   r/   rÈ   á  s   z)CompilerHolder.has_multi_arguments_methodz compiler.get_supported_argumentsz0.43.0r(   Úoffz0.59.0>   ÚwarnÚrequirerq  )r~   r   Ú	validatorú'GetSupportedArgumentKw'c                 C  st   g }|d }|d D ]-}|   |g¡s2d| j ¡ › d|› d}|dkr(t |¡ q
|dkr1t |¡‚q
| |¡ q
|S )Nr(   r   úCompiler for z does not support "r.  rr  rs  )rl  r—   r&  r   rD  r   ÚMesonExceptionrß   )rl   r5   rp   Úsupported_argsr(   Úargr  r.   r.   r/   rÉ   ç  s   
ÿz-CompilerHolder.get_supported_arguments_methodz!compiler.first_supported_argumentc                 C  sL   |d D ]}|   |g¡rt dt |¡¡ |g  S qt dt d¡¡ g S )Nr   zFirst supported argument:ÚNone)rl  r   r  r  r  ©rl   r5   rp   ry  r.   r.   r/   rÊ   ý  s   
þz.CompilerHolder.first_supported_argument_methodzcompiler.has_link_argumentz0.46.0c                 C  s   | j |d gtj|dS ©Nr   )ræ   rp   ©rl  rW   rZ   rw   r.   r.   r/   rË     s   z'CompilerHolder.has_link_argument_methodz compiler.has_multi_link_argumentc                 C  s   | j |d tj|dS r|  r}  rw   r.   r.   r/   rÌ     ó   z.CompilerHolder.has_multi_link_arguments_methodz%compiler.get_supported_link_argumentsc                 C  s2   g }|d D ]}| j |gtjdr| |¡ q|S )Nr   ©ræ   )rl  rW   rZ   rß   )rl   r5   rp   rx  ry  r.   r.   r/   rÍ     s   
€z2CompilerHolder.get_supported_link_arguments_methodz-compiler.first_supported_link_argument_methodz&compiler.first_supported_link_argumentc                 C  sR   |d D ]}| j |gtjdrt dt |¡¡ |g  S qt dt d¡¡ g S )Nr   r  zFirst supported link argument:rz  )rl  rW   rZ   r   r  r  r  r{  r.   r.   r/   rÎ     s   
þz3CompilerHolder.first_supported_link_argument_methodÚattrc           	      C  sÌ   d| j  ¡ › d|› dg}|pddi}t|| jdd\}}}|r1|dt |¡dg7 }tj|Ž  dS | j  || j¡\}}|rH|sH|d	g7 }t	|Ž ‚||rPt 
d
¡nt d¡|r[t d¡ndg7 }tj|Ž  |S )z-Common helper for function attribute testing.rv  z supports function attribute r÷   r'  Fr   r   r!  ri  r  r$  r   r‚   )r—   r&  r   rÜ   r   r  r  Úhas_func_attributer°   r   r  r  r  )	rl   r€  rp   rj  r!  r'  r(  r)  r  r.   r.   r/   Ú_has_function_attribute_impl(  s$   ÿ

þ
z+CompilerHolder._has_function_attribute_implzcompiler.has_function_attributez0.48.0c                 C  rK  rL  ©r‚  rw   r.   r.   r/   rÆ   >  s   z(CompilerHolder.has_func_attribute_methodz*compiler.get_supported_function_attributesc                   s   ‡ fdd„|d D ƒS )Nc                   s   g | ]	}ˆ   |¡r|‘qS r.   rƒ  )r/  ÚarÒ   r.   r/   r1  H  s    zKCompilerHolder.get_supported_function_attributes_method.<locals>.<listcomp>r   r.   rw   r.   rÒ   r/   rÇ   D  r~  z7CompilerHolder.get_supported_function_attributes_methodz#compiler.get_argument_syntax_methodc                 C  r  ru   )r—   r­   rw   r.   r.   r/   rÐ   J  r  z)CompilerHolder.get_argument_syntax_methodzcompiler.preprocessz0.64.0rU   z@PLAINNAME@.irV   ú1.1.0ú(T.Tuple[T.List['mesonlib.FileOrString']]ú'PreprocessKW'úT.List[build.CustomTargetIndex]c                   sø   | j  ¡ }| j |d ¡}tdd„ |D ƒƒr!tjdd| j| jd t	| j
| jj ƒ}|dkr9tjdd| j| jd d|› }t || jj| j| j||d	 || jj|d
 |d |d ¡‰| j ˆjˆ¡ tj | jj ˆ¡| jj¡‰ ‡ ‡fdd„ˆjD ƒS )Nr   c                 s  s&    | ]}t |tjtjtjfƒV  qd S ru   )r„   r   ÚCustomTargetÚCustomTargetIndexÚGeneratedList)r/  Úsr.   r.   r/   rX  \  s   €$ z3CompilerHolder.preprocess_method.<locals>.<genexpr>z*compiler.preprocess with generated sourcesr…  r×   z'compiler.preprocess used multiple timesZpreprocessor_rU   rV   r<   r   c              	     s"   g | ]}t  ˆtj ˆ |¡¡‘qS r.   )r   rŠ  ÚosÚpathr†   )r/  Úo©Úprivate_dirÚtgr.   r/   r1  u  s   " z4CompilerHolder.preprocess_method.<locals>.<listcomp>)r—   Úget_preprocessorr^   Úsource_strings_to_filesÚanyr   rÛ   rÜ   rÝ   Únextr–   Úsubdirr   ÚCompileTargetr°   ÚbackendÚ
add_targetr>   r  rŽ  ÚrelpathÚget_target_private_dirÚoutputs)rl   r5   rp   r—   ÚsourcesZ
tg_counterZtg_namer.   r  r/   rÑ   P  s8   

ÿÿ
õz CompilerHolder.preprocess_method)r—   r˜   r^   r_   )rr   r˜   )rÓ   rÔ   rÕ   r9   rÖ   r2   rr   r2   rz   )r5   ro   rp   rq   rr   r4   )rp   r8   ræ   r
   rr   r4   )Fr÷   )rÓ   rÔ   rÕ   r9   rÖ   r2   rr   rø   )r5   rû   rp   rü   rr   rs   )r5   r
  rp   r  rr   r]   ry   )r5   r  rp   r  rr   r9   )r5   r-  rp   r  rr   r9   )r5   rû   rp   r  rr   r9   )r5   rû   rp   r5  rr   rs   )r5   rû   rp   r7  rr   rs   )r5   rû   rp   r7  rr   r2   )r5   rû   rp   r7  rr   r9   )r5   r
  rp   r  rr   r9   )r5   rû   rp   rF  rr   r9   )rH  r2   rp   rF  rr   r9   )r5   r  rp   rF  rr   r9   )rO  r2   rr   rP  )r5   rû   rp   rY  rr   rP  )re  rf  ræ   rW   rp   rg  rr   r9   )r5   rû   rp   rm  rr   r9   )r5   rp  rp   rm  rr   r9   )r5   rp  rp   ru  rr   r4   )r5   rp  rp   rq   rr   r4   ru   )r€  r2   rp   rg  rr   r9   )r5   r†  rp   r‡  rr   rˆ  )Xr*   r+   r,   ÚcollectionsÚdefaultdictÚ	itertoolsÚcountr–   r-   re   Úpropertyr—   rä   r   r   rÂ   rÃ   r
   rï   rö   rú   r   r2   r   rŒ   r   r€   rÁ   r   r  r’   r¼   r³   r   r´   rÏ   Ú_HAS_REQUIRED_KWr‘   r¾   r¿   r½   rÀ   r   rs   r   rµ   r¶   r·   r¸   r±   r²   r”   r¹   rJ  rº   r»   rT  r   r9   r   ÚUserFeatureOptionr   r…   rÄ   rW   rY   rl  rÅ   rÈ   r   rÉ   rÊ   rË   rÌ   rÍ   rÎ   r‚  rÆ   rÇ   rÐ   r   r‰  rŠ  r‹  r   rV  rÑ   r{   r.   r.   rm   r/   r•   ³   sD  
 &
ÿü
üû&


úù	0þ



ÿþ





ûr•   r   )XÚ
__future__r   rŸ  Úenumr  r  r¡  ÚtypingÚTr‚   r   r   r   r   r   rC  r	   Zcompilers.compilersr
   Úinterpreterbaser   r   r   r   r   r   Úinterpreterbase.decoratorsr   r   r   r   r   Úinterpreterobjectsr   r   Útype_checkingr   r   r   ÚTYPE_CHECKINGr^   r   r   r   r   r    rp   r!   r"   Zinterpreter.interpreterr#   r$   Ztyping_extensionsr%   r&   r'   r1   r8   r=   r@   rA   rF   rI   rJ   rK   rT   ÚEnumrW   r[   r…   r2   r   r-   Ú
Dependencyr€   ÚIncludeDirsr   rŒ   r9   Z_NO_BUILTIN_ARGS_KWZ_NAME_KWZ
_WERROR_KWr‘   r’   rV  r”   r¤  r•   r.   r.   r.   r/   Ú<module>   s–    ü
ü
üû
ÿ