
    <h2                    p    S SK Jr  SSKJrJrJr  S SKrSSKJ	r	  S SK
Jr  S SKrS SKr/ SQr " S	 S
5      rg)    )annotations   )CMakeExceptionCMakeBuildFileCMakeConfigurationN   )mlog)Path)cmakereply	backtracebacktraceGraphversionc                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSrg)CMakeFileAPI   c                   Xl         U R                   S-  S-  S-  U l        U R                  S-  S-  U l        U R                  S-  U l        / U l        / U l        SU l        U R                  U R                  U R                  S.U l
        g )	Nz.cmakeapiv1queryzclient-mesonr    )	codemodelcache
cmakeFiles)	build_dirapi_base_dirrequest_dir	reply_dircmake_sourcescmake_configurationsproject_version_parse_codemodel_parse_cache_parse_cmakeFileskind_resolver_map)selfr   s     y/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/cmake/fileapi.py__init__CMakeFileAPI.__init__   s    " NNX5=D,,w6G**W457@B!!..&&00"
    c                    U R                   $ N)r   r&   s    r'   get_cmake_sourcesCMakeFileAPI.get_cmake_sources   s    !!!r*   c                    U R                   $ r,   )r    r-   s    r'   get_cmake_configurations%CMakeFileAPI.get_cmake_configurations!   s    (((r*   c                    U R                   $ r,   r!   r-   s    r'   get_project_version CMakeFileAPI.get_project_version$   s    ###r*   c                    U R                   R                  SSS9  SSSSS.S.S	SSS.S.S
SSS.S./0nU R                   S-  nUR                  [        R                  " USS9SS9  g )NT)parentsexist_okrequestsr   r   r   )majorminor)kindr   r   r   r   z
query.jsonindentutf-8encoding)r   mkdir
write_textjsondumps)r&   r   
query_files      r'   setup_requestCMakeFileAPI.setup_request'   s    td; $1q1IJ q1-EF%A2JK
 %%4
djjq9GLr*   c                @   U R                   R                  5       (       d  [        S5      eS n[        R                  " S5      nU R                   R                  5        H'  nUR                  UR                  5      (       d  M%  Un  O   U(       d  [        S5      eU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  S-  S-  nUR                  5       nUR                  [        R                  " USS9SS	9  [         R"                  " UR%                  5       5        US
    HO  n['        U[(        5      (       d   eSU;   d   eUS   U R*                  ;   d   eU R*                  US      " U5        MQ     g )Nz#No response from the CMake file APIz^index-.*\.json$z'Failed to find the CMake file API indexz..zfileAPI.jsonr   r>   r@   rA   objectsr=   )r   is_dirr   recompileiterdirmatchname_reply_file_content_strip_data_resolve_referencesr   resolverD   rE   rF   r	   cmd_ci_includeas_posix
isinstancedictr%   )r&   root	reg_indexiindex
debug_jsons         r'   
load_replyCMakeFileAPI.load_reply5   so   ~~$$&& !FGGJJ23	'')Aqvv&& *
  !JKK((.  '((/  ' ^^d*^;
'')
djjq9GLJ//12 y!Aa&&&&Q;;V9 6 6666""1V9-a0 "r*   c                  ^^^^^	^
 SU;   d   eSU;   d   eUS   S   m
US   S   mSUU
4S jjmSS jmSUUU4S jjm	SUUUU	U
4S jjnUR                  S/ 5       Hd  mTR                  S	S
5      / S.nTR                  S/ 5       H  nUS==   U" U5      /-  ss'   M     U =R                  [        U5      /-  sl        Mf     g )Nconfigurationspathssourcebuildc                &  > [        U R                  SS5      5      n[        U R                  SS5      5      nUR                  5       (       a  UOTU-  nUR                  5       (       a  UOTU-  nUR                  5       nUR                  5       nX4$ )Nrd   .re   )r
   getis_absoluterU   )	dir_entrysrc_dirbld_dirr   
source_dirs      r'   helper_parse_dir7CMakeFileAPI._parse_codemodel.<locals>.helper_parse_dirc   s    9==378G9==#67G!(!4!4!6!6gJ<PG!(!4!4!6!6gI<OGoo'Goo'G##r*   c                ,   / n/ n/ nUR                  S/ 5      nU R                  S/ 5       Hc  nU[        U5      :  d  SXV   ;  a  M  XV   R                  SS5      (       a  U[        XV   S   5      /-  nOU[        XV   S   5      /-  nXF/-  nMe     X2U4$ )NsourcessourceIndexespathisGeneratedF)rh   lenr
   )
comp_grouptgtgensrcidxsrc_list_rawr\   s          r'   parse_sources4CMakeFileAPI._parse_codemodel.<locals>.parse_sourcesm   s    CCC779b1L^^OR8L))V<?-J?&&}e<<D!89::CD!89::Cs
 9 S= r*   c                :  > T" TR                  S0 5      5      u  p/ nSU ;   aE  [        U S   S   S   5      nU S   S    Vs/ s H
  oTUS   -  PM     nn[        [        U5      5      n/ n/ nU R                  S0 5      R                  S/ 5       Ho  nUS   S	:X  a
  XhS
   /-  nM  US   S:X  a
  XxS
   /-  nM)  US   S:X  a  USR	                  US
   5      /-  nML  US   S:X  d  MW  USR	                  US
   5      /-  nMq     U R                  S0 5      R                  S/ 5       H  nUS   S	:X  d  M  XhS
   /-  nM     U R                  S/ 5       Vs/ s H  n[        UR                  SS5      5      PM      snUUU R                  SS5      U R                  SS5      SU ;   UU R                  S0 5      R                  SS5      SR                  U5      SR                  U5      U R                  SS5      / S.n	/ n
U R                  S/ 5       H  n/ nUR                  S/ 5       H  nXS
   /-  nM     UR                  S/ 5       Vs/ s H  oUR                  SS5      PM     snSR                  U5      UR                  SS5      S / UR                  S / 5      S!.nT" X5      u  pnU(       a"  [        U5      nS"US#'   XS$'   U	S%==   U/-  ss'   U(       a"  [        U5      nS&US#'   XS$'   U	S%==   U/-  ss'   U
U-  n
M     / n/ n[        U R                  S$/ 5      5       H9  u  nnUU
;   a  M  UR                  S#S"5      (       a  UUS   /-  nM0  UUS   /-  nM;     U(       a  U	S%==   S"US'./-  ss'   U(       a  U	S%==   S&US'./-  ss'   U	$ s  snf s  snf s  snf )(Nrc   installprefixrs   destinationslinkcommandFragmentsroleflagsfragment	librarieslibraryPathz-L{}frameworkPathz-F{}archive	artifactsr   rQ   
nameOnDisklanguageCXX type
EXECUTABLE)r   sourceDirectorybuildDirectoryrQ   fullNamehasInstallRuleinstallPathslinkerLanguagelinkLibraries	linkFlagsr   
fileGroupscompileGroupscompileCommandFragmentsdefinesdefineCincludes)r   compileFlagsr   rt   rq   includePathFrt   rq   r   T)rt   rq   )rh   r
   listsetformatjoinrY   	enumerate)rw   rk   rl   install_pathsr   x
link_flags	link_libsr\   tgt_dataprocessed_src_idxcgr   cg_data
normal_srcgenerated_srcsrc_idxrz   ry   cnfrn   r|   s                      r'   parse_target3CMakeFileAPI._parse_codemodel.<locals>.parse_target~   s   /0DEG MCc)nX6v>?=@^N=[ \=[!F)!3=[ \ $S%7 8 JIWWVR(,,-?DV9'Z=/1JvY+-J-0IvY-/6==:#?"@@JvY/16==:#?"@@J E WWY+//0BBGV9'Z=/1J H @Cww{TV?WX?W!d155#45?WX#*")+GGL"5"+s"2 -"%''&""5"9"9*e"L!$)!4 XXj15 H !#ggor2  92>A
m_,E ? >@VVIr=RS=Rh 3=RS$'HHUO "z3 7#'!#%66*b#9 6C25K2
7"7mG-2GM*)3I&\*wi7* "7mG-1GM*)6I&\*wi7*!W,!7 3@ JM%cggi&<=S++77=%00!c&k]2M3v;-/J > &#(), + & &#',, + & O} !]4 Y.  Ts   N%NNc                4  > T
nTn T" TS   U S   S      5      u  pU R                  SS5      UU/ S.nU R                  S/ 5       H"  n0 n TS   U   nUS==   T	" U5      /-  ss'   M$     U$ ! [         [        4 a     Ncf = f! [         [        4 a     NBf = f)	NdirectoriesdirectoryIndexesr   rQ   r   )rQ   r   r   targetstargetIndexesr   )
IndexErrorKeyErrorrh   )pro	p_src_dir	p_bld_dirpro_datarefrw   r   r   rn   r   rm   s         r'   parse_project4CMakeFileAPI._parse_codemodel.<locals>.parse_project   s     #I!I'7M8J3OaKbcdKe8f'g$	
 +#,"+	H ww3i.-C #S(9'::# 4 O% )  #H- s#   A. B.B BBBrQ   r   )rQ   projectsr   )rj   T.Dict[str, T.Any]returnzT.Tuple[Path, Path])rv   r   rw   r   r   z0T.Tuple[T.List[Path], T.List[Path], T.List[int]])rw   r   r   r   )r   r   r   r   )rh   r    r   )r&   datar   cnf_datar   r   r   rn   r|   r   rm   s        @@@@@@r'   r"   CMakeFileAPI._parse_codemodelV   s    4'''$']8,
