o
    ¢Ùldœ—  ã                   @  s  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l3m4Z4m5Z5 G dd„ de4ƒZ6G dd„ de4ƒZ7G dd„ de4ƒZ8G dd„ de4ƒZ9G dd „ d e9ƒZ:G d!d"„ d"e9e/ƒZ;G d#d$„ d$e/e0ƒZ<G d%d&„ d&e4ƒZ=G d'd(„ d(ej>ƒZ?G d)d*„ d*ed+ ƒZ@ed,eeAeBƒd-g d.ZCd/eDd0< ed1eeAejEƒd-g d.ZFd2eDd3< ed4eeAe
jGƒg d-d5ZHd6eDd7< ed8eBeeAeBƒfd9eAd:id;d<„ d=ZId>eDd?< ed@eJdAdBZKedCeBd9dBZLeCeFeHeIeKgZMdDeDdE< eLeCeFeHeKgZNdDeDdF< e$jOdGdAdHgeM¢ZPdDeDdI< G dJdK„ dKedL ƒZQdS )Mé    )Ú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)Ú	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-   ú~home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/interpreter/compiler.pyr&   %   s   
 r&   c                   @  s&   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.   r/   )   ó   
 r/   c                   @  ó6   e Zd ZU ded< ded< ded< ded< d	ed
< dS )Ú	CompileKWr0   ÚnameÚboolÚno_builtin_argsúT.List[build.IncludeDirs]Úinclude_directoriesr2   r3   r4   r   Nr(   r-   r-   r-   r.   r7   /   ó   
 r7   c                   @  r6   )ÚCommonKWr0   r1   r9   r:   r;   r<   r2   r3   r4   r   Nr(   r-   r-   r-   r.   r>   7   r=   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.   r?   ?   r5   r?   c                   @  s   e Zd ZdS )ÚHeaderKWN)r)   r*   r+   r-   r-   r-   r.   rC   E   s    rC   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   Údisablerr2   Úhas_headersÚstaticÚheader_argsr4   Úheader_dependenciesr;   Úheader_include_directoriesÚheader_no_builtin_argsr0   Úheader_prefixz)T.Union[bool, coredata.UserFeatureOption]Zheader_requiredNr(   r-   r-   r-   r.   rD   H   s   
 rD   c                   @  s.   e Zd ZU ded< ded< ded< ded< d	S )
ÚPreprocessKWr0   Úoutputr2   Úcompile_argsr;   r<   r4   r   Nr(   r-   r-   r-   r.   rM   W   s
   
 rM   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.   rP   ^   s    rP   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)ÚselfrU   rW   ©Ú	__class__r-   r.   r^   g   s   
