o
    uJAf5                  
   @  sJ  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	Z
e
jr-ddlmZ ddlmZ d	d
dddddddd	Zdddddddddd	Zg dZdEd"d#ZG d$d% d%eZG d&d' d'ZdFd+d,ZdGd-d.ZdHdId2d3ZdJd5d6ZG d7d8 d8ZG d9d: d:ZG d;d< d<ZG d=d> d>ZG d?d@ d@ZG dAdB dBZG dCdD dDZ dS )K    )annotations   )MesonException	OptionKey)mlogPathN)Environment)TYPE_varCCXXCUDAOBJCOBJCXXZCSharpJavaZFortranSwift)	ccppcudaobjcobjcppcsjavafortranswiftNinjaZXcodezVisual Studio 10 2010zVisual Studio 11 2012zVisual Studio 12 2013zVisual Studio 14 2015zVisual Studio 15 2017zVisual Studio 16 2019zVisual Studio 17 2022)	ninjaxcodevs2010vs2012vs2013vs2015vs2017vs2019vs2022)ZCMAKE_TOOLCHAIN_FILEZCMAKE_PROJECT_INCLUDEZMESON_PRELOAD_FILEZ!MESON_PS_CMAKE_CURRENT_BINARY_DIRZ!MESON_PS_CMAKE_CURRENT_SOURCE_DIRZMESON_PS_DELAYED_CALLSZMESON_PS_LOADEDMESON_FIND_ROOT_PATHMESON_CMAKE_SYSROOTMESON_PATHS_LISTMESON_CMAKE_ROOTenv'Environment'returnboolc                 C  sd   t d| jjv r!| jt ddk}| jjt d jdv rd}|S | jt d}t|ts0J |S )Nb_vscrt	buildtypedebug>   mddmtdT)r   coredataoptions
get_optionvalue
isinstancer,   )r)   is_debugZ	debug_opt r8   </usr/lib/python3.10/site-packages/mesonbuild/cmake/common.pycmake_is_debugB   s   r:   c                   @  s   e Zd ZdS )CMakeExceptionN)__name__
__module____qualname__r8   r8   r8   r9   r;   N   s    r;   c                   @  s    e Zd Zddd	ZdddZdS )CMakeBuildFilefiler   is_cmaker,   is_tempr+   Nonec                 C  s   || _ || _|| _d S N)r@   rA   rB   )selfr@   rA   rB   r8   r8   r9   __init__R   s   
zCMakeBuildFile.__init__strc              	   C  s(   d| j j d| j d| j d| j d	S )N<z: z; cmake=z; temp=>)	__class__r<   r@   rA   rB   rE   r8   r8   r9   __repr__W   s   (zCMakeBuildFile.__repr__N)r@   r   rA   r,   rB   r,   r+   rC   r+   rG   r<   r=   r>   rF   rL   r8   r8   r8   r9   r?   Q   s    
r?   rawrG   T.List[str]c                 C  s   g }d}d}d}| D ]9}|r|dvr|d7 }||7 }d}q
|dkr$d}q
|dv r,| }q
|dv r?|r7||7 }q
||g7 }d}q
||7 }q
||g7 }dd	 |D }|S )
N F)"'\T>   rR   rS   >   
 c                 S  s   g | ]
}t |d kr|qS )r   )len).0rr8   r8   r9   
<listcomp>t   s    z"_flags_to_list.<locals>.<listcomp>r8   )rO   rescurrescapeZ	in_stringir8   r8   r9   _flags_to_listZ   s.   



r_   c                 C  s6   | j td}t|tsJ |tv sJ dt| gS )Nbackendz-G)r2   r4   r   r6   rG   backend_generator_map)r)   backend_namer8   r8   r9   cmake_get_generator_argsw   s   rc   FT.List[T.Dict[str, TYPE_var]]
permissivec                 C  s   g }| D ]Y}|  D ]R\}}|tv r'tdt|d td td q
t|tttfr;|d| d| g7 }q
t|t	rR|rDdnd}|d| d| g7 }q
t
d	t|j|q|S )
NSettingCis not supported. See the meson docs for cross compilation support:C  - URL: https://mesonbuild.com/CMake-module.html#cross-compilation  --> Ignoring this option-D=ZONZOFFz>Type "{}" of "{}" is not supported as for a CMake define value)itemsblacklist_cmake_defsr   warningboldr6   rG   intfloatr,   r   formattyper<   )rO   re   r[   r^   keyvalval_strr8   r8   r9   cmake_defines_to_args}   s    


rw   argsc                   sr   g }dd t D }|sJ | D ]' t fdd|D r1tdt d td td q| g7 }q|S )	Nc                 S  s   g | ]}d | qS )rj   r8   rX   xr8   r8   r9   rZ          z$check_cmake_args.<locals>.<listcomp>c                 3  s    | ]}  |V  qd S rD   )
startswithry   r^   r8   r9   	<genexpr>   s    z#check_cmake_args.<locals>.<genexpr>rf   rg   rh   ri   )rm   anyr   rn   ro   )rx   r[   disr8   r}   r9   check_cmake_args   s   