M'*		$ 	$	!"e	 e	N	 	6 88,b1C+H
 wwz2.$s);(<<$ / %%*<X*F)GG% 2r*   c                0   SU;   d   eSU;   d   e[        US   S   5      nUS    Hl  n[        US   5      nUR                  5       (       a  UOX$-  nU =R                  [        XCR	                  SS5      UR	                  SS5      5      /-  sl        Mn     g )Ninputsrc   rd   rs   isCMakeFrt   )r
   ri   r   r   rh   )r&   r   rk   r\   rs   s        r'   r$   CMakeFileAPI._parse_cmakeFiles  s    4$tG}X./hA&	?D++--47>D>$i8OQRQVQVWdfkQl#m"nn  r*   c                V    SU;   d   eUS    H  nUS   S:X  d  M  US   U l         M     g )NentriesrQ   CMAKE_PROJECT_VERSIONvaluer4   )r&   r   es      r'   r#   CMakeFileAPI._parse_cache  s7    D   iAy33'(z$ !r*   c                $   [        U[        5      (       a)  [        U5       H  u  p#U R                  U5      X'   M     U$ [        U[        5      (       a<  0 nUR                  5        H$  u  pVU[        ;  d  M  U R                  U5      XE'   M&     UnU$ r,   )rX   r   r   rS   rY   items
STRIP_KEYS)r&   r   rz   r\   newkeyvals          r'   rS   CMakeFileAPI._strip_data  s    dD!!#D/ ,,Q/	 *  d##C JJLj(#//4CH ) Dr*   c                V   [        U[        5      (       a)  [        U5       H  u  p#U R                  U5      X'   M     U$ [        U[        5      (       aU  SU;   a#  UR                  U R                  US   5      5        UR                  5        H  u  pEU R                  U5      X'   M     U$ )NjsonFile)rX   r   r   rT   rY   updaterR   r   )r&   r   rz   r\   r   r   s         r'   rT    CMakeFileAPI._resolve_references+  s    dD!!#D/ 44Q7	 *  d## T!D44T*5EFG JJL 44S9	 ) r*   c                <   U R                   U-  nUR                  5       (       d  [        SU S35      e[        R                  " UR                  SS95      n[        U[        5      (       d   eUR                  5        H  n[        U[        5      (       a  M   e   U$ )NzFile "z" does not existr@   rA   )
r   existsr   rE   loads	read_textrX   rY   keysstr)r&   filename	real_pathr   r\   s        r'   rR    CMakeFileAPI._reply_file_content;  s    NNX-	!! 6)4D!EFFzz)--w-?@$%%%%Aa%%%% r*   )r   r   r    r   r%   r!   r   r   N)r   r
   )r   zT.List[CMakeBuildFile])r   zT.List[CMakeConfiguration])r   r   )r   None)r   r   r   r   )r   T.Anyr   r   )r   r
   r   r   )__name__
__module____qualname____firstlineno__r(   r.   r1   r5   rH   r_   r"   r$   r#   rS   rT   rR   __static_attributes__ r*   r'   r   r      sD    
")$M1BsHj	o2 	r*   r   )
__future__r   commonr   r   r   typingTr   r	   pathlibr
   rE   rM   r   r   r   r*   r'   <module>r      s0    # F F     	I
u ur*   