o
    ¤æVc[L  ã                   @  sÚ   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 dd
lmZmZmZ ddlmZmZmZmZ d dlZejrcddlmZ ddlmZmZ ddlmZ G dd„ deƒZ dS )é    )Úannotationsé   )Úextract_required_kwargé   )Úmlog)Údependencies)Úbuild)ÚWrapMode)Ú	OptionKeyÚextract_as_listÚstringlistifyÚversion_compare_manyÚlistify)Ú
DependencyÚDependencyExceptionÚNotFoundDependency)ÚMesonInterpreterObjectÚ
FeatureNewÚInterpreterExceptionÚInvalidArgumentsN)ÚInterpreter)ÚTYPE_nkwargsÚ	TYPE_nvar)ÚSubprojectHolderc                      sÊ   e Zd Z		dFdG‡ fdd„ZdHdd„ZdIdd„ZdJdd„ZdJdd „ZdJd!d"„ZdJd#d$„Z	dKd&d'„Z
dLd(d)„ZdMd+d,„ZdNd/d0„ZdOd3d4„ZdPd5d6„ZdQd8d9„ZedRd=d>„ƒZdSd@dA„ZdTdUdDdE„Z‡  ZS )VÚDependencyFallbacksHolderNÚinterpreterú'Interpreter'ÚnamesúT.List[str]Úallow_fallbackúT.Optional[bool]Údefault_optionsúT.Optional[T.List[str]]ÚreturnÚNonec                   sî   t ƒ j|jd || _|j| _|j| _|j| _|j| _|jj| _|| _d | _	d | _
d|p-g i| _g | _d| _d| _|D ]+}|sCtdƒ‚d|v sOd|v sOd|v rStdƒ‚|| jv r`td	|›d
ƒ‚| j |¡ q;| jrr| jd | _d S d| _d S )N)Ú
subprojectr!   Fz1dependency_fallbacks empty name '' is not allowedú<ú>ú=z„Characters <, > and = are forbidden in dependency names. To specifyversion
 requirements use the 'version' keyword argument instead.zdependency_fallbacks name z is duplicatedr   z(anonymous))ÚsuperÚ__init__r%   r   Úcoredatar   ÚenvironmentÚwrap_resolverr   Úsubproject_nameÚsubproject_varnameÚsubproject_kwargsr   ÚforcefallbackÚ
nofallbackr   r   ÚappendÚ_display_name)Úselfr   r   r   r!   Úname©Ú	__class__© ú‰home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/interpreter/dependencyfallbacks.pyr*      s.   

 z"DependencyFallbacksHolder.__init__Úfbinfoú%T.Optional[T.Union[T.List[str], str]]c                 C  s–   |d u rd S | j d urtdƒ‚t|ƒ}t|ƒdkrd| _ d S t|ƒdkr4t dd| j¡ |d d }}nt|ƒdkr?|\}}ntdƒ‚|  ||¡ d S )	Nz@"fallback" and "allow_fallback" arguments are mutually exclusiver   Fr   zFallback without variable namez0.53.0r   z)Fallback info must have one or two items.)	r   r   r   Úlenr   Ú
single_user%   r   Ú_subproject_impl)r5   r;   Ú	subp_nameÚvarnamer9   r9   r:   Úset_fallback0   s   

z&DependencyFallbacksHolder.set_fallbackr@   ÚstrrA   c                 C  s   | j d u sJ ‚|| _ || _d S ©N)r.   r/   )r5   r@   rA   r9   r9   r:   r?   D   s   
z*DependencyFallbacksHolder._subproject_implÚkwargsr   Ú	func_argsr   Úfunc_kwargsúT.Optional[Dependency]c                 C  s&   |d }|   ||¡}|r|  |¡ |S ©Nr   )Ú_get_cached_depÚ_verify_fallback_consistency)r5   rE   rF   rG   r6   Ú
cached_depr9   r9   r:   Ú_do_dependency_cacheI   s
   
z.DependencyFallbacksHolder._do_dependency_cachec                 C  s^   |d }|   |¡ t || j|¡}| ¡ r-| j |¡}t ||¡}| jj	|  
||¡ |S d S rI   )Ú_handle_featurenew_dependenciesr   Zfind_external_dependencyr,   Úfoundr   Úmachine_from_native_kwargÚget_dep_identifierr+   ÚdepsÚput)r5   rE   rF   rG   r6   ÚdepÚfor_machineÚ
identifierr9   r9   r:   Ú_do_dependencyP   s   
z(DependencyFallbacksHolder._do_dependencyc                 C  s.   |d }| j }|r|  |¡r|  |||¡S d S rI   )r/   Ú_get_subprojectÚ_get_subproject_dep)r5   rE   rF   rG   r@   rA   r9   r9   r:   Ú_do_existing_subproject_   s
   z1DependencyFallbacksHolder._do_existing_subprojectc           
      C  s  | j rt dt | j¡d¡ n| jrt dt | j¡d¡ d S t dt | j¡¡ | d¡}t| dg ¡ƒ}|d ur_tdd„ |D ƒƒs_|rGdnd	}d
|› }t d|› ¡ | 	|¡ ||d< | j
}| j}	| dg ¡ d|v r~t|d tƒr~t|d ƒ|d< | j |d|¡ |  ||	|¡S )Nz4Looking for a fallback subproject for the dependencyz0because:
Use of fallback dependencies is forced.z8Not looking for a fallback subproject for the dependencyz2because:
Use of fallback dependencies is disabled.Ústaticr!   c                 s  s    | ]}d |v V  qdS )Údefault_libraryNr9   ©Ú.0Úir9   r9   r:   Ú	<genexpr>v   ó   € z;DependencyFallbacksHolder._do_subproject.<locals>.<genexpr>Úsharedzdefault_library=z"Building fallback subproject with ÚversionZmeson)r1   r   ÚlogÚboldr4   r2   Úgetr   Úanyr3   r.   r/   Ú
setdefaultÚ
isinstancerC   r   r   Zdo_subprojectrY   )
r5   rE   rF   rG   r[   r!   r\   Úoptr@   rA   r9   r9   r:   Ú_do_subprojectf   s6   ÿÿ
ÿ


z(DependencyFallbacksHolder._do_subprojectúT.Optional[SubprojectHolder]c                 C  s"   | j j |¡}|r| ¡ r|S d S rD   )r   Zsubprojectsrf   rO   )r5   r@   Úsubr9   r9   r:   rX   †   s   z)DependencyFallbacksHolder._get_subprojectc           
      C  sö  |   |¡}|s!t dt | j¡dt |¡dt d¡t d¡¡ d S d }| jD ]}|  ||¡}|r2 nq&|r<|  	|¡ |S |sO| jD ]}| j
 ||¡}|rN nqA|swt d|›d| j›d¡ t dt | j¡dt |j¡dt d¡¡ |  ¡ S |  ||¡p€|  ¡ }| ¡ sœt dt | j¡dt |j¡dt d¡¡ |S t| d	g ¡ƒ}| ¡ }	|  ||	¡sÙt dt | j¡dt |j¡dt d¡d
t |	¡dt d dd„ |D ƒ¡¡¡
 |  ¡ S t dt | j¡dt |j¡dt d¡|	röt |	¡¡ |S d ¡ |S )Nr   zfrom subprojectúfound:ÚNOz (subproject failed to configure)zSubproject z did not override z* dependency and no variable name specifiedrc   rO   ú	but need:ú, c                 S  ó   g | ]}d |› d ‘qS ©ú'r9   ©r^   Úer9   r9   r:   Ú
<listcomp>Ã   ó    zADependencyFallbacksHolder._get_subproject_dep.<locals>.<listcomp>ÚYES)rX   r   rd   re   r4   ÚredÚbluer   rJ   rK   r-   Zget_varnameÚwarningÚsubdirÚ_notfound_dependencyÚ_get_subproject_variablerO   r   rf   Úget_versionÚ_check_versionÚnormal_cyanÚjoinÚgreen)
r5   r@   rA   rE   r%   rL   r6   Úvar_depÚwantedrO   r9   r9   r:   rY   Œ   sf   
þ
ÿ

ÿÿÿýþÿþz-DependencyFallbacksHolder._get_subproject_depr6   c           
      C  s^  | j  |¡}t ||¡}t| dg ¡ƒ}| jj|  |¡}|rGt 	|j
r&dnd¡g}|j}| ¡ sFtjdt | j¡dt d¡g|¢R Ž  |S nt 	d¡g}| jj|  |¡}|r­| ¡ }	|  ||	¡sŽ|sfd S tjdt |¡dt d¡dt |	¡dt d	 d
d„ |D ƒ¡¡g|¢R Ž  |  ¡ S |	r˜t |	¡g|¢}tjdt | j¡dt d¡g|¢R Ž  |S d S )Nrc   z(overridden)z(cached)r   rn   ro   rO   rp   rq   c                 S  rr   rs   r9   ru   r9   r9   r:   rw   í   rx   z=DependencyFallbacksHolder._get_cached_dep.<locals>.<listcomp>ry   )r   rP   r   rQ   r   rf   r   Údependency_overridesr   r{   ÚexplicitrT   rO   rd   re   r4   rz   r+   rR   r€   r   r‚   rƒ   r~   r„   )
r5   r6   rE   rU   rV   Zwanted_versÚoverrideÚinforL   Z
found_versr9   r9   r:   rJ   Ë   sN   
ÿÿý
ýü
ÿÿz)DependencyFallbacksHolder._get_cached_depr%   r   c                 C  sj   z	|  |gi ¡}W n ty   d }Y nw t|tƒs3t d|›d|j›d|d u r.d¡ d S d¡ d S |S )Nz	Variable z in the subproject z isz	not foundznot a dependency object)Zget_variable_methodr   ri   r   r   r|   r}   )r5   r%   rA   r…   r9   r9   r:   r   ÷   s   ÿ

ÿÿÿz2DependencyFallbacksHolder._get_subproject_variablerL   r   c                 C  sf   | j }| j}|  |¡}|r)|r+|  ||¡}|r-| ¡ r/||kr1t d|›¡ d S d S d S d S d S d S )NzSInconsistency: Subproject has overridden the dependency with another variable than )r.   r/   rX   r   rO   r   r|   )r5   rL   r@   rA   r%   r…   r9   r9   r:   rK     s   
ýz6DependencyFallbacksHolder._verify_fallback_consistencyc                 C  s   |dkrt  dd| j¡ dS |dkrt  dd| j¡ dS |dkr*t  dd| j¡ dS |dkr8t  d	d
| j¡ dS |dkrFt  dd| j¡ dS dS )z:Do a feature check on dependencies used by this subprojectZmpizMPI Dependencyz0.42.0ZpcapzPcap DependencyZvulkanzVulkan DependencyZlibwmfzLibWMF Dependencyz0.44.0ZopenmpzOpenMP Dependencyz0.46.0N)r   r>   r%   )r5   r6   r9   r9   r:   rN     s   ÿz9DependencyFallbacksHolder._handle_featurenew_dependenciesr   c                 C  s"   t | jr| jd | jƒS d| jƒS )Nr   Ú )r   r   r,   )r5   r9   r9   r:   r~     s   "z.DependencyFallbacksHolder._notfound_dependencyr†   rO   Úboolc                 C  s"   | sdS |dkpt || ƒd   S )NTZ	undefinedr   )r   )r†   rO   r9   r9   r:   r     s   z(DependencyFallbacksHolder._check_versionúuT.List[T.Tuple[T.Callable[[TYPE_nkwargs, TYPE_nvar, TYPE_nkwargs], T.Optional[Dependency]], TYPE_nvar, TYPE_nkwargs]]c                 C  s   g }| j D ]}| | j|gi f¡ q| jr!| | j| jg| jf¡ | jr'| js7| j D ]}| | j|gi f¡ q*| jrF| | j| jg| jf¡ |S rD   )	r   r3   rM   r.   rZ   r0   r1   rW   rk   )r5   Ú
candidatesr6   r9   r9   r:   Ú_get_candidates!  s   

z)DependencyFallbacksHolder._get_candidatesFÚforce_fallbackc                   sz  t |dƒ}|r|  jd d dd„ |D ƒ¡¡7  _t|| jƒ\}}}|r8t dt | j¡dt |¡d¡ |  	¡ S | j
 td	ƒ¡}t|tƒsIJ d
ƒ‚| j
 tdƒ¡‰ tˆ tƒsZJ d
ƒ‚|tjk| _|pw|tjkpwt‡ fdd„| jD ƒƒpw| jˆ v | _| js±| jdur±| jD ],}| j |¡\}	}
|	r°|  j|	ˆ v O  _| js¨| jdu s¨|s¨|  |	¡r®|  |	|
¡  nq„|  ¡ }|s½|r½tdƒ‚t|ƒd }t|ƒD ]q\}}|\}}}|oÕ||k|d< |oÝ||k|d< ||||ƒ}|r| ¡ r| jD ]'}| j  |¡}t! "||¡}|| j#j$| vrt#j%|| jj&dd| j#j$| |< qñ|  S |r1|s(||kr1t'd| j›dƒ‚|r8|  S qÇ|  	¡ S )NÚmodulesz (modules: {})rq   c                 s  s    | ]}t |ƒV  qd S rD   )rC   r]   r9   r9   r:   r`   5  ra   z3DependencyFallbacksHolder.lookup.<locals>.<genexpr>r   zskipped: featureÚdisabledÚ	wrap_modezfor mypyÚforce_fallback_forc                 3  s    | ]}|ˆ v V  qd S rD   r9   )r^   r6   ©r”   r9   r:   r`   D  ra   FTz-Dependency is required but has no candidates.r   Úrequired)rˆ   zDependency z is required but not found.)(r   r4   Úformatrƒ   r   r%   r   rd   re   r~   r+   Z
get_optionr
   ri   r	   Úlistr2   r1   rg   r   r.   r   r-   Zfind_dep_providerrX   r?   r   r   r=   Ú	enumeraterO   r   rP   r   rQ   r   r‡   ZDependencyOverrideZcurrent_noder   )r5   rE   r   Úmodsr’   r–   Zfeaturer“   r6   r@   rA   rŽ   Úlastr_   ÚitemÚfuncrF   rG   rT   rU   rV   r9   r•   r:   Úlookup2  sh   
$ ÿþý
ü

ÿ€þz DependencyFallbacksHolder.lookup)NN)
r   r   r   r   r   r    r!   r"   r#   r$   )r;   r<   r#   r$   )r@   rC   rA   rC   r#   r$   )rE   r   rF   r   rG   r   r#   rH   )r@   rC   r#   rl   )r@   rC   rA   rC   rE   r   r#   rH   )r6   rC   rE   r   r#   rH   )r%   r   rA   rC   r#   rH   )rL   r   r#   r$   )r6   rC   r#   r$   )r#   r   )r†   r   rO   rC   r#   rŒ   )r#   r   )F)rE   r   r   rŒ   r#   r   )Ú__name__Ú
__module__Ú__qualname__r*   rB   r?   rM   rW   rZ   rk   rX   rY   rJ   r   rK   rN   r~   Ústaticmethodr   r   rž   Ú__classcell__r9   r9   r7   r:   r      s*    ÿ






 

?
,

	

r   )!Ú
__future__r   Zinterpreterobjectsr   r‹   r   r   r   Úwrapr	   Zmesonlibr
   r   r   r   r   r   r   r   Zinterpreterbaser   r   r   r   ÚtypingÚTÚTYPE_CHECKINGr   r   r   r   r   r   r9   r9   r9   r:   Ú<module>   s    