o
    Wªod°9  ã                
   @  s>  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	d
dddddddœ	Zddddddddddœ	Zg d¢ZdDd!d"„ZG d#d$„ d$eƒZG d%d&„ d&ƒZdEd*d+„ZdFd,d-„ZdGdHd1d2„ZdId4d5„ZG d6d7„ d7ƒZG d8d9„ d9ƒZG d:d;„ d;ƒZG d<d=„ d=ƒZG d>d?„ d?ƒZG d@dA„ dAƒZG dBdC„ dCƒZdS )Jé    )Úannotationsé   )ÚMesonExceptionÚ	OptionKey)Úmlog©ÚPathN)ÚEnvironmentÚCÚCXXZCUDAZOBJCZOBJCXXZCSharpÚJavaZFortranZSwift)	ÚcÚcppZcudaÚobjcZobjcppÚcsÚjavaZfortranZswiftZ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)	ZninjaZxcodeZvs2010Zvs2012Zvs2013Zvs2015Zvs2017Zvs2019Z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_LOADEDZMESON_FIND_ROOT_PATHZMESON_CMAKE_SYSROOTZMESON_PATHS_LISTZ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 )NZb_vscrtZ	buildtypeÚdebug>   ZmddZmtdT)r   ÚcoredataÚoptionsÚ
get_optionÚvalueÚ
isinstancer   )r   Zis_debugZ	debug_opt© r   úvhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/cmake/common.pyÚcmake_is_debugA   s   r   c                   @  s   e Zd ZdS )ÚCMakeExceptionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   M   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$   r%   r&   )Úselfr$   r%   r&   r   r   r   Ú__init__Q   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$   r%   r&   ©r)   r   r   r   Ú__repr__V   s   (zCMakeBuildFile.__repr__N)r$   r   r%   r   r&   r   r   r'   ©r   r+   ©r    r!   r"   r*   r0   r   r   r   r   r#   P   s    
r#   Úrawr+   ú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>   r6   r7   >   ú Ú
c                 S  s   g | ]
}t |ƒd kr|‘qS )r   )Úlen)Ú.0Úrr   r   r   Ú
<listcomp>s   s    z"_flags_to_list.<locals>.<listcomp>r   )r3   ÚresÚcurrÚescapeZ	in_stringÚir   r   r   Ú_flags_to_listY   s.   



rC   c                 C  s6   | j  tdƒ¡}t|tƒsJ ‚|tv sJ ‚dt| gS )NZbackendz-G)r   r   r   r   r+   Úbackend_generator_map)r   Zbackend_namer   r   r   Úcmake_get_generator_argsv   s   rE   FúT.AnyÚ
permissivec                 C  sü   g }t | tƒs
| g} | D ]o}t |tƒstd t|ƒj¡ƒ‚| ¡ D ]Y\}}t |tƒs,J ‚|t	v rEt
 dt
 |¡d¡ t
 d¡ t
 d¡ q!t |tttfƒrY|d|› d|› g7 }q!t |tƒrp|rbdnd	}|d|› d|› g7 }q!td
 t|ƒj|¡ƒ‚q|S )Nz4Invalid CMake defines. Expected a dict, but got a {}ÚSettingúCis 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)r   ÚlistÚdictr   ÚformatÚtyper    Úitemsr+   Úblacklist_cmake_defsr   ÚwarningÚboldÚintÚfloatr   )r3   rG   r?   rB   ÚkeyÚvalZval_strr   r   r   Úcmake_defines_to_args|   s*   




órZ   Ú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 )rL   r   ©r<   Úxr   r   r   r>   ˜   ó    z$check_cmake_args.<locals>.<listcomp>c                 3  s    | ]}ˆ   |¡V  qd S r(   )Ú
startswithr\   ©rB   r   r   Ú	<genexpr>›   s   € z#check_cmake_args.<locals>.<genexpr>rH   rI   rJ   rK   )rS   Úanyr   rT   rU   )r[   r?   Údisr   r`   r   Úcheck_cmake_args–   s   