r   c                   @  s"   e Zd ZddddZdd
dZdS )CMakeIncludeFpathr   isSystemr,   c                 C  s   || _ || _d S rD   r   r   )rE   r   r   r8   r8   r9   rF      s   
zCMakeInclude.__init__r+   rG   c                 C  s   d| j  d| j dS )Nz<CMakeInclude: z -- isSystem = rI   r   rK   r8   r8   r9   rL      s   zCMakeInclude.__repr__NF)r   r   r   r,   rM   rN   r8   r8   r8   r9   r      s    r   c                   @      e Zd Zd
ddZdddZd	S )CMakeFileGroupdataT.Dict[str, T.Any]r+   rC   c                 C  s   | dd| _t| dd| _| dd| _| dd| _dd	 | d
g D | _g | _| dg D ]B}t|t	rdd|v rd| dd}t|t
sKJ t|d tsTJ |  jtt|d |g7  _q3t|tru|  jtt|g7  _q3d S )NdefinesrQ   ZcompileFlagsZisGeneratedFlanguager   c                 S     g | ]}t |qS r8   r   ry   r8   r8   r9   rZ      r{   z+CMakeFileGroup.__init__.<locals>.<listcomp>sourcesZincludePathr   r   )getr   r_   flagsis_generatedr   r   includesr6   dictr,   rG   r   r   )rE   r   r^   r   r8   r8   r9   rF      s     
zCMakeFileGroup.__init__c              	   C  s   t dt d| j t dt d| j t dt ddd | jD  t dt | jr6dnd	 t d
t | j t d | j	D ]}t 
  t |  W d    n1 sdw   Y  qLd S )Nzflags        =, zdefines      =zincludes     =c                 S  r   r8   )rG   ry   r8   r8   r9   rZ      r{   z&CMakeFileGroup.log.<locals>.<listcomp>zis_generated =truefalsezlanguage     =zsources:)r   logro   joinr   r   r   r   r   r   nestedas_posix)rE   r^   r8   r8   r9   r      s   $


zCMakeFileGroup.logNr   r   r+   rC   r+   rC   r<   r=   r>   rF   r   r8   r8   r8   r9   r      s    
r   c                   @  r   )CMakeTargetr   r   r+   rC   c                 C  s  dd | dg D | _t| dd| _t| dd| _| dd| _| dd| _| d	d
| _dd t| dg D | _	| dd| _
t| dd| _t| dd| _t| dd| _| dd| _g | _| dg D ]}|  jt|g7  _qsd S )Nc                 S  r   r8   r   ry   r8   r8   r9   rZ      r{   z(CMakeTarget.__init__.<locals>.<listcomp>	artifactssourceDirectoryrQ   buildDirectorynameZfullNameZhasInstallRuleFc                 S  r   r8   r   ry   r8   r8   r9   rZ      r{   ZinstallPathsZlinkerLanguageZlinkLibrariesZ	linkFlagsZlinkLanguageFlagsrs   Z
EXECUTABLEZ
fileGroups)r   r   r   src_dir	build_dirr   	full_nameinstallsetinstall_paths	link_langr_   link_libraries
link_flagslink_lang_flagsrs   filesr   rE   r   r^   r8   r8   r9   rF      s    zCMakeTarget.__init__c              	   C  s  t dt ddd | jD  t dt | j  t dt | j  t dt | j t dt | j	 t d	t | j
rHd
nd t dt ddd | jD  t dt | j t dt d| j t dt d| j t dt d| j t dt | j t| jD ]%\}}t d| d t   |  W d    n1 sw   Y  qd S )Nzartifacts             =r   c                 S     g | ]}|  qS r8   r   ry   r8   r8   r9   rZ      r{   z#CMakeTarget.log.<locals>.<listcomp>zsrc_dir               =zbuild_dir             =zname                  =zfull_name             =zinstall               =r   r   zinstall_paths         =c                 S  r   r8   r   ry   r8   r8   r9   rZ      r{   zlink_lang             =zlink_libraries        =zlink_flags            =zlink_lang_flags       =ztype                  =zFiles :)r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   	enumerater   r   rE   idxr^   r8   r8   r9   r      s&   $$

zCMakeTarget.logNr   r   r   r8   r8   r8   r9   r      s    
r   c                   @  r   )CMakeProjectr   r   r+   rC   c                 C  sb   t |dd| _t |dd| _|dd| _g | _|dg D ]}|  jt|g7  _q"d S )Nr   rQ   r   r   targets)r   r   r   r   r   r   r   r   r8   r8   r9   rF      s   zCMakeProject.__init__c              	   C  s   t dt | j  t dt | j  t dt | j t| jD ]%\}}t d| d t 	  |  W d    n1 sGw   Y  q'd S )Nzsrc_dir   =zbuild_dir =zname      =zTarget r   )
r   r   ro   r   r   r   r   r   r   r   r   r8   r8   r9   r      s   

