
    -Ph6                    |   d dl mZ d dlmZmZmZ d dlZd dlZd dlZ	ddl
mZmZmZ ddl
mZ ddlmZmZmZmZ dd	lmZmZmZmZ dd
lmZmZmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ e	j%        rBddl
m&Z& ddlm'Z' ddl(m)Z) ddlm*Z* ddlm+Z+m,Z, d dl-m.Z.  G d de.          Z/ G d de.          Z0 G d de          Z1ddZ2dS )    )annotations)PathPurePathPureWindowsPathN   )ExtensionModuleModuleReturnValue
ModuleInfo   )mlog)BuildTargetCustomTargetCustomTargetIndexInvalidArguments)
INSTALL_KWINSTALL_MODE_KWINSTALL_TAG_KWNoneType)
FeatureNew	KwargInfotyped_kwargstyped_pos_argsnoKwargs)FileMesonExceptionhas_path_seppath_is_in_rootrelpath)ModuleState)BuildTargetTypes)Interpreter)TYPE_kwargs)FileOrStringFileMode)	TypedDictc                      e Zd ZU dZded<   dS )
ReadKwArgszKeyword Arguments for fs.read.strencodingN__name__
__module____qualname____doc____annotations__     U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/modules/fs.pyr'   r'      s         ,,r1   r'   c                  <    e Zd ZU dZded<   ded<   ded<   ded<   d	S )
CopyKwzKwargs for fs.copyboolinstallzT.Optional[str]install_dirr$   install_modeinstall_tagNr*   r0   r1   r2   r4   r4      sE           $$$$$$$$$$r1   r4   c                       e Zd Z edd          ZdR fdZdSdZedTd            ZdSdZ	e
 edd           ede          dUd                                    Ze
 edd           edeef          dVd                                     Ze
 ed!d           ed!e          dUd"                                    Ze
 ed#e          dWd$                        Ze
 ed%eef          dVd&                        Ze
 ed'e          dWd(                        Ze
 ed)e          dWd*                        Ze
 ed+eefe          dXd-                        Ze
 ed.eef          dYd0                        Ze
 ed1eefeef          dZd3                        Ze
 ed4eeeeefe          d[d6                        Ze
 ed7eeeeef          d\d9                        Ze
 ed:eeeeef          d\d;                        Ze
 ed<eeeeef           ed<d          d\d=                                    Z ed>d?           ed>eef           e d> e!d@edAB                    d]dD                                    Z" edEdF           edEeefegG           e dEe#e$e% e!dHee&f                    d^dL                                    Z' edMdN           edMeeeeefeeeeef          e
d_dQ                                    Z( xZ)S )`FSModulefsz0.53.0interpreter'Interpreter'returnNonec                   t                                          |           | j                            i d| j        d| j        d| j        d| j        d| j        d| j	        d| j
        d| j        d	| j        d
| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j                   d S )Nas_posixcopyfileexists
expanduserhashis_absoluteis_diris_fileis_samepath
is_symlinknameparentreadrelative_toreplace_suffixsizestem)super__init__methodsupdaterB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   )selfr=   	__class__s     r2   rT   zFSModule.__init__-   s2   %%% 


 dk
 $/	

 DI
 4+
 dk
 t|
 4+
 $/
 DI
 dk
 DI
 4+
 d1
  DI!
" DI#
 	 	 	 	 	r1   state'ModuleState'arg'FileOrString'r   c                @   t          |t                    r?t          |                    |j        |j                                                            S t          |j                  t          |j                  z  t          |                                          z  S )zX
        make an absolute path from a relative path, WITHOUT resolving symlinks
        )	
isinstancer   r   absolute_pathsource_rootenvironmentget_build_dirsubdirrE   )rW   rY   r[   s      r2   _absolute_dirzFSModule._absolute_dirC   s~     c4   	a))%*;U=N=\=\=^=^__```E%&&el););;d3ii>R>R>T>TTTr1   feature_new_prefixr(   obj'T.Union[FileOrString, BuildTargetTypes]r   r   c                   t          |t                    rt          |          S t          |t                    rNt	          |  dd                              |j        |j                   t          t          |                    S t	          |  dd                              |j        |j                   t          |j        	                    |                    S )Nz
 with file0.59.0locationz+ with build_tgt, custom_tgt, and custom_idxz1.4.0)