rd   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 r(   ©rf   rg   )r)   rf   rg   r   r   r   r*   ¤   s   
zCMakeInclude.__init__r   r+   c                 C  s   d| j › d| j› dS )Nz<CMakeInclude: z -- isSystem = r-   rh   r/   r   r   r   r0   ¨   s   zCMakeInclude.__repr__N©F)rf   r   rg   r   r1   r2   r   r   r   r   re   £   s    re   c                   @  ó    e Zd Zd
dd„Zddd„Zd	S )ÚCMakeFileGroupÚdataúT.Dict[str, T.Any]r   r'   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Údefinesr5   ZcompileFlagsZisGeneratedFÚlanguager
   c                 S  ó   g | ]}t |ƒ‘qS r   r   r\   r   r   r   r>   ±   r^   z+CMakeFileGroup.__init__.<locals>.<listcomp>ÚsourcesZincludePathrf   rg   )Úgetrn   rC   ÚflagsÚis_generatedro   rq   Úincludesr   rO   r   r+   re   r   )r)   rl   rB   rg   r   r   r   r*   ¬   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  rp   r   )r+   r\   r   r   r   r>   Á   r^   z&CMakeFileGroup.log.<locals>.<listcomp>zis_generated =ÚtrueÚfalsezlanguage     =zsources:)r   ÚlogrU   Újoinrs   rn   ru   rt   ro   rq   ÚnestedÚas_posix)r)   rB   r   r   r   ry   ¾   s   $


ÿ€ÿzCMakeFileGroup.logN©rl   rm   r   r'   ©r   r'   ©r    r!   r"   r*   ry   r   r   r   r   rk   «   s    
rk   c                   @  rj   )ÚCMakeTargetrl   rm   r   r'   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  rp   r   r   r\   r   r   r   r>   Ë   r^   z(CMakeTarget.__init__.<locals>.<listcomp>Ú	artifactsÚsourceDirectoryr5   ÚbuildDirectoryÚnameZfullNameZhasInstallRuleFc                 S  rp   r   r   r\   r   r   r   r>   Ñ   r^   ZinstallPathsZlinkerLanguageZlinkLibrariesZ	linkFlagsZlinkLanguageFlagsrQ   Ú
EXECUTABLEZ
fileGroups)rr   r   r   Úsrc_dirÚ	build_dirr„   Ú	full_nameÚinstallÚsetÚinstall_pathsÚ	link_langrC   Úlink_librariesÚ
link_flagsÚlink_lang_flagsrQ   Úfilesrk   ©r)   rl   rB   r   r   r   r*   Ê   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 s¾w   Y  qžd S )Nzartifacts             =rv   c                 S  ó   g | ]}|  ¡ ‘qS r   ©r|   r\   r   r   r   r>   ß   r^   z#CMakeTarget.log.<locals>.<listcomp>zsrc_dir               =zbuild_dir             =zname                  =zfull_name             =zinstall               =rw   rx   zinstall_paths         =c                 S  r’   r   r“   r\   r   r   r   r>   å   r^   zlink_lang             =zlink_libraries        =zlink_flags            =zlink_lang_flags       =ztype                  =zFiles ú:)r   ry   rU   rz   r   r†   r|   r‡   r„   rˆ   r‰   r‹   rŒ   r   rŽ   r   rQ   Ú	enumerater   r{   ©r)   ÚidxrB   r   r   r   ry   Þ   s&   $$

ÿ€þzCMakeTarget.logNr}   r~   r   r   r   r   r   r€   É   s    
r€   c                   @  rj   )ÚCMakeProjectrl   rm   r   r'   c                 C  sb   t | dd¡ƒ| _t | dd¡ƒ| _| dd¡| _g | _| dg ¡D ]}|  jt|ƒg7  _q"d S )Nr‚   r5   rƒ   r„   Útargets)r   rr   r†   r‡   r„   r™   r€   r‘   r   r   r   r*   ó   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   ry   rU   r†   r|   r‡   r„   r•   r™   r{   r–   r   r   r   ry   ü   s   

ÿ€þzCMakeProject.logNr}   r~   r   r   r   r   r   r˜   ò   s    
	r˜   c                   @  rj   )ÚCMakeConfigurationrl   rm   r   r'   c                 C  s>   |  dd¡| _g | _|  dg ¡D ]}|  jt|ƒg7  _qd S )Nr„   r5   Úprojects)rr   r„   r›   r˜   r‘   r   r   r   r*     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   ry   rU   r„   r•   r›   r{   r–   r   r   r   ry     s   

