
    e2                    p    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y)    )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y)CMakeFileAPIc                    || _         | j                   dz  dz  dz  | _        | j                  dz  dz  | _        | j                  dz  | _        g | _        g | _        | j                  | j                  d| _        y )Nz.cmakeapiv1queryzclient-mesonr   )	codemodel
cmakeFiles)		build_dir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__   sz    " NNX5=D,,w6G**W457@B!..00"
    c                    | j                   S N)r   r!   s    r"   get_cmake_sourceszCMakeFileAPI.get_cmake_sources&   s    !!!r$   c                    | j                   S r&   )r   r'   s    r"   get_cmake_configurationsz%CMakeFileAPI.get_cmake_configurations)   s    (((r$   c                    | j                   j                  dd       ddddddd	d
dddgi}| j                   dz  }|j                  t        j                  |d      d       y )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,   sv    td; $1q1IJ%A2JK
 %%4
djjq9GLr$   c                   | j                   j                         st        d      d }t        j                  d      }| j                   j                         D ]!  }|j                  |j                        s|} n |st        d      | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  dz  dz  }|j                         }|j                  t        j                  |d      d	       t!        j"                  |j%                                |d
   D ]E  }t'        |t(              sJ d|v sJ |d   | j*                  v sJ  | j*                  |d      |       G y )Nz#No response from the CMake file APIz^index-.*\.json$z'Failed to find the CMake file API indexz..zfileAPI.jsonr   r2   r4   r5   objectsr1   )r   is_dirr   recompileiterdirmatchname_reply_file_content_strip_data_resolve_referencesr   resolver8   r9   r:   r	   cmd_ci_includeas_posix
isinstancedictr    )r!   root	reg_indexiindex
debug_jsons         r"   
load_replyzCMakeFileAPI.load_reply9   sr   ~~$$& !FGGJJ23	'') 	Aqvv&	
  !JKK((.  '((/  ' ^^d*^;
'')
djjq9GLJ//12 y! 	1Aa&&&Q;;V9 6 6666-D""1V9-a0	1r$   c                n  	
 d|v sJ d|v sJ |d   d   
|d   d   d
fddddfd	d	
fd}|j                  dg       D ]a  j                  d	d
      g d}j                  dg       D ]  }|dxx    ||      gz  cc<    | xj                  t        |      gz  c_        c y )Nconfigurationspathssourcebuildc                   t        | j                  dd            }t        | j                  dd            }|j                         r|n|z  }|j                         r|n|z  }|j                         }|j                         }||fS )NrV   .rW   )r
   getis_absoluterH   )	dir_entrysrc_dirbld_dirr   
source_dirs      r"   helper_parse_dirz7CMakeFileAPI._parse_codemodel.<locals>.helper_parse_dirg   s~    9==378G9==#67G!(!4!4!6gJ<PG!(!4!4!6gI<OGoo'Goo'GG##r$   c                "   g }g }g }|j                  dg       }| j                  dg       D ]^  }|t        |      k\  sd||   vr||   j                  dd      r|t        ||   d         gz  }n|t        ||   d         gz  }||gz  }` |||fS )NsourcessourceIndexespathisGeneratedF)rZ   lenr
   )
comp_grouptgtgensrcidxsrc_list_rawrO   s          r"   parse_sourcesz4CMakeFileAPI._parse_codemodel.<locals>.parse_sourcesq   s    CCC779b1L^^OR8 L))V<?-J?&&}e<Da!89::CDa!89::Cs
 S= r$   c                    j                  di             \  }}g }d| v rCt        | d   d   d         }| d   d   D cg c]
  }||d   z   }}t        t        |            }g }g }| j                  di       j                  dg       D ]h  }|d   d	k(  r
||d
   gz  }|d   dk(  r
||d
   gz  }'|d   dk(  r|dj	                  |d
         gz  }H|d   dk(  sQ|dj	                  |d
         gz  }j | j                  di       j                  dg       D ]  }|d   d	k(  s||d
   gz  } | j                  dg       D cg c]  }t        |j                  dd             c}||| j                  dd      | j                  dd      d| v || j                  di       j                  dd      dj                  |      dj                  |      | j                  dd      g d}	g }
| j                  dg       D ]  }g }|j                  dg       D ]  }||d
   gz  } |j                  dg       D cg c]  }|j                  dd       c}dj                  |      |j                  dd      d g |j                  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        | j                  d$g             D ]/  \  }}||
v r|j                  d#d"      r
||d   gz  }'||d   gz  }1 |r|	d%xx   d"|d'gz  cc<   |r|	d%xx   d&|d'gz  cc<   |	S c c}w c c}w c c}w )(NrU   installprefixrd   destinationslinkcommandFragmentsroleflagsfragment	librarieslibraryPathz-L{}frameworkPathz-F{}archive	artifacts rD   
nameOnDisklanguageCXX type
EXECUTABLE)r{   sourceDirectorybuildDirectoryrD   fullNamehasInstallRuleinstallPathslinkerLanguagelinkLibraries	linkFlagsr   
fileGroupscompileGroupscompileCommandFragmentsdefinesdefineCincludes)r   compileFlagsr~   re   rb   includePathFre   rb   r   T)re   rb   )rZ   r
   listsetformatjoinrL   	enumerate)rh   r]   r^   install_pathsrp   x
link_flags	link_libsrO   tgt_dataprocessed_src_idxcgru   cg_data
normal_srcgenerated_srcsrc_idxrk   rj   cnfr`   rm   s                      r"   parse_targetz3CMakeFileAPI._parse_codemodel.<locals>.parse_target   s    /0DEGW MCc)nX6v>?=@^N=[ \!F)!3 \ \ $S%7 8 JIWWVR(,,-?D AV9'1Z=/1JvY+-!J-0IvY-/6==:#?"@@JvY/16==:#?"@@JA WWY+//0BBG 2V9'1Z=/1J2 @Cww{TV?WX!d155#45X#*")+GGL"5"+s"2 -"%''&""5"9"9*e"L!$)!4 XXj15 H !#ggor2 -  92> -Aa
m_,E- >@VVIr=RSh 3S$'HHUO "z3 7#'!#%66*b#9 6C2s5K2
M7"7mG-2GM*)3GI&\*wi7* "7mG-1GM*)6GI&\*wi7*!W,!7-@ JM%cggi&<= 0S++77=%0!c&k]2M3v;-/J0 &#(), + & &#',, + & O} !]4 Y.  Ts   M"M!3M&c                .   
}}	  d   | d   d            \  }}| j                  dd      ||g d}| j                  dg       D ]!  }i }	 d   |   }|dxx    	|      gz  cc<   # |S # t         t        f$ r Y `w xY w# t         t        f$ r Y >w xY w)	NdirectoriesdirectoryIndexesr   rD   r|   )rD   r   r   targetstargetIndexesr   )
IndexErrorKeyErrorrZ   )pro	p_src_dir	p_bld_dirpro_datarefrh   r   r   r`   r   r_   s         r"   parse_projectz4CMakeFileAPI._parse_codemodel.<locals>.parse_project   s     #I!I'7M8J3OaKbcdKe8f'g$	9
 +#,"+	H ww3 ;i.-C #S(9'::#; O% )  #H- s#   A- B-A?>A?BBrD   r|   )rD   projectsr   )r\   T.Dict[str, T.Any]returnzT.Tuple[Path, Path])rg   r   rh   r   r   z0T.Tuple[T.List[Path], T.List[Path], T.List[int]])rh   r   r   r   )r   r   r   r   )rZ   r   r   )r!   datar   cnf_datar   r   r   r`   rm   r   r_   s        @@@@@@r"   r   zCMakeFileAPI._parse_codemodelZ   s    4'''$']8,
