o
    Wod)                     @  s8  d dl m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	m
Z
mZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ejrOddlmZ G dd deZG dd deZG dd deZG dd deZG dd deZedejejgedZ edejej!ej"gedZ#edejejgedZ$dS )    )annotationsN   )mlog)mesonlib)
Popen_safeextract_as_listversion_compare_many)detect_cpu_family   )DependencyExceptionDependencyMethodsDependencyTypeNameSystemDependency)ConfigToolDependency)DependencyFactory)Environmentc                      s   e Zd Zd fd	d
Z  ZS )GLDependencySystemnamestrenvironment'Environment'kwargsT.Dict[str, T.Any]returnNonec                   s   t  ||| | jj| j  rd| _ddg| _d S | jj| j  r-d| _dg| _d S | j	
d|g }| j	dd|d }|rK|rKd| _|| _d S |rQtd	d S )
NTz
-frameworkZOpenGLz
-lopengl32ZGLzGL/gl.h r   z8Found GL runtime library but no development header files)super__init__envZmachinesZfor_machineZ	is_darwinis_found	link_args
is_windowsclib_compilerfind_library
has_headerr   )selfr   r   r   Zlinksr$   	__class__ yhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/ui.pyr   '   s"   

zGLDependencySystem.__init__)r   r   r   r   r   r   r   r   __name__
__module____qualname__r   __classcell__r(   r(   r&   r)   r   &   s    r   c                      sZ   e Zd ZdgZdZd fdd	ZddddZed ddZed!ddZ	d"ddZ
  ZS )#GnuStepDependencyzgnustep-configr   r   r   r   r   r   c                   sj   t  jd||dd | jsd S |dg | _| | dgd| _| | d| jv r,dnd	gd
| _	d S )NZgnustepobjclanguagemodulesz--objc-flagscompile_argsZguiz
--gui-libsz--base-libsr    )
r   r   r   getr3   filter_argsget_config_valuer4   weird_filterr    )r%   r   r   r&   r(   r)   r   D   s   zGnuStepDependency.__init__Nr   versionsT.Optional[T.List[str]]
returncodeint1T.Tuple[T.Optional[T.List[str]], T.Optional[str]]c              	   C  s   | j d g}zt|dg d d \}}W n ttfy!   Y dS w |j|kr)dS || _|  }|r=t||d s=d |fS ||fS )Nr   z--helpr   )NN)toolsr   FileNotFoundErrorPermissionErrorr;   configdetect_versionr   )r%   r9   r;   toolpoutZfound_versionr(   r(   r)   find_configO   s   
zGnuStepDependency.find_configelemsT.List[str]c                 C  s   dd | D S )zWhen building packages, the output of the enclosing Make is
        sometimes mixed among the subprocess output. I have no idea why. As a
        hack filter out everything that is not a flag.
        c                 S  s   g | ]	}| d r|qS )-)
startswith).0er(   r(   r)   
<listcomp>d   s    z2GnuStepDependency.weird_filter.<locals>.<listcomp>r(   )rG   r(   r(   r)   r8   ^   s   zGnuStepDependency.weird_filterargsc                 C  sT   g }| D ]#}| ds"| ds"| ds"|dks"| dr'|dks'|| q|S )zzgnustep-config returns a bunch of garbage args such as -O2 and so
        on. Drop everything that is not needed.
        z-D-f-Iz-pthreadz-Wz-Wall)rJ   append)rN   resultfr(   r(   r)   r6   f   s    

zGnuStepDependency.filter_argsr   c           
      C  s   |  dgdd }|  dgdd }tj|dd}d}tj }d|d	< t|d
dd
|dg||tjd\}}}|	 }	|	sDt
d d}	|	S )Nz--variable=GNUMAKEvariabler   z--variable=GNUSTEP_MAKEFILESZ
Additionalz	base.makezprint-%:
	@echo '$($*)'ZgnuZFOUNDATION_LIBrO   rI   zprint-GNUSTEP_BASE_VERSION)r   writestdinz4Couldn't detect GNUStep version, falling back to '1'1)r7   ospathjoinenvironcopyr   
