
    e.                    h   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j8                  rddlmZ  G d de      Z G d de      Zeed<    G d de      Z  G d de      Z!e!ed<    G d de      Z" edejF                  ejH                  ge      xed<   Z% edejF                  ejL                  ejN                  ejP                  ge d      xed<   Z) ed ejF                  ejH                  ge"      xed <   Z*y)!    )annotationsN   )mlog)mesonlib)CrossNoRunException)
Popen_safeextract_as_listversion_compare_many)detect_cpu_family   )DependencyExceptionDependencyMethodsDependencyTypeNameSystemDependency)ConfigToolDependency)packages)DependencyFactory)Environmentc                        e Zd Zd fdZ xZS )GLDependencySystemc                   t         |   |||       | j                  j                  | j                     j                         rd| _        ddg| _        y | j                  j                  | j                     j                         rd| _        dg| _        y | j                  j                  d|g       }| j                  j                  dd|      d   }|r|rd| _        || _        y |rt        d	      y )
NTz
-frameworkOpenGLz
-lopengl32GLzGL/gl.h r   z8Found GL runtime library but no development header files)super__init__envmachinesfor_machine	is_darwinis_found	link_args
is_windowsclib_compilerfind_library
has_headerr   )selfnameenvironmentkwargslinksr&   	__class__s         </usr/lib/python3/dist-packages/mesonbuild/dependencies/ui.pyr   zGLDependencySystem.__init__*   s    {F388T--.88: DM*H5DNXXt//0;;= DM*^DN&&33D+rJE++66y"kRSTUJ $!&)*dee     )r(   strr)   'Environment'r*   T.Dict[str, T.Any]returnNone__name__
__module____qualname__r   __classcell__r,   s   @r-   r   r   )   s    f fr.   r   c                  `     e Zd ZdgZdZd fdZdd	dZed
d       Zedd       Z	ddZ
 xZS )GnuStepDependencyzgnustep-configc                0   t         |   d||d       | j                  sy |j                  dg       | _        | j                  | j                  dgd            | _        | j                  | j                  d| j                  v rdnd	gd
            | _	        y )Ngnustepobjclanguagemodulesz--objc-flagscompile_argsguiz
--gui-libsz--base-libsr"   )
r   r   r!   getrA   filter_argsget_config_valuerB   weird_filterr"   )r'   r)   r*   r,   s      r-   r   zGnuStepDependency.__init__G   s    K&I}}zz)R0 ,,!!>"2NCE**4+@+@"dll2\F, r.   c                    | j                   d   g}	 t        |dgz         d d \  }}|j                  |k7  ry|| _        | j                         }|rt        ||      d   sd |fS ||fS # t        t        f$ r Y yw xY w)Nr   z--helpr   )NN)toolsr   FileNotFoundErrorPermissionError
returncodeconfigdetect_versionr
   )r'   versionsrL   toolpoutfound_versions          r-   find_configzGnuStepDependency.find_configR   s    

1	 z 122A6FAs <<:%++-0I!L-((m$$ "?3 	 	 s   A' 'A98A9c                P    | D cg c]  }|j                  d      s| c}S c c}w )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.
        -)
startswith)elemses     r-   rG   zGnuStepDependency.weird_filtera   s#     !6aALL$5666s   ##c                    g }| D ]c  }|j                  d      s?|j                  d      s.|j                  d      s|dk(  s|j                  d      sM|dk(  rS|j                  |       e |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)rW   append)argsresultfs      r-   rE   zGnuStepDependency.filter_argsi   sh    
  	!A||D!||D)||D)JT*1<a 	! r.   c                   | j                  dgd      d   }| j                  dgd      d   }t        j                  j                  |dd      }d}t        j                  j                         }d|d	<   t        |d
dd
|dg||t        j                        \  }}}|j                         }	|	st        j                  d       d}	|	S )Nz--variable=GNUMAKEvariabler   z--variable=GNUSTEP_MAKEFILES
Additionalz	base.makezprint-%:
	@echo '$($*)'gnuFOUNDATION_LIBr[   rV   zprint-GNUSTEP_BASE_VERSION)r   writestdinz4Couldn't detect GNUStep version, falling back to '1'1)rF   ospathjoinenvironcopyr   
subprocessPIPEstripr   debug)
r'   gmakemakefile_dir	base_makeprintverr   rQ   orY   versions
             r-   rN   z GnuStepDependency.detect_versionx   s    %%';&<jI!L,,.L-MzZ[\]GGLL|[I	 /jjoo %eT3i:<!$HJOOM1a '')JJMNGr.   )r)   r0   r*   r1   r2   r3   )Nr   )rO   zT.Optional[T.List[str]]rL   intr2   z1T.Tuple[T.Optional[T.List[str]], T.Optional[str]])rX   T.List[str]r2   ry   )r^   ry   r2   ry   )r2   r/   )r5   r6   r7   rI   	tool_namer   rT   staticmethodrG   rE   rN   r8   r9   s   @r-   r;   r;   B   sG    E I	% 7 7  r.   r;   r=   c                  *     e Zd ZdgZdZd fdZ xZS )SDL2DependencyConfigToolzsdl2-configc                    t         |   |||       | j                  sy | j                  dgd      | _        | j                  dgd      | _        y )Nz--cflagsrB   --libsr"   )r   r   r!   rF   rB   r"   )r'   r(   r)   r*   r,   s       r-   r   z!SDL2DependencyConfigTool.__init__   sK    {F3}} 11:,O..z;Gr.   )r(   r/   r)   r0   r*   r1   )r5   r6   r7   rI   rz   r   r8   r9   s   @r-   r}   r}      s    OEIH Hr.   r}   c                  >     e Zd Zg dZdZd fdZedd       Z xZS )WxDependency)zwx-config-3.0zwx-config-3.1	wx-configzwx-config-gtk3r   c                   t         |   d||d       | j                  sy | j                  |      | _        g }| j
                  rM|j                  d       t        | j                  |z         d   }d|v rt        j                  d       d| _        y | j                  d	g|z   | j                  z   d
      | _        | j                  dg|z   | j                  z   d      | _        y )N	WxWidgetscppr?   z--static=yesr   zNo config found to matchz&WxWidgets is missing static libraries.Fz
--cxxflagsrB   r   r"   )r   r   r!   get_requestedrequested_modulesstaticr]   r   rM   r   rq   rF   rB   r"   )r'   r)   r*   
extra_argserrr,   s        r-   r   zWxDependency.__init__   s    k6EJ}}!%!3!3F!;
;;n- T[[:56q9C)S0

CD % !11<.:2MPTPfPf2fhvw..zJ/FI_I_/_almr.   c                n    d| vrg S t        | d      }|D ]  }t        |t              rt        d       |S )NrA   z)wxwidgets module argument is not a string)r	   
isinstancer/   r   )r*   
candidatescs      r-   r   zWxDependency.get_requested   sJ    F"I$VY7
 	WAa%)*UVV	W r.   )r)   r0   r*   r1   )r*   r1   r2   ry   )	r5   r6   r7   rI   rz   r   r{   r   r8   r9   s   @r-   r   r      s'    MEIn,  r.   r   	wxwidgetsc                  "     e Zd Zdd fdZ xZS )VulkanDependencySystemc                ,   t         |   ||||       	 t        j                  d   | _        t        j
                  j                  | j                        st        d      	 | j                  rd}d}d}t        j                         r>d}d}d	}t        | j                  j                  j                  j                        d
k(  rd}t        j
                  j!                  | j                  |      }t        j
                  j!                  |dd      }	t        j
                  j!                  | j                  |      }
| j"                  j%                  |||
g      }|st        d      t        j
                  j'                  |	      st        d      t)        d      | _        d| _        | j.                  j1                  d|z          | j2                  j1                  d|
z          | j2                  j1                  d|z          nj| j"                  j%                  d|g       }|K| j"                  j5                  dd|d      d   r)d| _        |D ]  }| j2                  j1                  |        | j,                  rd}	 | j"                  j7                  ||| j.                        }|r-|j:                  r!|j<                  dk(  r|j>                  | _         y | j                  rtC        jD                  dtC        jF                  t        j
                  jH                         d| j                        }|r|jK                  d      | _         y tM        jN                  d| j                   d       y y y # t        $ r d | _        Y w xY w# t8        $ r d }Y w xY w)Nr?   
VULKAN_SDKz$VULKAN_SDK must be an absolute path.vulkanlibincludezvulkan-1Lib32Includex86_64Libzvulkan.hz.VULKAN_SDK point to invalid directory (no lib)z2VULKAN_SDK point to invalid directory (no include)
vulkan_sdkTr\   z-Lz-lzvulkan/vulkan.hr   )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;
}
)r   	VulkanSDKz([0-9]+(?:\.[0-9]+)+)r   z Environment variable VULKAN_SDK=z7 is present, but Vulkan version could not be extracted.)(r   r   ri   rl   r   rj   isabsr   KeyErrorr   r#   r   r   coredata	compilershostrk   r$   r%   isfiler   	type_namer!   rB   r]   r"   r&   runr   compiledrL   stdoutrw   researchescapesepgroupr   warning)r'   r(   r)   r*   r@   lib_namelib_dirinc_dirinc_pathheaderlib_pathfind_liblibsr   get_versionr   matchr,   s                    r-   r   zVulkanDependencySystem.__init__   s   {FXF	# jj6DO77==1)*PQQ 2
 ??  HGG""$%!#$TXX%6%6%@%@%E%EF(R#G ww||DOOW=HWW\\(HjAFww||DOOW=H))66xxjYH)*Z[[77>>&))*^__ 0=DN DM$$TH_5NN!!$/2NN!!$/2 %%228["MDD$6$6$A$ABSUWYdtx$A$yz{$| $ /CNN))#./ ==
K((,,[+RVRcRc,d s||!(;"zz 		Yryy/E.FF["\^b^m^mn#(;;q>DLLL#CDOOCT  UL  "M  N !% U  	#"DO	#p ' s$   AM. =(N .NNNN)N)
r(   r/   r)   r0   r*   r1   r@   zT.Optional[str]r2   r3   r4   r9   s   @r-   r   r      s    JN JNr.   r   gl)system_classsdl2SDL2)configtool_class
cmake_namer   )+
__future__r   ri   r   rn   typingTr   r   r   compilers.compilersr   r   r	   r
   r)   r   baser   r   r   r   
configtoolr   detectr   factoryr   TYPE_CHECKINGr   r   r;   r}   r   r   	PKGCONFIGSYSTEM
gl_factoryCONFIG_TOOLEXTRAFRAMEWORKCMAKEsdl2_factoryvulkan_factory r.   r-   <module>r      sZ  " # 	 	     5  , ^ ^ ,  &??)f) f2J, JX ( 
H3 
H#' #J % LN- LN\ 0  "3":":;#  #4
  "3"?"?ARAaAactczcz{-	#  < '8  "3":":;''  ^r.   