ýzTryRunResultHolder.__init__r3   úT.List['TYPE_var']Úkwargsú'TYPE_kwargs'ÚreturnÚintc                 C  ó   | j jS ©N)Úheld_objectrY   ©re   r3   ri   r-   r-   r.   ra   o   ó   z$TryRunResultHolder.returncode_methodr9   c                 C  rm   rn   )ro   rZ   rp   r-   r-   r.   rb   t   rq   z"TryRunResultHolder.compiled_methodr0   c                 C  rm   rn   )ro   r[   rp   r-   r-   r.   rc   y   rq   z TryRunResultHolder.stdout_methodc                 C  rm   rn   )ro   r\   rp   r-   r-   r.   rd   ~   rq   z TryRunResultHolder.stderr_method)rU   rV   rW   rX   )r3   rh   ri   rj   rk   rl   ©r3   rh   ri   rj   rk   r9   ©r3   rh   ri   rj   rk   r0   )r)   r*   r+   r^   r   r   ra   rb   rc   rd   Ú__classcell__r-   r-   rf   r.   rT   f   s    rT   r   r3   T©ÚlistifyÚdefaultzKwargInfo[T.List[str]]Ú_ARGS_KWr   z,KwargInfo[T.List['dependencies.Dependency']]Ú_DEPENDENCIES_KWr<   )rw   rv   z$KwargInfo[T.List[build.IncludeDirs]]Ú_INCLUDE_DIRS_KWr1   Ú z1.0.0c                 C  s   t | tƒr
d | ¡S | S )NÚ
)Ú
isinstanceÚlistÚjoin)Úxr-   r-   r.   Ú<lambda>›   ó    r   )rw   Zsince_valuesZ	convertorzKwargInfo[str]Ú
_PREFIX_KWr:   F©rw   r8   zT.List[KwargInfo]Ú_COMMON_KWSÚ_COMPILES_KWSú0.50.0)Úsincerw   Ú_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d0eejfƒed0ge¢R Ž dÓd4d5„ƒƒZeedÍd6d7„ƒƒZ eee!d8d9ƒdÍd:d;„ƒƒƒZ"eedÔd<d=„ƒƒZ#ed>eeƒed>ge$¢R Ž dÕdAdB„ƒƒZ%edCeedDdEedCge$¢R Ž dÖdGdH„ƒƒZ&edIeƒedIge$¢R Ž d×dJdK„ƒƒZ'edLeƒedLge$¢R Ž d×dMdN„ƒƒZ(e!dOdPƒedOeƒedOe)dQe*e+fƒe)dRe*e+fƒe)dSe*e+fƒge$¢R Ž dØdUdV„ƒƒƒZ,edWeƒedWge$¢R Ž dÙdXdY„ƒƒZ-e!dZdPƒedZeƒedZge$¢R Ž dÚd[d\„ƒƒƒZ.ed]eejfƒed]ge¢R Ž dÛd^d_„ƒƒZ/ed`eejfƒed`ge¢R Ž dÛdadb„ƒƒZ0e!dcddƒedceƒedcge1¢R Ž dÜdfdg„ƒƒƒZ2dÝdidj„Z3edkeƒedkge1¢R Ž dÜdldm„ƒƒZ4edneeƒednge1¢R Ž dÞdodp„ƒƒZ5dßdsdt„Z6e7edueƒedue)dve8e9j:fdwdxe)dye;e<eƒdwg dzd{e)d|e8e+fd}d~e)de8d%d€de)d‚e;e<eƒdwg dƒgd„d…„ e1D ƒ¢R Ž dàd‡dˆ„ƒƒƒZ=e>j?fdádŒd„Z@eedŽeƒdâdd„ƒƒZAeed‘ed’e!d‘d“ƒdãd•d–„ƒƒƒZBe!d—d˜ƒed—ed’ed—e)d™edšd›eCh dœ£ƒdƒdädŸd „ƒƒƒZDeed¡ed’dåd¢d£„ƒƒZEe!d¤d¥ƒeed¤eƒdâd¦d§„ƒƒƒZFe!d¨d¥ƒeed¨ed’dãd©dª„ƒƒƒZGe!d«d¥ƒeed«ed’dåd¬d­„ƒƒƒZHe!d®d¥ƒeed¯ed’dåd°d±„ƒƒƒZIdæd³d´„ZJe!dµd¶ƒeedµeƒdâd·d¸„ƒƒƒZKe!d¹d¶ƒeed¹ed’dådºd»„ƒƒƒZLe!d¼d€ƒeedÍd½d¾„ƒƒƒZMe!d¿dÀƒed¿eejeNjOeNjPeNjQfdDdEed¿e)dÁedÂdxe)dÃe;e<eƒdwg dƒeRejSdÄd~ƒdçdÈdÉ„ƒƒƒZT‡  ZUS )èÚCompilerHolderzT.Dict[str, itertools.count]Úpreprocess_uidÚcompilerú
'Compiler'rW   rX   c                   sð   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“| j| j| j| j| j| j| j| j| j| j | j!| j"| j#| j$| j%dœ¥¡ d S )NÚcompilesÚlinksÚget_idÚget_linker_idÚcompute_intÚsizeofÚ
get_defineÚcheck_headerÚ
has_headerÚhas_header_symbolÚrunÚhas_functionZ
has_memberÚhas_membersÚhas_typeÚ	alignmentÚversion)Z	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)&r]   r^   ÚenvÚenvironmentr_   r`   Úcompiles_methodÚlinks_methodÚget_id_methodÚget_linker_id_methodÚcompute_int_methodÚsizeof_methodÚget_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)re   rŒ   rW   rf   r-   r.   r^   ¬   sf   ÿþýüûúùø	÷
öõôóòñðázCompilerHolder.__init__rk   c                 C  s   | j S rn   )ro   ©re   r-   r-   r.   rŒ   Ñ   s   zCompilerHolder.compilerÚdepsú!T.List['dependencies.Dependency']Úcompile_onlyr9   Úendlr0   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   ZInternalDependencyr   Ú
single_useÚ
subprojectÚcurrent_nodeÚExternalLibraryr8   ÚappendÚlenÚformatr   )
re   rÇ   rÉ   rÊ   Z
msg_singleZmsg_manyÚnamesÚdr8   Ztplr-   r-   r.   Ú_dep_msgÕ   s*   ÿzCompilerHolder._dep_msgr3   rh   ri   rj   c                 C  rm   rn   )rŒ   r   rp   r-   r-   r.   r¶   ì   rq   zCompilerHolder.version_methodr2   c                 C  rm   rn   )rŒ   Zexelistrp   r-   r-   r.   r·   ñ   rq   zCompilerHolder.cmd_array_methodÚ
nobuiltinsÚincdirsr;   Ú
extra_argsÚmoder
   c           	      C  s€   g }|D ]}|  | j ¡ ¡D ]}| | j |d¡¡ qq|s9| jjj}|| j |¡7 }|t	j
u r9| | j |¡¡ | |¡ |S )NF)Zto_string_listr¥   Zget_source_dirÚextendrŒ   Zget_include_argsr   ÚoptionsZget_option_compile_argsr
   ÚLINKZget_option_link_args)	re   rØ   rÙ   rÚ   rÛ   r3   ÚiZidirÚoptsr-   r-   r.   Ú_determine_argsö   s   ÿ


zCompilerHolder._determine_argsFú:ú/T.Tuple[T.List['dependencies.Dependency'], str]c                 C  s   t  |¡}||  |||¡fS rn   )r   Zget_leaf_external_dependenciesr×   )re   rÇ   rÉ   rÊ   r-   r-   r.   Ú_determine_dependencies  s   
z&CompilerHolder._determine_dependencieszcompiler.alignmentúT.Tuple[str]ú'AlignmentKw'rl   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É   r1   r3   ©rÚ   r   ú(cached)r{   zChecking for alignment ofT)
rä   rŒ   Úis_crossrœ   r¥   r   ÚblueÚlogÚboldr0   )	re   r3   ri   ÚtypenamerÇ   ÚmsgÚresultÚcachedÚ
cached_msgr-   r-   r.   rµ   
  s   
þÿzCompilerHolder.alignment_methodzcompiler.runú T.Tuple['mesonlib.FileOrString']ú'CompileKW'rV   c           
      C  sè   |d }t |tjƒr| j |¡ tj | | jj¡¡}|d }t	 
| j|d |d |d ¡}| j|d dd d\}}| jj|| j||d	}|rr|jsPt d
¡}	n|jdkr[t d¡}	n
t d|j› d¡}	t dt |d¡|d|	¡ |S )Nr   r8   r:   r<   r3   r   F)rÉ   rÊ   rè   zDID NOT COMPILEÚYESzNO (ú)úChecking ifTzruns:)r}   r   ÚFilerW   Úadd_build_def_fileÚfrom_absolute_fileÚrel_to_builddirr¥   Ú
source_dirÚ	functoolsÚpartialrá   rä   rŒ   r˜   rZ   r   ÚredrY   Úgreenrì   rí   )
re   r3   ri   ÚcodeÚtestnamerÚ   rÇ   rï   rð   Úhr-   r-   r.   r°     s(   ÿÿ
zCompilerHolder.run_methodc                 C  ó
   | j  ¡ S rn   )rŒ   r   rp   r-   r-   r.   r¨   3  s   
zCompilerHolder.get_id_methodzcompiler.get_linker_idz0.53.0c                 C  r  rn   )rŒ   r‘   rp   r-   r-   r.   r©   8  ó   
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¥   rp   r-   r-   r.   rÃ   >  s   z4CompilerHolder.symbols_have_underscore_prefix_methodzcompiler.has_memberúT.Tuple[str, str]ú
'CommonKW'c              	   C  s²   |\}}t  | j|d |d |d ¡}|  |d ¡\}}| jj||g|d | j||d\}}	|	r5t d¡nd}
|r?t 	d	¡}nt 
d
¡}t dt |d¡dt |d¡|||
¡ |S )Nr:   r<   r3   r   r1   rè   ré   r{   rõ   ÚNOúChecking whether typeTz
has member)rý   rþ   rá   rä   rŒ   rš   r¥   r   rë   r   rÿ   rì   rí   )re   r3   ri   rî   Z
membernamerÚ   rÇ   rï   Úhadrñ   rò   Úhadtxtr-   r-   r.   r²   G  s    
ý
ÿz CompilerHolder.has_member_methodzcompiler.has_membersr   )ÚvarargsZmin_varargsúT.Tuple[str, T.List[str]]c              	   C  sÂ   |\}}t  | j|d |d |d ¡}|  |d ¡\}}| jj|||d | j||d\}}	|	r4t d¡nd}
|r>t 	d	¡}nt 
d
¡}t d dd„ |D ƒ¡¡}t dt |d¡d||||
¡ |S )Nr:   r<   r3   r   r1   rè   ré   r{   rõ   r  rÍ   c                 S  s   g | ]}d |› d ‘qS )ú"r-   )Ú.0Úmr-   r-   r.   Ú
<listcomp>i  r‚   z5CompilerHolder.has_members_method.<locals>.<listcomp>r	  Tzhas members)rý   rþ   rá   rä   rŒ   rš   r¥   r   rë   r   rÿ   rí   r   rì   )re   r3   ri   rî   ZmembernamesrÚ   rÇ   rï   r
  rñ   rò   r  Úmembersr-   r-   r.   r³   Z  s"   
ý

ÿz!CompilerHolder.has_members_methodzcompiler.has_functionc                 C  s¢   |d }|   |d |d |d ¡}| j|d dd\}}| jj||d | j||d	\}}|r3t d
¡nd}	|r=t d¡}
nt d¡}
t 	dt 
|d¡||
|	¡ |S )Nr   r:   r<   r3   r   Frç   r1   rè   ré   r{   rõ   r  zChecking for functionT)rá   rä   rŒ   r™   r¥   r   rë   r   rÿ   rì   rí   )re   r3   ri   ÚfuncnamerÚ   rÇ   rï   r
  rñ   rò   r  r-   r-   r.   r±   n  s   
þ
z"CompilerHolder.has_function_methodzcompiler.has_typec                 C  s¢   |d }t  | j|d |d |d ¡}|  |d ¡\}}| jj||d | j||d\}}|r3t d¡nd	}	|r=t 	d
¡}
nt 
d¡}
t dt |d¡||
|	¡ |S )Nr   r:   r<   r3   r   r1   rè   ré   r{   rõ   r  zChecking for typeT)rý   rþ   rá   rä   rŒ   r›   r¥   r   rë   r   rÿ   rì   rí   )re   r3   ri   rî   rÚ   rÇ   rï   r
  rñ   rò   r  r-   r-   r.   r´     s   
ÿ
zCompilerHolder.has_type_methodzcompiler.compute_intz0.40.0rB   rA   r@   ú'ComputeIntKW'c              
   C  sŠ   |d }t  | j|d |d |d ¡}| j|d | jjd\}}| jj||d |d |d	 |d
 | j||d}t 	dt 
|d¡||¡ |S )Nr   r:   r<   r3   r   rç   rB   rA   r@   r1   rè   zComputing int ofT)rý   rþ   rá   rä   rŒ   rê   r’   r¥   r   rì   rí   )re   r3   ri   Z
expressionrÚ   rÇ   rï   rU   r-   r-   r.   rª     s   
ýz!CompilerHolder.compute_int_methodzcompiler.sizeofc           
   	   C  sš   |d }t  | j|d |d |d ¡}| j|d | jjd\}}| jj||d | j||d\}}|r7t 	d	¡nd
}	t 
dt |d¡|t t|ƒ¡|	¡ |S )Nr   r:   r<   r3   r   rç   r1   rè   ré   r{   zChecking for size ofT)rý   rþ   rá   rä   rŒ   rê   r“   r¥   r   rë   rì   rí   r0   )
re   r3   ri   ÚelementrÚ   rÇ   rï   Zesizerñ   rò   r-   r-   r.   r«   £  s   
ÿÿzCompilerHolder.sizeof_methodzcompiler.get_definec           
      C  sˆ   |d }t  | j|d |d |d ¡}|  |d ¡\}}| jj||d | j||d\}}|r3t d¡nd	}	t 	d
t 
|d¡|||	¡ |S )Nr   r:   r<   r3   r   r1   rè   ré   r{   zFetching value of defineT)rý   rþ   rá   rä   rŒ   r”   r¥   r   rë   rì   rí   )
re   r3   ri   r  rÚ   rÇ   rï   Úvaluerñ   rò   r-   r-   r.   r¬   °  s   
þz CompilerHolder.get_define_methodzcompiler.compilesc                 C  sÜ   |d }t |tjƒr| j |¡ tj | | jj¡¡}|d }t	 
| j|d |d |d ¡}| j|d d d\}}| jj|| j||d\}}	|rl|rPt d	¡}
nt d
¡}
|	r\t d¡nd}t dt |d¡|d|
|¡ |S )Nr   r8   r:   r<   r3   r   )rÊ   rè   rõ   r  ré   r{   r÷   Tz	compiles:)r}   r   rø   rW   rù   rú   rû   r¥   rü   rý   rþ   rá   rä   rŒ   rŽ   r   r   rÿ   rë   rì   rí   )re   r3   ri   r  r  rÚ   rÇ   rï   rð   rñ   r  rò   r-   r-   r.   r¦   ¾  s(   ÿ
þ
zCompilerHolder.compiles_methodzcompiler.linksc                 C  s^  |d }d }t |tjƒr[| j |¡ tj | | jj¡¡}|j	}|| j
jvr[| j
j}| jjj| }|tvr>t d|› ¡ nt| |vrUt dt| › d| ¡ › d¡ n|t|  }|d }t | j|d |d |d	 ¡}	| 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Unknown suffix for test file zPassed z+ source to links method, not specified for z	 machine.r8   r:   r<   r3   r   Frç   )rŒ   rÚ   r   ré   r{   rõ   r  r÷   Tzlinks:)r}   r   rø   rW   rù   rú   rû   r¥   rü   ÚsuffixrŒ   Zfile_suffixesÚfor_machiner   Ú	compilersr	   r   ÚwarningZget_lower_case_namerý   rþ   rá   rä   r   rë   r   rÿ   rì   rí   )re   r3   ri   r  rŒ   r  r  Zclistr  rÚ   rÇ   rï   rð   rñ   rò   r  r-   r-   r.   r§   Õ  s>   ÿ"
ý
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 |d	 |d
 ¡}|  |d ¡\}}	| j	j
||d | j||d\}
}|rRt d¡nd}|re|
set| j	 ¡ › d|›dƒ‚|
rmt d¡}nt d¡}t dt |d¡|	||¡ |
S )Nr   Fr„   zCheck usable headerTúskipped: featureÚdisabledr:   r<   r3   r   r1   rè   ré   r{   ú header z not usablerõ   r  )r   rÏ   r   rì   rí   rý   rþ   rá   rä   rŒ   r•   r¥   rë   r   Úget_display_languager   rÿ   )re   r3   ri   Úhnamer  ÚrequiredÚfeaturerÚ   rÇ   rï   Úhazrñ   rò   r  r-   r-   r.   r­   ú  s&    
þ
z"CompilerHolder.check_header_methodr   c                 C  sú   t || jdd\}}}|rt dt |d¡dt |¡d¡ dS t | j|d |d |d	 ¡}|  |d
 ¡\}}| j	j
||d | j||d\}	}
|
rNt d¡nd}|ra|	sat| j	 ¡ › d|›dƒ‚|	rit d¡}nt d¡}t dt |d¡|||¡ |	S )NFr„   z
Has headerTr  r  r:   r<   r3   r   r1   rè   ré   r{   r  z
 not foundrõ   r  )r   rÏ   r   rì   rí   rý   rþ   rá   rä   rŒ   r–   r¥   rë   r   r  r   rÿ   )re   r   ri   r  r!  r"  rÚ   rÇ   rï   r#  rñ   rò   r  r-   r-   r.   Ú_has_header_impl  s"    
ÿ
zCompilerHolder._has_header_implzcompiler.has_headerc                 C  s   |   |d |¡S ©Nr   )r$  rp   r-   r-   r.   r®   %  ó   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 |d	 |d
 ¡}|  |d ¡\}	}
| j	j
|||d | j||	d\}}|re|set| j	 ¡ › d|› d|› ƒ‚|rmt d¡}nt d¡}|ryt d¡nd}t dt |d¡dt |d¡|
||¡ |S )NFr„   ÚHeaderTz
has symbolr  r  r:   r<   r3   r   r1   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ë   )re   r3   ri   r   Úsymbolr  r!  r"  rÚ   rÇ   rï   r#  rñ   r  rò   r-   r-   r.   r¯   *  s&   ,
þ
&z'CompilerHolder.has_header_symbol_methodÚlibnameú'dependencies.ExternalLibrary'c                 C  s   t j|d | j| jjdd}|S )NT)Zsilent)r   rÑ   r¥   rŒ   Úlanguage)re   r)  Úlibr-   r-   r.   Únotfound_libraryA  s   ýzCompilerHolder.notfound_libraryzcompiler.find_libraryr!  Tr„   rF   r‡   )rv   rw   rˆ   rG   z0.51.0)rˆ   rE   z0.49.0)rw   rˆ   Údirsru   c                 c  s$    | ]}|j d |j› dV  qdS )Zheader_)r8   N)Úevolver8   )r  Úkr-   r-   r.   Ú	<genexpr>Q  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  rH   rI   rJ   rL   rK   )r!  r3   r   r<   r1   r:   rF   Úprefer_staticrG   TFzshared or staticz{} {} library {!r} not found)r   rÏ   r   rì   rí   r-  r$  r   r¥   r   Z
get_optionr   r   ZLibTypeZSTATICZSHAREDZPREFER_STATICZPREFER_SHAREDrŒ   rž   r8   Úlowerr   rÔ   r  r   rÑ   r+  )re   r3   ri   r)  r  r!  r"  Zhas_header_kwargsr  Zsearch_dirsr4  ZlibtypeZlinkargsZ	libtype_sr,  r-   r-   r.   r¸   H  sN   
úÿ




ÿÿÿz"CompilerHolder.find_library_methodÚ	argumentsúT.Union[str, T.List[str]]rP   c              
   C  sž   t |tƒr|g}|tju r| jjn| jj}||| jƒ\}}|r$t 	d¡nd}t 
d| j ¡ d |tju r6dnd¡d d |¡¡|rFt d¡nt d	¡|¡ |S )
zIShared implementation for methods checking compiler and linker arguments.ré   r{   zCompiler forz
supports{}z linkzarguments {}:ú rõ   r  )r}   r0   rP   rS   rŒ   r    rŸ   r¥   r   rë   rì   r  rÔ   r   r   rÿ   )re   r6  rÛ   Útestrð   rñ   rò   r-   r-   r.   Ú_has_argument_impl‚  s   
úz!CompilerHolder._has_argument_implzcompiler.has_argumentc                 C  s   |   |d g¡S r%  ©r:  rp   r-   r-   r.   r¹   ”  r&  z"CompilerHolder.has_argument_methodzcompiler.has_multi_arguments)r  z0.37.0úT.Tuple[T.List[str]]c                 C  ó   |   |d ¡S r%  r;  rp   r-   r-   r.   r¼   ™  ó   z)CompilerHolder.has_multi_arguments_methodz compiler.get_supported_argumentsz0.43.0r'   Úoffz0.59.0>   Úwarnr?  Úrequire)rw   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  r@  rA  )r:  rŒ   r  r   r  r   ZMesonExceptionrÒ   )re   r3   ri   Ú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)r:  r   rì   rí   rÿ   ©re   r3   ri   rF  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Û   ©r:  rP   rS   rp   r-   r-   r.   r¿   ¿  ó   z'CompilerHolder.has_link_argument_methodz compiler.has_multi_link_argumentc                 C  s   | j |d tjdS rI  rK  rp   r-   r-   r.   rÀ   Å  s   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 rI  )r:  rP   rS   rÒ   )re   r3   ri   rE  rF  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   rJ  zFirst supported link argument:rG  )r:  rP   rS   r   rì   rí   rÿ   rH  r-   r-   r.   rÂ   Õ  s   
þz3CompilerHolder.first_supported_link_argument_methodÚattrc                 C  sd   | j  || j¡\}}|rt d¡nd}|rt d¡nt d¡}t d| j  ¡ › d|› d||¡ |S )z-Common helper for function attribute testing.ré   r{   rõ   r  rD  z supports function attribute râ   )	rŒ   Zhas_func_attributer¥   r   rë   r   rÿ   rì   r  )re   rM  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  r=  r%  ©rN  rp   r-   r-   r.   rº   è  r>  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-   rO  )r  ÚarÆ   r-   r.   r  ò  s    zKCompilerHolder.get_supported_function_attributes_method.<locals>.<listcomp>r   r-   rp   r-   rÆ   r.   r»   î  rL  z7CompilerHolder.get_supported_function_attributes_methodz#compiler.get_argument_syntax_methodc                 C  r  rn   )rŒ   r¢   rp   r-   r-   r.   rÄ   ô  r  z)CompilerHolder.get_argument_syntax_methodzcompiler.preprocessz0.64.0rN   z@PLAINNAME@.irO   ú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 rn   )r}   r   ÚCustomTargetÚCustomTargetIndexÚGeneratedList)r  Úsr-   r-   r.   r1    s   €$ z3CompilerHolder.preprocess_method.<locals>.<genexpr>z*compiler.preprocess with generated sourcesrQ  rË   z'compiler.preprocess used multiple timesZpreprocessor_rN   rO   r<   r   c              	     s"   g | ]}t  ˆtj ˆ |¡¡‘qS r-   )r   rV  ÚosÚpathr   )r  Úo©Zprivate_dirÚtgr-   r.   r    s   " z4CompilerHolder.preprocess_method.<locals>.<listcomp>)rŒ   Zget_preprocessorrW   Zsource_strings_to_filesÚanyr   rÎ   rÏ   rÐ   Únextr‹   Zsubdirr   ZCompileTargetr¥   ZbackendZ
add_targetr8   rY  rZ  ÚrelpathZget_target_private_dirÚoutputs)re   r3   ri   rŒ   ÚsourcesZ
tg_counterZtg_namer-   r\  r.   rÅ   ú  s8   

ÿÿ
õz CompilerHolder.preprocess_method)rŒ   r   rW   rX   )rk   r   )rÇ   rÈ   rÉ   r9   rÊ   r0   rk   r0   rs   )r3   rh   ri   rj   rk   r2   )
rØ   r9   rÙ   r;   rÚ   r2   rÛ   r
   rk   r2   )Frâ   )rÇ   rÈ   rÉ   r9   rÊ   r0   rk   rã   )r3   rå   ri   ræ   rk   rl   )r3   ró   ri   rô   rk   rV   rr   )r3   r  ri   r  rk   r9   )r3   r  ri   r  rk   r9   )r3   rå   ri   r  rk   r9   )r3   rå   ri   r  rk   rl   )r3   rå   ri   r  rk   rl   )r3   rå   ri   r  rk   r0   )r3   ró   ri   rô   rk   r9   )r3   rå   ri   r  rk   r9   )r   r0   ri   r  rk   r9   )r3   r  ri   r  rk   r9   )r)  r0   rk   r*  )r3   rå   ri   r2  rk   r*  )r6  r7  rÛ   rP   rk   r9   )r3   rå   ri   rj   rk   r9   )r3   r<  ri   rj   rk   r9   )r3   r<  ri   rC  rk   r2   )r3   r<  ri   rj   rk   r2   )rM  r0   rk   r9   )r3   rR  ri   rS  rk   rT  )Vr)   r*   r+   ÚcollectionsÚdefaultdictÚ	itertoolsÚcountr‹   r,   r^   ÚpropertyrŒ   r×   r   r   r¶   r·   r
   rÞ   rá   rä   r   r0   r   rƒ   rx   ry   rµ   r   rø   r†   r°   r¨   r   r©   rÃ   r…   r²   r³   r±   r´   r   rl   r   rª   r«   r¬   r¦   r§   r‰   r­   r$  r®   r¯   r-  r   r9   r   ZUserFeatureOptionr   r~   r¸   rP   rR   r:  r¹   r¼   r   r½   r¾   r¿   rÀ   rÁ   rÂ   rN  rº   r»   rÄ   r   rU  rV  rW  rz   r/  rÅ   rt   r-   r-   rf   r.   rŠ   ©   s:  
 %
ýü
üû#


úù	0ÿ



ÿþ






ûrŠ   r   )RÚ
__future__r   rc  Úenumrý   rY  re  ÚtypingÚTr{   r   r   r   r   r   r  r	   Zcompilers.compilersr
   Zinterpreterbaser   r   r   r   r   r   Zinterpreterbase.decoratorsr   r   r   r   r   Zinterpreterobjectsr   r   Ztype_checkingr   r   r   ÚTYPE_CHECKINGrW   r   r   r   r   r    ri   r!   r"   Zinterpreter.interpreterr#   Útyping_extensionsr$   r%   r&   r/   r7   r>   r?   rC   rD   rM   ÚEnumrP   rT   r~   r0   rx   r,   Z
Dependencyry   ZIncludeDirsrz   rƒ   r9   Z_NO_BUILTIN_ARGS_KWZ_NAME_KWr…   r†   r/  r‰   rŠ   r-   r-   r-   r.   Ú<module>   s†    ü
ü
üû