ÿ€þzCMakeConfiguration.logNr}   r~   r   r   r   r   r   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   r'   c                 C  s   i | _ i | _g | _d| _d S )NÚpreserve)ÚoptsÚ	lang_argsÚ	link_argsr‰   r/   r   r   r   r*     s   
zSingleTargetOptions.__init__Úoptr+   rY   c                 C  s   || j |< d S r(   )rž   )r)   r¡   rY   r   r   r   Úset_opt  s   zSingleTargetOptions.set_optÚlangr[   r4   c                 C  s*   || j vr
g | j |< | j |  |7  < d S r(   ©rŸ   )r)   r£   r[   r   r   r   Úappend_args  s   

zSingleTargetOptions.append_argsc                 C  s   |  j |7  _ d S r(   ©r    )r)   r[   r   r   r   Úappend_link_args"  ó   z$SingleTargetOptions.append_link_argsr‰   r   c                 C  s   |rd| _ d S d| _ d S )Nrw   rx   ©r‰   )r)   r‰   r   r   r   Ú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 )NrM   c                 S  s   g | ]\}}|› d |› ‘qS )rM   r   )r<   ÚkÚvr   r   r   r>   .  s    z<SingleTargetOptions.get_override_options.<locals>.<listcomp>)Úfindrž   rR   )r)   r«   r?   rB   r¡   r   r   r   Úget_override_options(  s   

€z(SingleTargetOptions.get_override_optionsc                 C  s   || j v r|| j |  S |S r(   r¤   )r)   r£   r«   r   r   r   Úget_compile_args1  s   
z$SingleTargetOptions.get_compile_argsc                 C  s
   || j  S r(   r¦   ©r)   r«   r   r   r   Úget_link_args6  s   
z!SingleTargetOptions.get_link_argsc                 C  s   |dddœ| j  S )NTF)r   rw   rx   r©   r±   r   r   r   Úget_install9  r¨   zSingleTargetOptions.get_installNr~   )r¡   r+   rY   r+   r   r'   )r£   r+   r[   r4   r   r'   )r[   r4   r   r'   )r‰   r   r   r'   )r«   r4   r   r4   )r£   r+   r«   r4   r   r4   )r«   r   r   r   )r    r!   r"   r*   r¢   r¥   r§   rª   r¯   r°   r²   r³   r   r   r   r   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   r'   c                 C  s   t ƒ | _i | _d S r(   )rœ   Úglobal_optionsÚtarget_optionsr/   r   r   r   r*   =  s   
zTargetOptions.__init__Útgtr+   rœ   c                 C  s    || j vrtƒ | j |< | j | S r(   )r¶   rœ   )r)   r·   r   r   r   Ú__getitem__A  s   

zTargetOptions.__getitem__r«   r4   c                 C  ó*   | j  |¡}|| jv r| j|  |¡}|S r(   )rµ   r¯   r¶   ©r)   r·   r«   r   r   r   r¯   F  ó   
z"TargetOptions.get_override_optionsr£   c                 C  s.   | j  ||¡}|| jv r| j|  ||¡}|S r(   )rµ   r°   r¶   )r)   r·   r£   r«   r   r   r   r°   L  s   
zTargetOptions.get_compile_argsc                 C  r¹   r(   )rµ   r²   r¶   rº   r   r   r   r²   R  r»   zTargetOptions.get_link_argsr   c                 C  r¹   r(   )rµ   r³   r¶   rº   r   r   r   r³   X  r»   zTargetOptions.get_installNr~   )r·   r+   r   rœ   )r·   r+   r«   r4   r   r4   )r·   r+   r£   r+   r«   r4   r   r4   )r·   r+   r«   r   r   r   )	r    r!   r"   r*   r¸   r¯   r°   r²   r³   r   r   r   r   r´   <  s    




r´   )r   r   r   r   )r3   r+   r   r4   )r   r   r   r4   ri   )r3   rF   rG   r   r   r4   )r[   r4   r   r4   )Ú
__future__r   Zmesonlibr   r   r5   r   Úpathlibr   ÚtypingÚTÚTYPE_CHECKINGÚenvironmentr	   Úlanguage_maprD   rS   r   r   r#   rC   rE   rZ   rd   re   rk   r€   r˜   rš   rœ   r´   r   r   r   r   Ú<module>   sT   ÷÷

	

))