zCMakeProject.logNr   r   r   r8   r8   r8   r9   r      s    
	r   c                   @  r   )CMakeConfigurationr   r   r+   rC   c                 C  s>   | dd| _g | _| dg D ]}|  jt|g7  _qd S )Nr   rQ   projects)r   r   r   r   r   r8   r8   r9   rF     s
   zCMakeConfiguration.__init__c              	   C  sn   t dt | j t| jD ]%\}}t d| d t   |  W d    n1 s/w   Y  qd S )Nzname =zProject r   )r   r   ro   r   r   r   r   r   r8   r8   r9   r     s   

zCMakeConfiguration.logNr   r   r   r8   r8   r8   r9   r     s    
r   c                   @  sf   e Zd ZdddZd dd	Zd!ddZd"ddZd#ddZd$ddZd%ddZ	d$ddZ
d&ddZdS )'SingleTargetOptionsr+   rC   c                 C  s   i | _ i | _g | _d| _d S )Npreserve)opts	lang_args	link_argsr   rK   r8   r8   r9   rF     s   
zSingleTargetOptions.__init__optrG   ru   c                 C  s   || j |< d S rD   )r   )rE   r   ru   r8   r8   r9   set_opt  s   zSingleTargetOptions.set_optlangrx   rP   c                 C  s*   || j vr
g | j |< | j |  |7  < d S rD   r   )rE   r   rx   r8   r8   r9   append_args  s   

zSingleTargetOptions.append_argsc                 C  s   |  j |7  _ d S rD   r   )rE   rx   r8   r8   r9   append_link_args     z$SingleTargetOptions.append_link_argsr   r,   c                 C  s   |rd| _ d S d| _ d S )Nr   r   r   )rE   r   r8   r8   r9   set_install!  s   zSingleTargetOptions.set_installinitialc                 C  sP   g }|D ]}|d | d }|| jvr||g7 }q|dd | j D 7 }|S )Nrk   c                 S  s   g | ]\}}| d | qS )rk   r8   )rX   kvr8   r8   r9   rZ   *  s    z<SingleTargetOptions.get_override_options.<locals>.<listcomp>)findr   rl   )rE   r   r[   r^   r   r8   r8   r9   get_override_options$  s   

z(SingleTargetOptions.get_override_optionsc                 C  s   || j v r|| j |  S |S rD   r   )rE   r   r   r8   r8   r9   get_compile_args-  s   
z$SingleTargetOptions.get_compile_argsc                 C  s
   || j  S rD   r   rE   r   r8   r8   r9   get_link_args2  s   
z!SingleTargetOptions.get_link_argsc                 C  s   |ddd| j  S )NTF)r   r   r   r   r   r8   r8   r9   get_install5  r   zSingleTargetOptions.get_installNr   )r   rG   ru   rG   r+   rC   )r   rG   rx   rP   r+   rC   )rx   rP   r+   rC   )r   r,   r+   rC   )r   rP   r+   rP   )r   rG   r   rP   r+   rP   )r   r,   r+   r,   )r<   r=   r>   rF   r   r   r   r   r   r   r   r   r8   r8   r8   r9   r     s    






	
r   c                   @  sH   e Zd ZdddZddd	ZdddZdddZdddZdddZdS )TargetOptionsr+   rC   c                 C  s   t  | _i | _d S rD   )r   global_optionstarget_optionsrK   r8   r8   r9   rF   9  s   
zTargetOptions.__init__tgtrG   r   c                 C  s    || j vrt | j |< | j | S rD   )r   r   )rE   r   r8   r8   r9   __getitem__=  s   

zTargetOptions.__getitem__r   rP   c                 C  *   | j |}|| jv r| j| |}|S rD   )r   r   r   rE   r   r   r8   r8   r9   r   B     
z"TargetOptions.get_override_optionsr   c                 C  s.   | j ||}|| jv r| j| ||}|S rD   )r   r   r   )rE   r   r   r   r8   r8   r9   r   H  s   
zTargetOptions.get_compile_argsc                 C  r   rD   )r   r   r   r   r8   r8   r9   r   N  r   zTargetOptions.get_link_argsr,   c                 C  r   rD   )r   r   r   r   r8   r8   r9   r   T  r   zTargetOptions.get_installNr   )r   rG   r+   r   )r   rG   r   rP   r+   rP   )r   rG   r   rG   r   rP   r+   rP   )r   rG   r   r,   r+   r,   )	r<   r=   r>   rF   r   r   r   r   r   r8   r8   r8   r9   r   8  s    




r   )r)   r*   r+   r,   )rO   rG   r+   rP   )r)   r*   r+   rP   r   )rO   rd   re   r,   r+   rP   )rx   rP   r+   rP   )!
__future__r   mesonlibr   r   rQ   r   pathlibr   typingTTYPE_CHECKINGenvironmentr	   interpreterbaser
   language_mapra   rm   r:   r;   r?   r_   rc   rw   r   r   r   r   r   r   r   r   r8   r8   r8   r9   <module>   sV   

	

))