subprocessPIPEstripr   debug)
r%   ZgmakeZmakefile_dirZ	base_makeZprintverr   rD   orL   versionr(   r(   r)   rB   u   s    

z GnuStepDependency.detect_version)r   r   r   r   r   r   )Nr   )r9   r:   r;   r<   r   r=   )rG   rH   r   rH   )rN   rH   r   rH   )r   r   )r+   r,   r-   r>   	tool_namer   rF   staticmethodr8   r6   rB   r.   r(   r(   r&   r)   r/   ?   s    r/   c                      s(   e Zd ZdgZdZd
 fdd	Z  ZS )SDL2DependencyConfigToolzsdl2-configr   r   r   r   r   r   c                   s>   t  ||| | jsd S | dgd| _| dgd| _d S )Nz--cflagsr4   --libsr    )r   r   r   r7   r4   r    )r%   r   r   r   r&   r(   r)   r      s
   z!SDL2DependencyConfigTool.__init__)r   r   r   r   r   r   )r+   r,   r-   r>   rc   r   r.   r(   r(   r&   r)   re      s    re   c                      s8   e Zd Zg dZdZd fddZedddZ  ZS )WxDependency)zwx-config-3.0zwx-config-3.1	wx-configzwx-config-gtk3rh   r   r   r   r   c                   s   t  jd||dd | jsd S | || _g }| jr6|d t| j| d }d|v r6t	
d d| _d S | d	g| | j d
| _| dg| | j d| _d S )NZ	WxWidgetscppr1   z--static=yesr   zNo config found to matchz&WxWidgets is missing static libraries.Fz
--cxxflagsr4   rf   r    )r   r   r   get_requestedZrequested_modulesstaticrQ   r   rA   r   r`   r7   r4   r    )r%   r   r   
extra_argserrr&   r(   r)   r      s   

zWxDependency.__init__r   rH   c                 C  s6   d| vrg S t | d}|D ]}t|tstdq|S )Nr3   z)wxwidgets module argument is not a string)r   
isinstancer   r   )r   
candidatescr(   r(   r)   rj      s   

zWxDependency.get_requested)r   r   r   r   )r   r   r   rH   )	r+   r,   r-   r>   rc   r   rd   rj   r.   r(   r(   r&   r)   rg      s    rg   c                      s    e Zd Zdd fddZ  ZS )VulkanDependencySystemNr   r   r   r   r   r   r2   T.Optional[str]r   r   c                   s  t  j||||d ztjd | _tj| jstdW n ty)   d | _Y nw | jrd}d}d}t	
 rId}d}d	}t| jjjjd
krId}tj| j|}tj|dd}	tj| j|}
| j|||
g}|sptdtj|	sztdtd| _d| _| jd|  | jd|
  | jd|  d S | jd|g }|d ur| jjdd|ddd rd| _|D ]}| j| qd S d S d S )Nr1   Z
VULKAN_SDKz$VULKAN_SDK must be an absolute path.vulkanlibincludezvulkan-1ZLib32Includex86_64Libzvulkan.hz.VULKAN_SDK point to invalid directory (no lib)z2VULKAN_SDK point to invalid directory (no include)
vulkan_sdkTrP   z-Lz-lzvulkan/vulkan.hr   )Zdisable_cacher   )r   r   rX   r[   ry   rY   isabsr   KeyErrorr   r!   r	   r   Zcoredata	compilershostrZ   r"   r#   isfiler   	type_namer   r4   rQ   r    r$   )r%   r   r   r   r2   lib_namelib_dirinc_dirZinc_pathheaderZlib_pathZfind_libZlibsrt   r&   r(   r)   r      sP   

 zVulkanDependencySystem.__init__)N)
r   r   r   r   r   r   r2   rr   r   r   r*   r(   r(   r&   r)   rq      s    rq   gl)Zsystem_classZsdl2)Zconfigtool_classrs   )%
__future__r   rX   r]   typingTr   r   r   r   r   r   r   r	   baser   r   r   r   Z
configtoolr   factoryr   TYPE_CHECKINGr   r   r/   re   rg   rq   Z	PKGCONFIGZSYSTEMZ
gl_factoryZCONFIG_TOOLZEXTRAFRAMEWORKZsdl2_factoryZvulkan_factoryr(   r(   r(   r)   <module>   sB   M&8


