o
    Wod*                     @  s`  d dl mZ d dlZd dlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ ejrid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 ddlmZmZ ddlmZ G dd dZ G dd deZ!G dd de!Z"ej#G dd dZ$G dd de!Z%G dd de%Z&G dd de%Z'd'd#d$Z(G d%d& d&Z)dS )(    )annotationsN   )mesonlib)IncludeDirs)noKwargs	noPosargs)relpathHoldableObjectMachineChoice)ExternalProgram)build)Interpreter)MachineHolder)TYPE_varTYPE_kwargs)OverrideProgram)WrapMode)EnvironmentVariables
Executable)
Dependencyc                   @  s   e Zd ZdZdCddZdDdEddZddddejfdFdd Z		dGdHd%d&Z			dIdJd)d*Z
			dKdLd2d3Zd4ejddfdMd:d;Zd4ejddfdNd<d=ZdOdAdBZdS )PModuleStatezObject passed to all module methods.

    This is a WIP API provided to modules, it should be extended to have everything
    needed so modules does not touch any other part of Meson internal APIs.
    interpreter'Interpreter'returnNonec                 C  s  || _ |j | _t|j |j | _|j| _|j| _|j	| _	|j
| _
|j| _|jj| _|jj|j j| _|j| _|jj| _|jj| _|j | _|j | _|jjj| _|jjj|ji | _td|jd j | _!td|jd j | _"td|jd j | _#|j$| _$d S )Nr   build_machinehost_machinetarget_machine)%_interpreterenvironmentget_source_dirZsource_rootr   get_build_dirZbuild_to_src
subprojectZsubdirZroot_subdirZcurrent_linenor   project_nameZdep_manifestZactive_projectnameversionZproject_versionZbackendtargetsdataZget_headersheadersZget_manZmanZglobal_argshostZprojects_argsgetZproject_argsTcastbuiltinZheld_objectr   r   r   current_nodeselfr    r0   zhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/__init__.py__init__,   s.   



zModuleState.__init__-Iinclude_dirs+T.Iterable[T.Union[str, build.IncludeDirs]]prefixstrT.List[str]c                   s   |sg S | j  }| j  }g }|D ]/}t|tr#|  | g7 }q| fdd|||D  | fdd| D  q|S )Nc                      g | ]}  | qS r0   r0   .0ir6   r0   r1   
<listcomp>T       z0ModuleState.get_include_args.<locals>.<listcomp>c                   r9   r0   r0   r:   r=   r0   r1   r>   U   r?   )r   r    r!   
isinstancer7   extendZto_string_listZget_extra_build_dirs)r/   r4   r6   srcdirZbuilddirZdirs_strdirsr0   r=   r1   get_include_argsH   s   


 zModuleState.get_include_argsTNFprog=T.Union[mesonlib.FileOrString, T.List[mesonlib.FileOrString]]requiredboolversion_funcTT.Optional[T.Callable[[T.Union[ExternalProgram, Executable, OverrideProgram]], str]]wantedT.Optional[str]silentfor_machiner
   5T.Union[ExternalProgram, Executable, OverrideProgram]c                 C  s(   t |ts|g}| jj||||||dS )N)rG   rI   rK   rM   rN   )r@   listr   Zfind_program_impl)r/   rE   rG   rI   rK   rM   rN   r0   r0   r1   find_programY   s
   
zModuleState.find_programnamedepnamevarname9T.Union['Executable', ExternalProgram, 'OverrideProgram']c           
      C  s   | j |gg }|d ur|S | jtj|}|d ur t||S | j|dd|d}|	 r@|j
dkr@|j|d}	|	r@t||	gS | j|||dS )NTF)nativerG   rK   	pkgconfig)rW   )rG   rK   )r   Zprogram_from_overridesr   Zlookup_binary_entryr
   HOSTr   Z
from_entry
dependencyfound	type_nameZget_variablerQ   )
r/   rR   rS   rT   rG   rK   ZprogobjZ	prog_listdepvaluer0   r0   r1   	find_toolc   s   zModuleState.find_toolrV   'Dependency'c                 C  s*   ||d}|r||d< | j | j|g|S )N)rV   rG   r$   )r   Zfunc_dependencyr-   )r/   rS   rV   rG   rK   kwargsr0   r0   r1   rY   y   s   
zModuleState.dependencyargsTT.Tuple[str, T.Union[build.Executable, build.Jar, 'ExternalProgram', mesonlib.File]]workdirenv+T.Union[T.List[str], T.Dict[str, str], str]depends6T.List[T.Union[build.CustomTarget, build.BuildTarget]]c                 C  s*   |||d}t |}| j| j|| d S )N)rc   rd   rf   )rP   r   Z	func_testr-   )r/   ra   rc   rd   rf   r`   Z	real_argsr0   r0   r1   test   s   zModuleState.test r"   machinelangmodule0T.Union[T.List[str], str, int, bool, 'WrapMode']c              	   C  s   | j jt|||||S N)r   Zcoredata
get_optionr   	OptionKey)r/   rR   r"   rj   rk   rl   r0   r0   r1   ro      s   zModuleState.get_optionc                 C  s    t |||||}|| jjjv S rn   )r   rp   r   Zuser_defined_optionsZcmd_line_options)r/   rR   r"   rj   rk   rl   keyr0   r0   r1   is_user_defined_option   s   z"ModuleState.is_user_defined_optionrC   %T.Iterable[T.Union[str, IncludeDirs]]T.Iterable[IncludeDirs]c                 c  s2    |D ]}t |tr|V  q| j|gV  qdS )zConvert raw include directory arguments to only IncludeDirs

        :param dirs: An iterable of strings and IncludeDirs
        :return: None
        :yield: IncludeDirs objects
        N)r@   r   r   Zbuild_incdir_object)r/   rC   dr0   r0   r1   process_include_dirs   s   
