§
    ƒnócÂ2  ã                  óx   — d dl mZ ddlmZmZmZ d dlZddlm	Z	 d dl
mZ d dlZd dlZg d¢Z G d	„ d
¦  «        ZdS )é    )Úannotationsé   )ÚCMakeExceptionÚCMakeBuildFileÚCMakeConfigurationNé   )Úmlog)ÚPath)ÚcmakeÚreplyÚ	backtraceÚbacktraceGraphÚversionc                  ó^   — e Zd Zdd„Zdd„Zdd„Zdd
„Zdd„Zdd„Zdd„Z	dd„Z
dd„Zdd„ZdS )ÚCMakeFileAPIÚ	build_dirr
   c                óÄ   — || _         | j         dz  dz  dz  | _        | j        dz  dz  | _        | j        dz  | _        g | _        g | _        | j        | j        dœ| _        d S )Nz.cmakeÚapiÚv1Úqueryzclient-mesonr   )Ú	codemodelÚ
cmakeFiles)	r   Úapi_base_dirÚrequest_dirÚ	reply_dirÚcmake_sourcesÚcmake_configurationsÚ_parse_codemodelÚ_parse_cmakeFilesÚkind_resolver_map)Úselfr   s     ú:/usr/lib/python3/dist-packages/mesonbuild/cmake/fileapi.pyÚ__init__zCMakeFileAPI.__init__   sw   € Ø"ˆŒØ œN¨XÑ5¸Ñ=ÀÑDˆÔØÔ,¨wÑ6¸ÑGˆÔØÔ*¨WÑ4ˆŒØˆÔØ$&ˆÔ!àÔ.ØÔ0ð"
ð "
ˆÔÐÐó    ÚreturnúT.List[CMakeBuildFile]c                ó   — | j         S ©N)r   ©r!   s    r"   Úget_cmake_sourceszCMakeFileAPI.get_cmake_sources&   s   € ØÔ!Ð!r$   úT.List[CMakeConfiguration]c                ó   — | j         S r(   )r   r)   s    r"   Úget_cmake_configurationsz%CMakeFileAPI.get_cmake_configurations)   s   € ØÔ(Ð(r$   ÚNonec                óÌ   — | j                              dd¬¦  «         dddddœdœd	d
ddœdœgi}| j         dz  }|                     t          j        |d¬¦  «        d¬¦  «         d S )NT)ÚparentsÚexist_okÚrequestsr   r   r   )ÚmajorÚminor)Úkindr   r   r   z
query.json©Úindentúutf-8©Úencoding)r   ÚmkdirÚ
write_textÚjsonÚdumps)r!   r   Ú
query_files      r"   Úsetup_requestzCMakeFileAPI.setup_request,   s’   € ØÔ×Ò t°dÐÑ;Ô;Ð;ð Ø$¸1ÀqÐ1IÐ1IÐJÐJØ%¸AÈÐ2JÐ2JÐKÐKðð
ˆð Ô%¨Ñ4ˆ
Ø×Ò�dœj¨°qÐ9Ñ9Ô9ÀGÐÑLÔLÐLÐLÐLr$   c                óN  — | j                              ¦   «         st          d¦  «        ‚d }t          j        d¦  «        }| j                              ¦   «         D ] }|                     |j        ¦  «        r|} nŒ!|st          d¦  «        ‚|                      |¦  «        }|  	                    |¦  «        }|  
                    |¦  «        }|  	                    |¦  «        }| j        dz  dz  }|                     ¦   «         }|                     t          j        |d¬¦  «        d¬	¦  «         t!          j        |                     ¦   «         ¦  «         |d
         D ]L}t'          |t(          ¦  «        sJ ‚d|v sJ ‚|d         | j        v sJ ‚ | j        |d                  |¦  «         ŒMd S )Nz#No response from the CMake file APIz^index-.*\.json$z'Failed to find the CMake file API indexz..zfileAPI.jsonr   r6   r8   r9   Úobjectsr5   )r   Úis_dirr   ÚreÚcompileÚiterdirÚmatchÚnameÚ_reply_file_contentÚ_strip_dataÚ_resolve_referencesr   Úresolver<   r=   r>   r	   Úcmd_ci_includeÚas_posixÚ