M'*		$	!"e	N	 	6 88,b1 		HC+H
 wwz2. =$s);(<<$= %%*<X*F)GG%		Hr$   c                   d|v sJ d|v sJ t        |d   d         }|d   D ]h  }t        |d         }|j                         r|n||z  }| xj                  t        ||j	                  dd      |j	                  dd            gz  c_        j y )NinputsrU   rV   rd   isCMakeFre   )r
   r[   r   r   rZ   )r!   r   r]   rO   rd   s        r"   r   zCMakeFileAPI._parse_cmakeFiles  s    4$tG}X./h 	oA&	?D++-47T>D>$i8OQRQVQVWdfkQl#m"nn	or$   c                
   t        |t              r)t        |      D ]  \  }}| j                  |      ||<    |S t        |t              r9i }|j                         D ]"  \  }}|t        vs| j                  |      ||<   $ |}|S r&   )rK   r   r   rF   rL   items
STRIP_KEYS)r!   r   rk   rO   newkeyvals          r"   rF   zCMakeFileAPI._strip_data  s    dD!#D/ 0Q ,,Q/S	0  d#C JJL 5Sj(#//4CH5 Dr$   c                >   t        |t              r)t        |      D ]  \  }}| j                  |      ||<    |S t        |t              rSd|v r#|j                  | j                  |d                |j                         D ]  \  }}| j                  |      ||<    |S )NjsonFile)rK   r   r   rG   rL   updaterE   r   )r!   r   rk   rO   r   r   s         r"   rG   z CMakeFileAPI._resolve_references(  s    dD!#D/ 8Q 44Q7S	8  d# T!D44T*5EFG JJL :S 44S9S	: r$   c                   | j                   |z  }|j                         st        d| d      t        j                  |j                  d            }t        |t              sJ |j                         D ]  }t        |t              rJ  |S )NzFile "z" does not existr4   r5   )
r   existsr   r9   loads	read_textrK   rL   keysstr)r!   filename	real_pathr   rO   s        r"   rE   z CMakeFileAPI._reply_file_content8  s    NNX-	! 6)4D!EFFzz)--w-?@$%%% 	&Aa%%%	&r$   N)r   r
   )r   zT.List[CMakeBuildFile])r   zT.List[CMakeConfiguration])r   None)r   r   r   r   )r   T.Anyr   r   )r   r
   r   r   )__name__
__module____qualname__r#   r(   r*   r<   rR   r   r   rF   rG   rE    r$   r"   r   r      s:    

")M1BsHj	o 	r$   r   )
__future__r   commonr   r   r   typingTr|   r	   pathlibr
   r9   r@   r   r   r   r$   r"   <module>r      s0    # F F     	I
h hr$   