z ModuleState.process_include_dirsr   r   r   r   )r3   )r4   r5   r6   r7   r   r8   )rE   rF   rG   rH   rI   rJ   rK   rL   rM   rH   rN   r
   r   rO   )TN)rR   r7   rS   r7   rT   r7   rG   rH   rK   rL   r   rU   )FTN)
rS   r7   rV   rH   rG   rH   rK   rL   r   r_   )NNN)
ra   rb   rc   rL   rd   re   rf   rg   r   r   )rR   r7   r"   r7   rj   r
   rk   rL   rl   rL   r   rm   )rR   r7   r"   r7   rj   r
   rk   rL   rl   rL   r   rH   )rC   rs   r   rt   )__name__
__module____qualname____doc__r2   rD   r
   rX   rQ   r^   rY   rh   ro   rr   rv   r0   r0   r0   r1   r   %   s<    

r   c                   @  s   e Zd ZdZdddZdS )ModuleObjectz3Base class for all objects returned by modules
    r   r   c                 C  s
   i | _ d S rn   )methodsr/   r0   r0   r1   r2      s   zModuleObject.__init__Nr   r   )rx   ry   rz   r{   r2   r0   r0   r0   r1   r|      s    r|   c                   @  s   e Zd ZdS )MutableModuleObjectN)rx   ry   rz   r0   r0   r0   r1   r      s    r   c                   @  sJ   e Zd ZU dZded< dZded< dZded< dZd	ed
< dZded< dS )
ModuleInfozMetadata about a Module.r7   rR   NrL   added
deprecatedFrH   unstable
stabilized)	rx   ry   rz   r{   __annotations__r   r   r   r   r0   r0   r0   r1   r      s   
 r   c                      sV   e Zd ZU dZded< d fddZeedddZe	dddZ
dddZ  ZS )NewExtensionModule=Class for modern modules

    provides the found method.
    r   INFOr   r   c                   s    t    | jd| ji d S )NrZ   )superr2   r}   updatefound_methodr~   	__class__r0   r1   r2      s   

zNewExtensionModule.__init__state'ModuleState'ra   T.List['TYPE_var']r`   'TYPE_kwargs'rH   c                 C  s   |   S rn   )rZ   )r/   r   ra   r`   r0   r0   r1   r      s   zNewExtensionModule.found_methodc                   C     dS )NTr0   r0   r0   r0   r1   rZ         zNewExtensionModule.found"T.Optional['EnvironmentVariables']c                 C  s   d S rn   r0   r~   r0   r0   r1   
get_devenv   s   zNewExtensionModule.get_devenvr   )r   r   ra   r   r`   r   r   rH   r   rH   )r   r   )rx   ry   rz   r{   r   r2   r   r   r   staticmethodrZ   r   __classcell__r0   r0   r   r1   r      s   
 r   c                      s   e Zd Zd fddZ  ZS )ExtensionModuler   r   r   r   c                   s   t    || _d S rn   )r   r2   r   r.   r   r0   r1   r2      s   

zExtensionModule.__init__rw   )rx   ry   rz   r2   r   r0   r0   r   r1   r      s    r   c                      s0   e Zd ZdZd fddZedd	d
Z  ZS )NotFoundExtensionModuler   rR   r7   r   r   c                   s   t    t|| _d S rn   )r   r2   r   r   )r/   rR   r   r0   r1   r2      s   
z NotFoundExtensionModule.__init__rH   c                   C  r   )NFr0   r0   r0   r0   r1   rZ      r   zNotFoundExtensionModule.found)rR   r7   r   r   r   )rx   ry   rz   r{   r2   r   rZ   r   r0   r0   r   r1   r      s
    r   fnamemesonlib.FileOrStringr   rH   c                 C  s   |  dd }|dv S )z
    Check if the file is a library-like file generated by a module-specific
    target, such as GirTarget or TypelibTarget
    .>   ZgirZtypelib)split)r   suffixr0   r0   r1   is_module_library   s   r   c                   @  s   e Zd Zd
ddZd	S )ModuleReturnValuereturn_valueT.Optional['TYPE_var']new_objects@T.Sequence[T.Union['TYPE_var', 'build.ExecutableSerialisation']]r   r   c                 C  s   || _ t|ts
J || _d S rn   )r   r@   rP   r   )r/   r   r   r0   r0   r1   r2     s   
zModuleReturnValue.__init__N)r   r   r   r   r   r   )rx   ry   rz   r2   r0   r0   r0   r1   r     s    r   )r   r   r   rH   )*
__future__r   dataclassestypingr*   ri   r   r   r   Zinterpreterbase.decoratorsr   r   r   r	   r
   Zprogramsr   TYPE_CHECKINGr   r   Zinterpreter.interpreterobjectsr   Zinterpreterbaser   r   r   wrapr   r   r   dependenciesr   r   r|   r   	dataclassr   r   r   r   r   r   r0   r0   r0   r1   <module>   s8    

	