isinstanceÚdictr    )r!   ÚrootÚ	reg_indexÚiÚindexÚ
debug_jsons         r"   Ú
load_replyzCMakeFileAPI.load_reply9   sÈ  € ØŒ~×$Ò$Ñ&Ô&ð 	HÝ Ð!FÑGÔGÐGàˆÝ”JÐ2Ñ3Ô3ˆ	Ø”×'Ò'Ñ)Ô)ð 	ð 	ˆAØ�Š˜qœvÑ&Ô&ð Ø�Ø�ðð ð 	LÝ Ð!JÑKÔKÐKà×(Ò(¨Ñ.Ô.ˆØ× Ò  Ñ'Ô'ˆØ×(Ò(¨Ñ/Ô/ˆØ× Ò  Ñ'Ô'ˆð ”^ dÑ*¨^Ñ;ˆ
Ø×'Ò'Ñ)Ô)ˆ
Ø×Ò�dœj¨°qÐ9Ñ9Ô9ÀGÐÑLÔLÐLÝÔ˜J×/Ò/Ñ1Ô1Ñ2Ô2Ð2ð �yÔ!ð 	1ð 	1ˆAÝ˜a¥Ñ&Ô&Ð&Ð&Ð&Ø˜Q�;�;�;�;Ø�V”9 Ô 6Ð6Ð6Ð6Ð6à-ˆDÔ" 1 V¤9Ô-¨aÑ0Ô0Ð0Ð0ð	1ð 	1r$   ÚdataúT.Dict[str, T.Any]c                ó¢  ‡‡‡‡‡	‡
— d|v sJ ‚d|v sJ ‚|d         d         Š
|d         d         Šdˆˆ
fd	„Šdd„Šdˆˆˆfd„Š	dˆˆˆˆ	ˆ
fd„}|                      dg ¦  «        D ]lŠ‰                      dd¦  «        g dœ}‰                      dg ¦  «        D ]}|dxx          ||¦  «        gz  cc<   Œ| xj        t          |¦  «        gz  c_        Œmd S )NÚconfigurationsÚpathsÚsourceÚbuildÚ	dir_entryrX   r%   úT.Tuple[Path, Path]c                óT  •— t          |                      dd¦  «        ¦  «        }t          |                      dd¦  «        ¦  «        }|                     ¦   «         r|n‰|z  }|                     ¦   «         r|n‰|z  }|                     ¦   «         }|                     ¦   «         }||fS )Nr\   ú.r]   )r
   ÚgetÚis_absoluterL   )r^   Úsrc_dirÚbld_dirr   Ú
source_dirs      €€r"   Úhelper_parse_dirz7CMakeFileAPI._parse_codemodel.<locals>.helper_parse_dirg   s    ø€ Ý˜9Ÿ=š=¨°3Ñ7Ô7Ñ8Ô8ˆGÝ˜9Ÿ=š=¨°#Ñ6Ô6Ñ7Ô7ˆGØ!(×!4Ò!4Ñ!6Ô!6ÐP�g�g¸JÈÑ<PˆGØ!(×!4Ò!4Ñ!6Ô!6ÐO�g�g¸IÈÑ<OˆGØ—o’oÑ'Ô'ˆGØ—o’oÑ'Ô'ˆGà˜GÐ#Ð#r$   Ú
comp_groupÚtgtú0T.Tuple[T.List[Path], T.List[Path], T.List[int]]c                ót  — g }g }g }|                      dg ¦  «        }|                       dg ¦  «        D ]�}|t          |¦  «        k    s
d||         vrŒ ||                               dd¦  «        r |t          ||         d         ¦  «        gz  }n|t          ||         d         ¦  «        gz  }||gz  }Œ‚|||fS )NÚsourcesÚsourceIndexesÚpathÚisGeneratedF)rb   Úlenr
   )rh   ri   ÚgenÚsrcÚidxÚsrc_list_rawrS   s          r"   Úparse_sourcesz4CMakeFileAPI._parse_codemodel.<locals>.parse_sourcesq   sØ   € ØˆCØˆCØˆCàŸ7š7 9¨bÑ1Ô1ˆLØ—^’^ O°RÑ8Ô8ð ð �Ø�˜LÑ)Ô)Ò)Ð)¨V¸<È¼?Ð-JÐ-JØØ ”?×&Ò& }°eÑ<Ô<ð ;Ø�D ¨a¤°Ô!8Ñ9Ô9Ð:Ñ:�C�Cà�D ¨a¤°Ô!8Ñ9Ô9Ð:Ñ:�CØ˜�s‘