r^   r(   r   r   r   use
subprojectcurrent_nodebackendget_target_filename)re   rf   rY   s      r2   _obj_to_pathzFSModule._obj_to_pathK   s    c3 	!C== c4   	&,888(CCGGHXchcuGvvvCHH%%%(UUUW^__ccdidt  @E  @Rc  	S  	S  	S99#>>???r1   c                ~    |                      ||          }	 |                                }n# t          $ r Y nw xY w|S )z
        resolves symlinks and makes absolute a directory relative to calling meson.build,
        if not already absolute
        )rd   resolve	Exception)rW   rY   r[   paths       r2   _resolve_dirzFSModule._resolve_dirW   sT    
 !!%--	<<>>DD 	 	 	D	 s   - 
::zfs.expanduserz0.54.0argsT.Tuple[str]kwargsT.Dict[str, T.Any]c                j    t          t          |d                                                             S Nr   )r(   r   rE   rW   rY   rw   ry   s       r2   rE   zFSModule.expandusere   s(     4Q==++--...r1   zfs.is_absoluteT.Tuple['FileOrString']r5   c                    t          |d         t                    r/t          dd                              |j        |j                   t          t          |d                                                             S )Nr   zfs.is_absolute with fileri   rj   )	r^   r   r   rl   rm   rn   r   r(   rG   r}   s       r2   rG   zFSModule.is_absolutek   sj     d1gt$$ 	p18<<@@AQ\a\n@oooDG%%11333r1   zfs.as_posixc                P    t          |d                                                   S )z
        this function assumes you are passing a Windows path, even if on a Unix-like system
        and so ALL '\' are turned to '/', even if you meant to escape a character
        r   )r   rB   r}   s       r2   rB   zFSModule.as_posixs   s"     tAw''00222r1   z	fs.existsc                ^    |                      ||d                                                   S r|   )rv   rD   r}   s       r2   rD   zFSModule.exists}   *       Q0077999r1   zfs.is_symlinkc                    t          |d         t                    r/t          dd                              |j        |j                   |                     ||d                                                   S )Nr   zfs.is_symlink with fileri   rj   )r^   r   r   rl   rm   rn   rd   rK   r}   s       r2   rK   zFSModule.is_symlink   sl     d1gt$$ 	o0(;;??@P[`[m?nnn!!%a11<<>>>r1   z
fs.is_filec                ^    |                      ||d                                                   S r|   )rv   rI   r}   s       r2   rI   zFSModule.is_file   s*       Q0088:::r1   z	fs.is_dirc                ^    |                      ||d                                                   S r|   )rv   rH   r}   s       r2   rH   zFSModule.is_dir   r   r1   zfs.hashT.Tuple['FileOrString', str]c                   t          |d         t                    r/t          dd                              |j        |j                   |                     ||d                   }|                                st          | d          	 t          j
        |d                   }n6# t          $ r) t          d                    |d                             w xY wt          j        d                    |d         ||                                j                             |                    |                                           |                                S )	Nr   zfs.hash with fileri   rj   z- is not a file and therefore cannot be hashedr   z"hash algorithm {} is not availablez$computing {} sum of {} size {} bytes)r^   r   r   rl   rm   rn   rv   rI   r   hashlibnew
