o
    e.                     @  s  d dl m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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 d	dlmZ ejr_ddlmZ G dd deZG dd deZeed< G dd deZ G dd deZ!e!ed< G dd deZ"edej#ej$ged ed< Z%edej#ej&ej'ej(ge dd ed< Z)ed ej#ej$ge"d ed < Z*dS )!    )annotationsN   )mlog)mesonlib)CrossNoRunException)
Popen_safeextract_as_listversion_compare_many)detect_cpu_family   )DependencyExceptionDependencyMethodsDependencyTypeNameSystemDependency)ConfigToolDependency)packages)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__ ?/usr/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 )Ngnustepobjclanguagemodulesz--objc-flagscompile_argsZguiz
--gui-libsz--base-libsr"   )
r   r   r!   getr6   filter_argsget_config_valuer7   weird_filterr"   )r'   r   r   r(   r*   r+   r   G   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'   r<   r>   toolpoutZfound_versionr*   r*   r+   find_configR   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>g   s    z2GnuStepDependency.weird_filter.<locals>.<listcomp>r*   )rJ   r*   r*   r+   r;   a   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)rM   append)rQ   resultfr*   r*   r+   r9   i   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_LIBrR   rL   zprint-GNUSTEP_BASE_VERSION)r    writestdinz4Couldn't detect GNUStep version, falling back to '1'1)r:   ospathjoinenvironcopyr   
subprocessPIPEstripr   debug)
r'   ZgmakeZmakefile_dirZ	base_makeZprintverr    rG   orO   versionr*   r*   r+   rE   x   s    

z GnuStepDependency.detect_version)r   r   r   r   r   r   )Nr   )r<   r=   r>   r?   r   r@   )rJ   rK   r   rK   )rQ   rK   r   rK   )r   r   )r-   r.   r/   rA   	tool_namer   rI   staticmethodr;   r9   rE   r0   r*   r*   r(   r+   r1   B   s    r1   r2   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--cflagsr7   --libsr"   )r   r   r!   r:   r7   r"   )r'   r   r   r   r(   r*   r+   r      s
   z!SDL2DependencyConfigTool.__init__)r   r   r   r   r   r   )r-   r.   r/   rA   rf   r   r0   r*   r*   r(   r+   rh      s    rh   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-gtk3rk   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cppr4   z--static=yesr   zNo config found to matchz&WxWidgets is missing static libraries.Fz
--cxxflagsr7   ri   r"   )r   r   r!   get_requestedZrequested_modulesstaticrT   r   rD   r   rc   r:   r7   r"   )r'   r   r   
extra_argserrr(   r*   r+   r      s   

zWxDependency.__init__r   rK   c                 C  s6   d| vrg S t | d}|D ]}t|tstdq|S )Nr6   z)wxwidgets module argument is not a string)r   
isinstancer   r   )r   
candidatescr*   r*   r+   rm      s   

zWxDependency.get_requested)r   r   r   r   )r   r   r   rK   )	r-   r.   r/   rA   rf   r   rg   rm   r0   r*   r*   r(   r+   rj      s    rj   Z	wxwidgetsc                      s    e Zd Zdd fddZ  ZS )VulkanDependencySystemNr   r   r   r   r   r   r5   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|  n&| jd|g }|d ur| jjdd|ddd rd| _|D ]}| j| q| jrd}z| jj||| jd}W n ty   d }Y nw |r|jr|jdkr|j| _ d S | jrt!"dt!#tjj$ d| j}|r|%d| _ d S t&'d| j d d S d S d S )Nr4   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_sdkTrS   z-Lz-lzvulkan/vulkan.hr   )Zdisable_cacher   a  #include <stdio.h>
#include <vulkan/vulkan.h>

int main() {
    printf("%i.%i.%i", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE),
                       VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE),
                       VK_VERSION_PATCH(VK_HEADER_VERSION_COMPLETE));
    return 0;
}
)ro   Z	VulkanSDKz([0-9]+(?:\.[0-9]+)+)r   z Environment variable VULKAN_SDK=z7 is present, but Vulkan version could not be extracted.)(r   r   r[   r^   r|   r\   isabsr   KeyErrorr   r#   r
   r    Zcoredata	compilershostr]   r$   r%   isfiler   	type_namer!   r7   rT   r"   r&   runr   Zcompiledr>   stdoutre   researchescapesepgroupr   warning)r'   r   r   r   r5   lib_namelib_dirinc_dirZinc_pathheaderZlib_pathZfind_libZlibsrw   get_versionr   matchr(   r*   r+   r      sj   

  zVulkanDependencySystem.__init__)N)
r   r   r   r   r   r   r5   ru   r   r   r,   r*   r*   r(   r+   rt      s    rt   gl)Zsystem_classZsdl2ZSDL2)Zconfigtool_classZ
cmake_namerv   )+
__future__r   r[   r   r`   typingTr   r   r   Zcompilers.compilersr   r   r   r	   r   r
   baser   r   r   r   Z
configtoolr   detectr   factoryr   TYPE_CHECKINGr   r   r1   rh   rj   rt   Z	PKGCONFIGZSYSTEMZ
gl_factoryZCONFIG_TOOLZEXTRAFRAMEWORKZCMAKEZsdl2_factoryZvulkan_factoryr*   r*   r*   r+   <module>   sN   L%N