��à˜˜S�=Ð r$   c                ó´  •‡—  ‰‰                      di ¦  «        ¦  «        \  }}g }d| v rWt          | d         d         d         ¦  «        Šˆfd„| d         d         D ¦   «         }t          t          |¦  «        ¦  «        }g }g }|                       di ¦  «                              dg ¦  «        D ]‹}|d	         d
k    r||d         gz  }Œ|d	         dk    r||d         gz  }Œ4|d	         dk    r |d                     |d         ¦  «        gz  }Œ`|d	         dk    r|d                     |d         ¦  «        gz  }ŒŒ|                       di ¦  «                              dg ¦  «        D ]}|d	         d
k    r||d         gz  }Œd„ |                       dg ¦  «        D ¦   «         |||                       dd¦  «        |                       dd¦  «        d| v ||                       di ¦  «                              dd¦  «        d                     |¦  «        d                     |¦  «        |                       dd¦  «        g dœ}g }|                       dg ¦  «        D ]ø}	g }
|	                      dg ¦  «        D ]}|
|d         gz  }
Œd„ |	                      d g ¦  «        D ¦   «         d                     |
¦  «        |	                      dd!¦  «        d g |	                      d"g ¦  «        d#œ} ‰|	| ¦  «        \  }}}|r*t          |¦  «        }d$|d%<   ||d&<   |d'xx         |gz  cc<   |r*t          |¦  «        }d(|d%<   ||d&<   |d'xx         |gz  cc<   ||z  }Œùg }g }t          |                       d&g ¦  «        ¦  «        D ]9\  }}||v rŒ
|                      d%d$¦  «        r||d         gz  }Œ-||d         gz  }Œ:|r|d'xx         d$|d)œgz  cc<   |r|d'xx         d(|d)œgz  cc<   |S )*Nr[   ÚinstallÚprefixrn   c                ó&   •— g | ]}‰|d          z  ‘ŒS )rn   © )Ú.0Úxrx   s     €r"   ú
<listcomp>zGCMakeFileAPI._parse_codemodel.<locals>.parse_target.<locals>.<listcomp>‰   s"   ø€ Ð \Ð \Ð \¸ ¨!¨F¬)Ñ!3Ð \Ð \Ð \r$   ÚdestinationsÚlinkÚcommandFragmentsÚroleÚflagsÚfragmentÚ	librariesÚlibraryPathz-L{}ÚframeworkPathz-F{}Úarchivec                óT   — g | ]%}t          |                     d d¦  «        ¦  «        ‘Œ&S )rn   Ú )r
   rb   ©r{   r|   s     r"   r}   zGCMakeFileAPI._parse_codemodel.<locals>.parse_target.<locals>.<listcomp>£   s.   € ÐXÐXÐX¸!�d 1§5¢5¨°Ñ#4Ô#4Ñ5Ô5ÐXÐXÐXr$   Ú	artifactsrH   r‰   Ú
nameOnDiskÚlanguageÚCXXú ÚtypeÚ
EXECUTABLE)r‹   ÚsourceDirectoryÚbuildDirectoryrH   ÚfullNameÚhasInstallRuleÚinstallPathsÚlinkerLanguageÚlinkLibrariesÚ	linkFlagsr�   Ú
fileGroupsÚcompileGroupsÚcompileCommandFragmentsc                ó:   — g | ]}|                      d d¦  «        ‘ŒS )Údefiner‰   )rb   rŠ   s     r"   r}   zGCMakeFileAPI._parse_codemodel.<locals>.parse_target.<locals>.<listcomp>º   s&   € ÐSÐSÐS¸ §¢ h°Ñ 3Ô 3ÐSÐSÐSr$   ÚdefinesÚCÚincludes)rŸ   ÚcompileFlagsr�   ro   rl   ÚincludePathFro   rl   rš   T)ro   rl   )rb   r
   ÚlistÚsetÚformatÚjoinrP   Ú	enumerate)ri   rd   re   Úinstall_pathsÚ
link_flagsÚ	link_libsrS   Útgt_dataÚprocessed_src_idxÚcgr‚   Úcg_dataÚ
normal_srcÚgenerated_srcÚsrc_idxrs   rr   rx   Úcnfrg   ru   s                    @€€€r"   Úparse_targetz3CMakeFileAPI._parse_codemodel.<locals>.parse_target‚   sÒ  øø€ Ø/Ð/°·²¸ÀÑ0DÔ0DÑEÔEÑˆG�Wð ˆMØ˜CÐÐÝ˜c )œn¨XÔ6°vÔ>Ñ?Ô?�Ø \Ð \Ð \Ð \¸SÀ¼^ÈNÔ=[Ð \Ñ \Ô \�Ý $¥S¨Ñ%7Ô%7Ñ 8Ô 8�ð ˆJØˆIØ—W’W˜V RÑ(Ô(×,Ò,Ð-?ÀÑDÔDð Að A�Ø�V”9 Ò'Ð'Ø 1 Z¤= /Ñ1�J�JØ�v”Y +Ò-Ð-Ø ! J¤- Ñ0�I�IØ�v”Y -Ò/Ð/Ø 6§=¢=°°:´Ñ#?Ô#?Ð"@Ñ@�J�JØ�v”Y /Ò1Ð1Ø 6§=¢=°°:´Ñ#?Ô#?Ð"@Ñ@�JøØ—W’W˜Y¨Ñ+Ô+×/Ò/Ð0BÀBÑGÔGð 2ð 2�Ø�V”9 Ò'Ð'Ø 1 Z¤= /Ñ1�Jøð YÐX¸s¿wºwÀ{ÐTVÑ?WÔ?WÐXÑXÔXØ#*Ø")ØŸš ¨Ñ+Ô+ØŸGšG L°"Ñ5Ô5Ø"+¨sÐ"2Ø -Ø"%§'¢'¨&°"Ñ"5Ô"5×"9Ò"9¸*ÀeÑ"LÔ"LØ!$§¢¨)Ñ!4Ô!4Ø ŸXšX jÑ1Ô1ØŸš ¨Ñ5Ô5Ø ðð ˆHð !#ÐØ—g’g˜o¨rÑ2Ô2ð -ð -�ð �ØŸšÐ 9¸2Ñ>Ô>ð -ð -�AØ˜a 
œm˜_Ñ,�E�Eð  TÐS¸R¿VºVÀIÈrÑ=RÔ=RÐSÑSÔSØ$'§H¢H¨U¡O¤OØ "§¢ z°3Ñ 7Ô 7Ø#'Ø!Ø#%§6¢6¨*°bÑ#9Ô#9ðð �ð 6C°]À2ÀsÑ5KÔ5KÑ2�
˜M¨7Øð 8Ý" 7™mœm�GØ-2�G˜MÑ*Ø)3�G˜IÑ&Ø˜\Ð*Ð*Ô*¨w¨iÑ7Ð*Ð*Ñ*Ø ð 8Ý" 7™mœm�GØ-1�G˜MÑ*Ø)6�G˜IÑ&Ø˜\Ð*Ð*Ô*¨w¨iÑ7Ð*Ð*Ñ*Ø! WÑ,Ð!Ð!ð
 ˆJØˆMÝ% c§g¢g¨i¸Ñ&<Ô&<Ñ=Ô=ð 0ð 0‘��SØÐ+Ð+Ð+Øà—7’7˜=¨%Ñ0Ô0ð 0Ø! c¨&¤k ]Ñ2�M�Mà 3 v¤; -Ñ/�J�Jàð Ø˜Ð&Ð&Ô&Ø#(Ø)ð,ð ,ð +ñ Ð&Ð&Ñ&ð ð Ø˜Ð&Ð&Ô&Ø#'Ø,ð,ð ,ð +ñ Ð&Ð&Ñ&ð ˆOr$   Úproc                ó|  •— ‰
}‰}	  ‰‰d         | d         d                  ¦  «        \  }}n# t           t          f$ r Y nw xY w|                      dd¦  «        ||g dœ}|                      dg ¦  «        D ]E}i }	 ‰d         |         }n# t           t          f$ r Y nw xY w|dxx          ‰	|¦  «        gz  cc<   ŒF|S )	NÚdirectoriesÚdirectoryIndexesr   rH   r‰   )rH   r’   r“   ÚtargetsÚtargetIndexesr¹   )Ú
IndexErrorÚKeyErrorrb   )rµ   Ú	p_src_dirÚ	p_bld_dirÚpro_dataÚrefri   r   r³   rg   r´   rf   s         €€€€€r"   Úparse_projectz4CMakeFileAPI._parse_codemodel.<locals>.parse_projecté   s  ø€ ð #ˆIØ!ˆIðØ'7Ð'7¸¸MÔ8JÈ3ÐOaÔKbÐcdÔKeÔ8fÑ'gÔ'gÑ$�	˜9˜9øÝ¥Ð)ð ð ð Ø�ðøøøð Ÿš ¨Ñ+Ô+Ø#,Ø"+Øð	ð ˆHð —w’w˜°Ñ3Ô3ð ;ð ;�Ø�ðØ˜iœ.¨Ô-�C�CøÝ"¥HÐ-ð ð ð Ø�Dðøøøà˜Ð#Ð#Ô#¨¨°SÑ(9Ô(9Ð':Ñ:Ð#Ð#Ñ#Ð#àˆOs!   ‡&. ®AÁAÁ;B
Â
BÂBrH   r‰   )rH   ÚprojectsrÂ   )r^   rX   r%   r_   )rh   rX   ri   rX   r%   rj   )ri   rX   r%   rX   )rµ   rX   r%   rX   )rb   r   r   )r!   rW   rÁ   Úcnf_datarµ   r   r³   rg   ru   r´   rf   s        @@@@@@r"   r   zCMakeFileAPI._parse_codemodelZ   s˜  øøøøøø€ Ø 4Ð'Ð'Ð'Ð'Ø˜$ˆˆˆˆà˜'”] 8Ô,ˆ
Ø˜”M 'Ô*ˆ	ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð	!ð 	!ð 	!ð 	!ð"e	ð e	ð e	ð e	ð e	ð e	ð e	ð e	ðN	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð6 —8’8Ð,¨bÑ1Ô1ð 		Hð 		HˆCàŸš ¨Ñ+Ô+Øðð ˆHð
 —w’w˜z¨2Ñ.Ô.ð =ð =�Ø˜Ð$Ð$Ô$¨¨°sÑ);Ô);Ð(<Ñ<Ð$Ð$Ñ$Ð$àÐ%Ô%Õ*<¸XÑ*FÔ*FÐ)GÑGÐ%Ô%Ð%ð		Hð 		Hr$   c                óZ  — d|v sJ ‚d|v sJ ‚t          |d         d         ¦  «        }|d         D ]z}t          |d         ¦  «        }|                     ¦   «         r|n||z  }| xj        t          ||                     dd¦  «        |                     dd¦  «        ¦  «        gz  c_        Œ{d S )NÚinputsr[   r\   rn   ÚisCMakeFro   )r
   rc   r   r   rb   )r!   rW   rd   rS   rn   s        r"   r   zCMakeFileAPI._parse_cmakeFiles  sË   € Ø˜4ÐÐÐÐØ˜$ˆˆˆˆå�t˜G”} XÔ.Ñ/Ô/ˆà�h”ð 	oð 	oˆAÝ˜˜&œ	‘?”?ˆDØ×+Ò+Ñ-Ô-ÐA�4�4°7¸T±>ˆDØÐÔ¥>°$¸¿º¸iÈÑ8OÔ8OÐQR×QVÒQVÐWdÐfkÑQlÔQlÑ#mÔ#mÐ"nÑnÐÔÐð	oð 	or$   úT.Anyc                ó4  — t          |t          ¦  «        r.t          |¦  «        D ]\  }}|                      |¦  «        ||<   ŒnTt          |t          ¦  «        r?i }|                     ¦   «         D ]&\  }}|t          vr|                      |¦  «        ||<   Œ'|}|S r(   )rO   r¤   r¨   rJ   rP   ÚitemsÚ
STRIP_KEYS)r!   rW   rs   rS   ÚnewÚkeyÚvals          r"   rJ   zCMakeFileAPI._strip_data  s¬   € Ý�d�DÑ!Ô!ð 		Ý# D™/œ/ð 0ð 0‘��QØ ×,Ò,¨QÑ/Ô/��S‘	�	ð0õ ˜�dÑ#Ô#ð 	ØˆCØ ŸJšJ™LœLð 5ð 5‘��SØ�jÐ(Ð(Ø#×/Ò/°Ñ4Ô4�C˜‘HøØˆDàˆr$   c                ó~  — t          |t          ¦  «        r.t          |¦  «        D ]\  }}|                      |¦  «        ||<   Œnyt          |t          ¦  «        rdd|v r.|                     |                      |d         ¦  «        ¦  «         |                     ¦   «         D ]\  }}|                      |¦  «        ||<   Œ|S )NÚjsonFile)rO   r¤   r¨   rK   rP   ÚupdaterI   rÉ   )r!   rW   rs   rS   rÌ   rÍ   s         r"   rK   z CMakeFileAPI._resolve_references(  sÊ   € Ý�d�DÑ!Ô!ð 	:Ý# D™/œ/ð 8ð 8‘��QØ ×4Ò4°QÑ7Ô7��S‘	�	ð8õ ˜�dÑ#Ô#ð 	:ð ˜TÐ!Ð!Ø—’˜D×4Ò4°T¸*Ô5EÑFÔFÑGÔGÐGà ŸJšJ™LœLð :ð :‘��SØ ×4Ò4°SÑ9Ô9��S‘	�	àˆr$   Úfilenamec                óB  — | j         |z  }|                     ¦   «         st          d|› d�¦  «        ‚t          j        |                     d¬¦  «        ¦  «        }t          |t          ¦  «        sJ ‚|                     ¦   «         D ]}t          |t          ¦  «        sJ ‚Œ|S )NzFile "z" does not existr8   r9   )
r   Úexistsr   r=   ÚloadsÚ	read_textrO   rP   ÚkeysÚstr)r!   rÑ   Ú	real_pathrW   rS   s        r"   rI   z CMakeFileAPI._reply_file_content8  s¨   € Ø”N XÑ-ˆ	Ø×ÒÑ!Ô!ð 	GÝ Ð!E¨)Ð!EÐ!EÐ!EÑFÔFÐFåŒz˜)×-Ò-°wÐ-Ñ?Ô?Ñ@Ô@ˆÝ˜$¥Ñ%Ô%Ð%Ð%Ð%Ø—’‘”ð 	&ð 	&ˆAÝ˜a¥Ñ%Ô%Ð%Ð%Ð%Ð%Øˆr$   N)r   r
   )r%   r&   )r%   r+   )r%   r.   )rW   rX   r%   r.   )rW   rÇ   r%   rÇ   )rÑ   r
   r%   rX   )Ú__name__Ú
__module__Ú__qualname__r#   r*   r-   r@   rV   r   r   rJ   rK   rI   rz   r$   r"   r   r      sî   € € € € € ð

ð 

ð 

ð 

ð"ð "ð "ð "ð)ð )ð )ð )ðMð Mð Mð Mð1ð 1ð 1ð 1ðBsHð sHð sHð sHðj	oð 	oð 	oð 	oðð ð ð ðð ð ð ð 	ð 	ð 	ð 	ð 	ð 	r$   r   )Ú
__future__r   Úcommonr   r   r   ÚtypingÚTr‰   r	   Úpathlibr
   r=   rD   rÊ   r   rz   r$   r"   ú<module>rá      sÀ   ðð #Ð "Ð "Ð "Ð "Ð "à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	àIÐIÐI€
ðhð hð hð hð hñ hô hð hð hð hr$   