ValueErrorformatr   debugstatst_sizerV   
read_bytes	hexdigest)rW   rY   rw   ry   filehs         r2   rF   zFSModule.hash   sD    d1gt$$ 	i*H5599%:JUZUg9hhh  Q00||~~ 	Y D!W!W!WXXX	WDG$$AA 	W 	W 	W !E!L!LTRSW!U!UVVV	W
9@@a$PTPYPYP[P[Pcddeee	""###{{}}s   B) )3Czfs.sizeintc                   t          |d         t                    r/t          dd                              |j        |j                   |                     ||d                   }|                                st          | d          	 |	                                j
        S # t          $ r) t          d                    |d                             w xY w)Nr   zfs.size with fileri   rj   z, is not a file and therefore cannot be sizedz{} size could not be determined)r^   r   r   rl   rm   rn   rv   rI   r   r   r   r   r   )rW   rY   rw   ry   r   s        r2   rQ   zFSModule.size   s     d1gt$$ 	i*H5599%:JUZUg9hhh  Q00||~~ 	X D!V!V!VWWW	T99;;&& 	T 	T 	T !B!I!I$q'!R!RSSS	Ts   B' '3Czfs.is_samepath'T.Tuple['FileOrString', 'FileOrString']c                   t          |d         t                    st          |d         t                    r/t          dd                              |j        |j                   |                     ||d                   }|                     ||d                   }|                                sdS |                                sdS 	 |                    |          S # t          $ r Y dS w xY w)Nr   r   zfs.is_samepath with fileri   rj   F)
r^   r   r   rl   rm   rn   rv   rD   samefileOSError)rW   rY   rw   ry   file1file2s         r2   rJ   zFSModule.is_samepath   s     d1gt$$ 	p
47D(A(A 	p18<<@@AQ\a\n@ooo!!%a11!!%a11||~~ 	5||~~ 	5	>>%((( 	 	 	55	s   C   
C.-C.fs.replace_suffix5T.Tuple[T.Union[FileOrString, BuildTargetTypes], str]c                    |                      d|d         |          }t          |                    |d                             S )Nr   r   r   )rq   r(   with_suffixrW   rY   rw   ry   ru   s        r2   rP   zFSModule.replace_suffix   s@       !4d1guEE4##DG,,---r1   	fs.parent0T.Tuple[T.Union[FileOrString, BuildTargetTypes]]c                d    |                      d|d         |          }t          |j                  S )Nr   r   )rq   r(   rM   r   s        r2   rM   zFSModule.parent   s/       d1gu==4;r1   fs.namec                d    |                      d|d         |          }t          |j                  S )Nr   r   )rq   r(   rL   r   s        r2   rL   zFSModule.name   s-       DGU;;49~~r1   fs.stemc                d    |                      d|d         |          }t          |j                  S )Nr   r   )rq   r(   rR   r   s        r2   rR   zFSModule.stem   s-       DGU;;49~~r1   zfs.readz0.57.0r)   zutf-8)default'ReadKwArgs'c                   |d         }|d         }|j         j        }|j        }|j                                         }t	          |t
                    rI|j        rt          d          t          j	        
                    ||                                          }nB|r t          j	        
                    ||          }t          j	        
                    ||          }t          j	                            |          }t          t          |          t          |          d          rt          d          	 t          ||          5 }	|	                                }
ddd           n# 1 swxY w Y   nH# t"          $ r t          d	|d          d
          t$          $ r t          d|d                    w xY w| j                            |           |
S )aO  Read a file from the source tree and return its value as a decoded
        string.

        If the encoding is not specified, the file is assumed to be utf-8
        encoded. Paths must be relative by default (to prevent accidents) and
        are forbidden to be read from the build directory (to prevent build
        loops)
        r   r)   z-fs.read does not accept built files() objectsT)rs   z"path must not be in the build tree)r)   NzFile z does not exist.zdecoding failed for )ra   
source_dirrc   rb   r^   r   is_builtr   osru   joinrelative_nameabspathr   r   openrN   FileNotFoundErrorUnicodeDecodeErrorr=   add_build_def_file)rW   rY   rw   ry   ru   r)   src_dirsub_dir	build_dirfdatas              r2   rN   zFSModule.read   s    Aw*%#.,%3355	dD!! 	/} E$CE E E7<<););)=)=>>DD 9',,w887<<..Dwt$$4::tIEEE 	G !EFFF	CdX...  !vvxx                               	D 	D 	D !Ba!B!B!BCCC! 	C 	C 	C !AQ!A!ABBB	C
 	++D111s1   8E6 	E*E6 *E..E6 1E.2E6 6AF;zfs.copyfilez0.64.0)optargsr7   &T.Tuple[FileOrString, T.Optional[str]]r4   r	   c                &   |d         r|d         st          d          | j                            |d         g          d         }|d         r|d         n#t          j                            |j                  }t          |          rt          d          t          ||j	        |j
        |j        |j                                        g dz   |g|gd|d         |d         g|d	         |d
         g|j        d          }t          ||g          S )z3Copy a file into the build directory at build time.r6   r7   z6"install_dir" must be specified when "install" is truer   r   z-Destination path may not have path separators)z
--internalcopyz@INPUT@z@OUTPUT@Tr8   r9   zCopying file {})build_by_defaultr6   r7   r8   r9   ro   description)r   r=   source_strings_to_filesr   ru   basenamefnamer   r   rc   rm   ra   get_build_commandro   r	   )rW   rY   rw   ry   srcdestcts          r2   rC   zFSModule.copyfile  s.    ) 	]VM%: 	]"#[\\\66QyAA!D q'BtAwwrw'7'7	'B'B 	T"#RSSSL//114a4a4aaEF!9%.//./M)
 
 
" !bT***r1   zfs.relative_toz1.3.0YT.Tuple[T.Union[FileOrString, BuildTargetTypes], T.Union[FileOrString, BuildTargetTypes]]r"   c                t    dfd} ||d                   } ||d                   }t          ||          S )	Nr[   CT.Union[FileOrString, CustomTarget, CustomTargetIndex, BuildTarget]r?   r(   c                Z   t          | t                    r*|                     j        j        j        j                  S t          | t          t          t          f          rj	        
                    |           S t          j                            j        j        j        |           S N)r^   r   r_   ra   r   r   r   r   r   ro   get_target_filename_absr   ru   r   rc   )r[   rY   s    r2   to_pathz%FSModule.relative_to.<locals>.to_path3  s    #t$$ U(():)EuGXGbcccC,0A;!OPP U}<<SAAAw||E$5$@%,PSTTTr1   r   r   )r[   r   r?   r(   )r   )rW   rY   rw   ry   r   tr   s    `     r2   rO   zFSModule.relative_to/  s]    	U 	U 	U 	U 	U 	U GDGGDGq!}}r1   )r=   r>   r?   r@   )rY   rZ   r[   r\   r?   r   )re   r(   rf   rg   rY   r   r?   r   )rY   rZ   rw   rx   ry   rz   r?   r(   )rY   rZ   rw   r~   ry   rz   r?   r5   )rY   rZ   rw   rx   ry   rz   r?   r5   )rY   rZ   rw   r   ry   rz   r?   r(   )rY   rZ   rw   r~   ry   rz   r?   r   )rY   rZ   rw   r   ry   rz   r?   r5   )rY   rZ   rw   r   ry   rz   r?   r(   )rY   rZ   rw   r   ry   rz   r?   r(   )rY   rZ   rw   r~   ry   r   r?   r(   )rY   r   rw   r   ry   r4   r?   r	   )rY   r   rw   r   ry   r"   r?   r(   )*r+   r,   r-   r
   INFOrT   rd   staticmethodrq   rv   r   r   r   r(   rE   r   rG   rB   rD   rK   rI   rH   rF   rQ   rJ   r   r   r   rP   rM   rL   rR   r   r   rN   r   r   r   r   rC   rO   __classcell__)rX   s   @r2   r;   r;   )   s       :dH%%D     ,U U U U 	@ 	@ 	@ \	@    Z**^OS))/ / / *) +* X/ Z (++^$sDk224 4 4 32 ,+ X4
 Zx((^M3''3 3 3 (' )( X3 ^K%%: : : &% X: ^Oc4[11? ? ? 21 X?
 ^L#&&; ; ; '& X; ^K%%: : : &% X: ^IT{C00   10 X ^IT{++	T 	T 	T ,+ X	T ^$sDkC;??   @? X ^'#t\CTVa)bdghh. . . ih X. ^K#t\;Lk!Z[[      \[ X  ^IT<9JKXYY   ZY X ^IT<9JKXYYZ	8$$   %$ ZY X Z	8$$^IT{++\)YYz3HHHII' ' ' JI ,+ %$'R Zx((^MD#;>>>\	-#x11 + + +  ?> )(+B Z '**^$sD,@QS^&_begkmy  |M  OZ  b[  \  \   X \  \ +*    r1   r;   rw   T.Anyry   r?   c                     t          | i |S r   )r;   )rw   ry   s     r2   
initializer   A  s    T$V$$$r1   )rw   r   ry   r   r?   r;   )3
__future__r   pathlibr   r   r   r   r   typingT r   r	   r
   r   buildr   r   r   r   interpreter.type_checkingr   r   r   r   interpreterbaser   r   r   r   r   mesonlibr   r   r   r   r   TYPE_CHECKINGr   r    r=   r!   r"   r#   r$   typing_extensionsr%   r'   r4   r;   r   r0   r1   r2   <module>r      sB   # " " " " " 3 3 3 3 3 3 3 3 3 3  				     < < < < < < < < < <       R R R R R R R R R R R R ] ] ] ] ] ] ] ] ] ] ] ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ S S S S S S S S S S S S S S? %(((((())))))------11111111++++++    Y   
% % % % % % % %U U U U U U U Up% % % % % %r1   