
    -Ph                       d dl mZ ddlmZ d dlZd dlmZ d dlZd dl	Zd dl
Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ 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m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl)m+Z+ ddlm"Z" ej,        rd dl-Z.d dl/m0Z0 e0d         Z1	 d dl2Z2dZ3n# e4$ r dZ3Y nw xY wdZ5dZ6g dZ7 ej8        d          Z9dCdZ:dDdEd#Z;dFd%Z< ed&          dGd(            Z=dHd.Z>dId1Z? G d2 d3e&          Z@ G d4 d5e@          ZA G d6 d7          ZBdJd:ZCdKdLd?ZD ed@           G dA dB                      ZEdS )M    )annotations   )mlogN)	dataclass)	b64encode)netrc)PathPurePath)	lru_cache   )WrapMode)coredata)	quiet_gitGITProgressBarMesonExceptionwindows_proof_rmtree
Popen_safe)
FeatureNew)
SubProject)mesonlib)LiteralmesoncmakecargoTFg      >@wrapdb.mesonbuild.com)filegithgsvnredirectpatchurlstrstrreturnurllib.parse.ParseResultc                    t           j                            |           }|j        st	          |  d          |j                            t                    st	          |  d          t          r|j        dk    st	          d|            |S )z3 raises WrapException if not whitelisted subdomain z is not a valid URLz  is not a whitelisted WrapDB URLhttpsz8WrapDB did not have expected SSL https url, instead got )	urllibparseurlparsehostnameWrapExceptionendswithWHITELIST_SUBDOMAINhas_sslscheme)r$   urls     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/wrap/wrap.pywhitelist_wrapdbr5   :   s    
,


'
'C< <v:::;;;<  !455 IvGGGHHH aszW,,_W]__```J    	urlstringallow_insecureboolhave_opt'http.client.HTTPResponse'c                   |rd}nd}t          |           }t          r	 t          j        dt          j                            t          j                            |          t                              S # t          $ r}d|  d| d}t          |t          j        j                  rLt          |j        t          j                  r-|rt#          j        | d           n"t'          | |           t'          |          Y d }~nMd }~ww xY w|st'          d	t(          j         d
|           t#          j        d	t(          j         dd           |                    d          }	 t          j        dt          j                            t          j                            |          t                              S # t          $ r}t'          d|  d|           d }~ww xY w)Nz:

    To allow connecting anyway, pass `--allow-insecure`. zhttp.client.HTTPResponsetimeoutzWrapDB connection failed to z with error .z(

    Proceeding without authentication.zSSL module not available in z: Cannot contact the WrapDB.z#: WrapDB traffic not authenticated.T)oncehttp)r2   )r5   r1   Tcastr*   requesturlopenr+   
urlunparseREQ_TIMEOUTOSError
isinstanceerrorURLErrorreasonsslSSLCertVerificationErrorr   warningr.   sys
executable_replace)r7   r8   r:   insecure_msgr3   excpmsg	nossl_urls           r4   open_wrapdburlrX   E   s5    U
9
%
%C t
	)64fn6L6LV\MdMdehMiMis~6L66  A  A  A 	) 	) 	)OOOOOOC$ 566 ):dkSVSo;p;p )! @LC!S!S!STTTT'3(>(>(>???#C(((	 UTTTT		)  tu3>uugsuuvvv 	gCNgggnrssss F++IZv0&.2H2HI`I`ajIkIk  vA2H  3B  3B  C  C  	C Z Z ZX9XXRVXXYYYZs2   AA5 5
D?BDD+AG 
G%G  G%bytesc                L    t          d| d          }|                                S )Nz.https://wrapdb.mesonbuild.com/v2/releases.jsonT)rX   read)r8   r3   s     r4   get_releases_datar\   e   s#    
I>[_
`
`C88::r6   )maxsizeT.Dict[str, T.Any]c                    t          |           }t          j        dt          j        |                                                    S )Nr^   )r\   rC   rD   jsonloadsdecode)r8   datas     r4   get_releasesrd   i   s4    ^,,D6&
4;;==(A(ABBBr6   wrapfilenamenew_versionnew_revisionNonec                    t          d| d| d| d| d	|d          }t          | d          5 }|                    |                                           d d d            d S # 1 swxY w Y   d S )N!https://wrapdb.mesonbuild.com/v2/_-/.wrapTwb)rX   openwriter[   )re   rf   rg   rh   r8   r3   fs          r4   update_wrap_filert   n   s    
lTllKllR^llaelll'/ /C	h		 	

                 s   (A$$A(+A(	patch_urlT.Tuple[str, str]c                   t           j                            |           }|j        dk    rt	          d|  d          |j                            d                              d          }|d         dk    r|d         |d         fS |d         d	k    r>|d         }|                    d
d          \  }}|                    dd          \  }}||fS t	          d|            )Nr   zURL z$ does not seems to be a wrapdb patchrn   r   v1v2rl   r   rm   zInvalid wrapdb URL )	r*   r+   r,   netlocr.   pathstripsplitrsplit)ru   uarrtagrl   versionrevisions          r4   parse_patch_urlr   t   s    i((Ax***R9RRRSSS
&,,s


!
!#
&
&C
1v~~2wB	Q4"gZZQ''
7#NN322  =)==>>>r6   c                      e Zd ZdS )r.   N__name__
__module____qualname__ r6   r4   r.   r.              Dr6   r.   c                      e Zd ZdS )WrapNotFoundExceptionNr   r   r6   r4   r   r      r   r6   r   c                      e Zd Zddd	Zed d            Zed!d            Ze ed          fd"d            Zed#d            Z	d$dZ
d%dZed&d            Zd'dZdS )(PackageDefinitionNrf   r%   subprojects_dirtype_T.Optional[str]valuesT.Optional[T.Dict[str, str]]c                    || _         || _        || _        |pi | _        i | _        g | _        g | _        d | _        d | _        d| _	        t          j                            | j        d          | _        | j                            d| j                   | _        t          j                            | j                  rt#          d          d| j        v r| j        d                             d          D ]x}t'          |                                          }|                                rt#          d          d|j        v rt#          d	          | j                            |           yd | j        | j                                         <   d S )
NFpackagefiles	directoryz+Directory key must be a name and not a path
diff_files,z#diff_files paths cannot be absolute..z$diff_files paths cannot contain "..")rf   r   typer   provided_depsprovided_programsr   wrapfile_hashoriginal_filename
redirectedosr}   joinfilesdirgetr   dirnamer.   r   r	   r~   is_absolutepartsappendlower)selfrf   r   r   r   sr}   s          r4   __init__zPackageDefinition.__init__   sh   	.	l;=.0(*.226 %T%9>JJdi@@7??4>** 	O MNNN4;&&[.44S99 - -AGGII##%% O'(MNNN4:%%'(NOOO&&t,,,,0449??,,---r6   T.Dict[str, str]r&   c                &    t          | |||          S N)r   )rf   r   r   r   s       r4   from_valueszPackageDefinition.from_values   s     vFFFr6   filenamec                    t           j                            |           }t           j                            |           }t	          ||          S r   )r   r}   basenamer   r   )r   rf   r   s      r4   from_directoryz PackageDefinition.from_directory   s:    w))'//(33 777r6   r=   
subprojectr   c                (   t                               |           \  }}}d|v r#t          dd                              |           d|v r#t          dd                              |           dD ]7}| d|v r.| d	|vr't          d
| d	d                              |           8t          j                            |           }|dk    rt          |d                   }t          |j	                  D ]9\  }}	|dz  dk    r|	dk    rt          d          $|	dk    rt          d          :|j        dk    rt          d          t          ||          }|                                st          d| d          t                               t          |          |          }
| |
_        d|
_        |
S t          j                            |           d d         }t                               ||||          }
| |
_        |
                    |           t)          | dd          5 }t+          j        |                                                    d                                                    |
_        d d d            n# 1 swxY w Y   |
S )Nr   zWrap files with diff_filesz0.63.0patch_directoryzWrap files with patch_directoryz0.55.0)r#   source	_filename_urlzLocal wrap patch files without r"   r   r   r   r   z*wrap-redirect filename cannot contain ".."subprojectszCwrap-redirect filename must be in the form foo/subprojects/bar.wrapro   z+wrap-redirect filename must be a .wrap filezwrap-redirect z filename does not existTrutf-8encoding)r   _parse_wrapr   user   r}   r   r	   	enumerater   r.   suffixis_filefrom_wrap_filer%   r   r   r   r   parse_provide_sectionrq   hashlibsha256r[   encode	hexdigestr   )r   r   configr   r   whatr   fnameipwraprf   r   s                r4   r   z PackageDefinition.from_wrap_file   s    1 = =h G Gv6!!3X>>BB:NNN&&8(CCGG
SSS' 	c 	cD!!!V++4V0K0KGTGGGRRVVWabbb'//(33J 
+,,E!%+.. s s1q5A::Dyy+,XYYY ! M))+,qrrr *|w&&#$QRRR%00E==?? V#$TU$T$T$TUUU$33CJJ
KKD%-D""DOKw))#2#. ,,T?E6RR!)""6***(C'222 	Yd!(		0B0B70K0K!L!L!V!V!X!XD	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y s   *AJJJ9T.Tuple[configparser.ConfigParser, str, T.Dict[str, str]]c                (   	 t          j        d           }|                    | d           n,# t           j        $ r}t	          d|  d|          d }~ww xY wt          |                                          dk     rt	          d|            |                                d         }|                    d	          st	          |d
|            |dd          }|t          vrt	          d|          t          ||                   }|||fS )N)interpolationr   r   zFailed to parse z: r   zMissing sections in r   zwrap-z! is not a valid first section in    Unknown wrap type )
configparserConfigParserr[   Errorr.   lensections
startswith	ALL_TYPESdict)r   r   ewrap_sectionr   r   s         r4   r   zPackageDefinition._parse_wrap   sD   	F!.TBBBFKK7K3333! 	F 	F 	F D8 D Dq D DEEE	Fv  !!A%% Ax A ABBB((+&&w// 	`< ^ ^T\ ^ ^___QRR 	!! >U > >???f\*++uf$$s   ,/ AAAr   configparser.ConfigParserri   c                   |                     d          rt          d          |                     d          r|d                                         D ]\  }}|dk    r:d |                    d          D             }| j                            |           E|dk    r0d |                    d          D             }| xj        |z  c_        {|sd	|d
| j         d}t          |          || j        |<   d S d S )Nprovidesz:Unexpected "[provides]" section, did you mean "[provide]"?providedependency_namesc                \    i | ])}|                                                                 d *S r   )r~   r   .0ns     r4   
<dictcomp>z;PackageDefinition.parse_provide_section.<locals>.<dictcomp>   s,    !P!P!Pa!''))//"3"3T!P!P!Pr6   r   program_namesc                6    g | ]}|                                 S r   )r~   r   s     r4   
<listcomp>z;PackageDefinition.parse_provide_section.<locals>.<listcomp>   s     !B!B!B!''))!B!B!Br6   z#Empty dependency variable name for  in zp.wrap. If the subproject uses meson.override_dependency() it can be added in the "dependency_names" special key.)has_sectionr.   itemsr   r   updater   rf   )r   r   kv
names_dict
names_listms          r4   r   z'PackageDefinition.parse_provide_section   sO   j)) 	^ \]]]i(( 	*y)//11 * *1*** "Q!P1773<<!P!P!PJ&--j999''!B!BQWWS\\!B!B!BJ**j8** +Rq R R	 R R RA (***()"1%%'	* 	** *r6   keyc                p    	 | j         |         S # t          $ r t          d|d| j         d          w xY w)NzMissing key r   ro   )r   KeyErrorr.   rf   )r   r   s     r4   r   zPackageDefinition.get  sX    	L;s## 	L 	L 	L Js J J$) J J JKKK	Ls    &5subproject_directoryc                B    t           j                            | d          S )Nz.meson-subproject-wrap-hash.txt)r   r}   r   )r   s    r4   get_hashfilezPackageDefinition.get_hashfile  s    w||02STTTr6   c                    | j         r]t          |                     |          dd          5 }|                    | j         dz              d d d            d S # 1 swxY w Y   d S d S )Nwr   r   
)r   rq   r   rr   )r   r   r   s      r4   update_hash_cachez#PackageDefinition.update_hash_cache  s     	6d''(<==sWUUU 6Y]

4-45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s   AAA)NN)rf   r%   r   r%   r   r   r   r   )
rf   r%   r   r%   r   r%   r   r   r&   r   )r   r%   r&   r   )r   r%   r   r   r&   r   )r   r%   r&   r   )r   r   r&   ri   )r   r%   r&   r%   )r   r%   r&   r%   )r   r%   r&   ri   )r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r  r   r6   r4   r   r      s&       5 5 5 5 54 G G G \G 8 8 8 \8
 ?Iz"~~ * * * * \*X % % % \%"* * * *0L L L L U U U \U6 6 6 6 6 6r6   r   subdir_rootpackagenamec                    t           j                            | |dz             }t           j                            |          r!t                              |          }|j        S |S )Nro   )r   r}   r   isfiler   r   r   )r  r  r   r   s       r4   get_directoryr    sS    GLLkG&;<<E	w~~e  //66~r6   cmdT.List[str]
workingdircheckc                    	 t          j        | ||          S # t           j        $ r!}t          t	          |                    d}~ww xY w)zQ
    Wrapper to convert GitException to WrapException caught in interpreter.
    r  N)r   verbose_gitGitExceptionr.   r%   )r	  r  r  r   s       r4   r  r    sU    $#C5AAAA  $ $ $CFF###$s    A	AA	)eqc                  t   e Zd ZU ded<   ded<    ed          Zded<   ej        Zded<   d	Z	d
ed<   d	Z
d
ed<   d	Zd
ed<   dJdZdJdZdJdZdKdZdJdZdLdZdMdZdNdZdOd ZdPd#ZdQd&ZdRdSd+ZdJd,ZdTd-ZdUd.ZdUd/ZdJd0ZdVd2ZdJd3ZdJd4ZdWd7Z dXd:Z!dYdZd?Z"dXd@Z#d[d\dCZ$d]dDZ%dUdEZ&dJdFZ'd^dIZ(d'S )_Resolverr%   
source_dirsubdirr=   r   r   r   	wrap_modeFr9   wrap_frontendr8   silentr&   ri   c                   t           j                            | j        | j                  | _        t           j                            d          p$t           j                            | j        d          | _        i | _	        d | _
        i | _        i | _        i | _        i | _        i | _        |                                  |                                  |                                  d S )NMESON_PACKAGE_CACHE_DIRpackagecache)r   r}   r   r  r  r  environr   cachedirwrapsr   r   r   wrapdbwrapdb_provided_depswrapdb_provided_programs
load_wraps
load_netrcload_wrapdb)r   s    r4   __post_init__zResolver.__post_init__0  s    7<<EE
'@AAsRW\\RVRbdrEsEs57
(,
=?AC*,68!:<%r6   c                    	 t                      | _         d S # t          $ r Y d S t          $ r%}t          j        d| dd           Y d }~d S d }~ww xY w)Nzfailed to process netrc file: r@   Ffatal)r   FileNotFoundError	Exceptionr   rP   )r   r   s     r4   r#  zResolver.load_netrc>  s    	MDJJJ  	 	 	FF 	M 	M 	ML>!>>>eLLLLLLLLLL	Ms    
A	AAAc                   t           j                            | j                  }t           j                            t           j                            |d                    r3ddlm} |                    || j                  D ]}|| j	        |j
        <   t           j                            | j                  r"t          t          j        | j                            \  }}}|D ]l}|                    d          st           j                            | j        |          }t                              || j                  }|| j	        |j
        <   mddh}	| j	                                        D ]}|	|j        |j
        hz  }	|D ]U}||	v rt           j                            | j        |          }t                              |          }|| j	        |j
        <   V| j	                                        D ]}|                     |           d S )Nz
Cargo.lockr   )r   ro   r  r   )r   r}   r   r  existsr   r=   r   r"  r  rf   isdirnextwalkr/   r   r   r   r   r   r   add_wrap)
r   r  r   r   rootdirsfilesr   r   ignore_dirss
             r4   r"  zResolver.load_wrapsF  s   W__T%566
7>>"',,z<@@AA 	-      ((T5EFF - -(,
49%%7==)** 	- $RWT-=%>%> ? ?D$ - -zz'** T%5q99(77tOO(,
49%%)>:K
))++ ; ;	:: - -##T%5q99(77>>(,
49%%J%%'' 	  	 DMM$	  	 r6   r   r   c                b   |j                                         D ]F}|| j         v r1| j         |         }d|d|j         d|j         }t          |          || j         |<   G|j        D ]F}|| j        v r1| j        |         }d|d|j         d|j         }t          |          || j        |<   Gd S )NzMultiple wrap files provide z dependency: z and z
 program: )r   keysrf   r.   r   )r   r   r   	prev_wrapr   s        r4   r0  zResolver.add_wrapd  s    #((** 	) 	)AD&&& .q1	e1eeTYeeU^Ucee#A&&&$(Dq!!' 	- 	-AD*** 215	b1bb$)bbR[R`bb#A&&&(,D"1%%	- 	-r6   c                
   	 t          | j        d                              dd          5 }t          j        |          | _        d d d            n# 1 swxY w Y   n# t          $ r Y d S w xY w| j                                        D ]y\  }| j        	                    fd|
                    dg           D                        | j        	                    fd|
                    dg           D                        zd S )	Nzwrapdb.jsonr   r   r   c                    i | ]}|S r   r   r   r   rf   s     r4   r   z(Resolver.load_wrapdb.<locals>.<dictcomp>y  s    -`-`-`!a-`-`-`r6   r   c                    i | ]}|S r   r   r:  s     r4   r   z(Resolver.load_wrapdb.<locals>.<dictcomp>z  s    1a1a1aa!T1a1a1ar6   r   )r	   r  rq   r`   loadr  r)  r   r   r   r   r!  )r   rs   inforf   s      @r4   r$  zResolver.load_wrapdbr  s\   	d&66;;C';RR +VW"ill+ + + + + + + + + + + + + + +  	 	 	FF	+++-- 	c 	cJD$%,,-`-`-`-`txxHZ\^?_?_-`-`-`aaa)001a1a1a1a488O]_C`C`1a1a1abbbb	c 	cs4   *A AA AA AA 
A-,A-	subp_nameT.Optional[PackageDefinition]c                   | j                             |          }|sd S |                                  |d         d         }|                    dd          \  }}t          j                            d| d| d| d| d	          }t          | j        | d          }|	                    d	          5 }|
                    |                                           d d d            n# 1 swxY w Y   t          j        d
| d| d|            t                              t!          |                    }	|	| j        |	j        <   |                     |	           |	S )Nversionsr   rm   r   rk   rl   rn   ro   rp   z
Installed z	 version z
 revision )r  r   check_can_downloadr   r*   rE   rF   r	   r  rq   rr   r[   r   logr   r   r%   r  rf   r0  )
r   r>  r=  latest_versionr   r   r3   r   rs   r   s
             r4   get_from_wrapdbzResolver.get_from_wrapdb|  s   {y)) 	4!!!j)!,*11#q99n$$%z%z%zU\%z%z_g%z%zjs%z%z%z{{T%)':':':;;ZZ 	 GGCHHJJ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 OiOO'OOXOOPPP //E

;; $
49ds   3(C''C+.C+other_resolver
'Resolver'c                b   |j                                         D ] \  }}| j                             ||           !|j                                        D ] \  }}| j                            ||           !|j                                        D ] \  }}| j                            ||           !d S r   )r  r   
setdefaultr   r   )r   rF  r   r   s       r4   _merge_wrapszResolver._merge_wraps  s    "(..00 	( 	(DAqJ!!!Q''''"06688 	0 	0DAq))!Q////"4::<< 	4 	4DAq"--a3333	4 	4r6   c           	         | j         t          j        k    rEt          | j        ||| j         | j        | j        | j                  }|                     |           d S d S r   )	r  r   	nopromoter  r  r  r8   r  rJ  )r   r  r   rF  s       r4   load_and_mergezResolver.load_and_merge  so    >X///%dovz4>[_[mos  pC  EI  EP  Q  QNn----- 0/r6   r  )T.Tuple[T.Optional[str], T.Optional[str]]c                    |                                 }| j                            |          }|r#|j                            |          }|j        |fS | j                            |          }|d fS r   )r   r   r   rf   r   )r   r  r   dep_var	wrap_names        r4   find_dep_providerzResolver.find_dep_provider  sv     "''))!%%k22 	&(,,[99G9g%%-11+>>	$r6   depnamer   c                r    | j                             |          }|r|j                            |          nd S r   )r  r   r   )r   r>  rS  r   s       r4   get_varnamezResolver.get_varname  s6    z~~i((26@t!%%g...D@r6   namesr
  c                    |D ]G}| j                             |          }|r	|j        c S | j                            |          }|r|c S Hd S r   )r   r   rf   r!  )r   rV  rf   r   rQ  s        r4   find_program_providerzResolver.find_program_provider  sq     	! 	!D)--d33D !y   599$??I !    !tr6   Nforce_methodT.Optional[Method]T.Tuple[str, Method]c                
     j                             |          }|*                     |          }|t          d| d          | _         j        j         _        t          j                             j        j	         j        j                   _
        t          j                             j
                  s/t          j                             j         j                   _
        t          j                             j
         j                  } j        j        rUt          j                             j        j                  }t          j                             j        |          } j        j        |k    rt          j                             j        j         j                  }t#          j        dt#          j        |                     t)          |dd          5 }|                    t-          j        dt1          t          j                             j        j         j                                                             d                     d d d            n# 1 swxY w Y   d	d
ddt5          j        d j        j                            d|                    r@vr<d                                                              }	t=          dd|	           |r|k    rt=          dd|           pdd  fd}
 |
            r                                  |fS                                    t          j                             j
                  r5t          j        !                     j
                  st=          d          nyt          j                             j"         j                  }t          j        !                    |          r #                    | j
                   nƉ j        j$        dk    r %                    |           n &                                  j        j$        dk    r '                    |           nf j        j$        dk    r (                                 nA j        j$        dk    r )                                 nt=          d j        j$                  	  *                    |            +                                 n## tX          $ r t[           j
                    w xY w |
            st=          d          d           j        .                     j
                   |fS )!Nz%Neither a subproject directory nor a z.wrap file was found.Usingr   r   r   zK                        [wrap-redirect]
                        filename = z
                        zmeson.buildzCMakeLists.txtz
Cargo.tomlr   rZ  methodz, zWrap method z# is not supported, must be one of: zWrap method is z( but we are trying to configure it with r   r&   r9   c                     t           j                            t           j                            j                                      S r   )r   r}   r,  r   r   )r^  methods_mapr   s   r4   has_buildfilez'Resolver.resolve.<locals>.has_buildfile  s.    7>>"',,t|[=P"Q"QRRRr6   z*Path already exists but is not a directoryr   r   r    r!   r   zSubproject exists but has no z file.r&   r9   )/r  r   rE  r   r   r   r   r}   r   r   r   r,  r  relpathr  r   r   r   rC  boldrq   rr   textwrapdedentr
   as_posixrC   rD   r   r6  r.   validateresolve_git_submoduler-  r  	copy_treer   	_get_filerB  _get_git_get_hg_get_svnapply_patchapply_diff_filesr*  r   r  )r   r  rY  r   rel_pathr   
main_fnamerelrs   allowed_methodsra  cached_directoryr^  r`  s   `           @@r4   resolvezResolver.resolve  sY   z~~k**<''44D|+,vT_,v,v,vwww	,w||DI$=ty?RSSw~~dl++ 	J7<<(8$.IIDL7??4<AA9& 	 w''	(CDDHd&6AAJy*j88goodi&A4?SS$)C..111 *cG<<< GGHO -$,RW__TY=XZ^Zj-k-k$l$l$u$u$w$w- - -                    #%!,
 ,
 ,di.>.B.B8\.Z.Z[[ 	ofK//"ii(8(8(:(:;;O mv m m\k m mnnn 	tFl22 r& r rdp r rsss"7	S 	S 	S 	S 	S 	S 	S 	S =?? 	$MMOOOV## 	""$$$7>>$,'' 	7==.. R#$PQQQR  "w||DM4>JJw}}-.. Q/>>>>6)){++++'')))9>U**MM+....Y^t++LLNNNNY^u,,MMOOOO'(OTY^(O(OPPP  ---%%''''   $T\222 } 	] [F@S [ [ [\\\
 		##DL111s   +A8I//I36I3)T  T#c                N    | j         t          j        u rd}t          |          d S )Nz7Automatic wrap-based subproject downloading is disabled)r  r   
nodownloadr.   )r   r   s     r4   rB  zResolver.check_can_download  s/     >X000IA""" 10r6   c                   t           sdS t          j                            | j                  sdS t          dgt          | j                  j                  \  }}|sdS t          g d| j                  \  }}|sdS |                    d          rt          j
        d           dS |                    d          rt          d          |                    d	          r(t          g d
| j                  rdS t          d          |                    d          r0t          g d| j                   t          ddg| j                   dS |dk    rdS t          d|          )NFz	rev-parse)	submodulestatusr@   +z"git submodule might be out of dateTUz!git submodule has merge conflictsrm   )rz  r   --initr@   zgit submodule failed to init )rz  r   r@   checkoutr@   r=   zUnknown git submodule output: )r   r   r}   r-  r   r   r	   parentr   r   rP   r.   r  )r   retouts      r4   ri  zResolver.resolve_git_submodule  s     	5 w}}T\** 	5k]D,>,>,EFFS 	59994<HHS 	5>># 	L=>>>4^^C   	 CDDD^^C   	AAA4<PP t >???^^C   	444dlCCCS)4<888 4BYY5DSDDEEEr6   c                ,   |                      d|          }| j        }d| j        j        v r t	          j        | j                   | j        }	 t          j        ||           d S # t          $ r%}t          dt          |                     |d }~ww xY w)Nr   lead_directory_missingz%failed to unpack archive with error: )_get_file_internalr  r   r   r   mkdirr   shutilunpack_archiverI   r.   r%   )r   r  r}   extract_dirr   s        r4   rk  zResolver._get_fileD  s    &&x==& $ty'777HT\""",K	Y!$44444 	Y 	Y 	Y PA P PQQWXX	Ys   A$ $
B. BBc                   t           st          d| d          | j                            d          }ddd|dg}d}g }| j        j                            d	d
          d
k    r#d}d| j        j                            d	          g}|r|                     |          rt          ddd| j        g| j        d           t          ddd| j                            d          g| j	        d           | j                            d          }t          dg|d|| j	        d           t          || j	        d           n|st          d| j                            d          | j        g| j        d           |
                                dk    r^t          || j	                  sIt          d| j                            d          |g| j	        d           t          || j	        d           nadddg|}|
                                dk    r|d|gz  }|| j                            d          | j        gz  }t          || j        d           | j        j                            dd
          
                                dk    rt          dddddg|| j	        d           | j        j                            d          }|rt          dd d!d|g| j	        d           d S d S )"Nz'Git program not found, cannot download z.wrap via git.r   z-czadvice.detachedHead=falser  z--Fdepthr=   Tz--depthz%init.defaultBranch=meson-dummy-branchinitr  remoteaddoriginr3   fetchcloneheadz--branchzclone-recursivetruerz  r   r~  z
--checkoutz--recursivezpush-urlzset-urlz--push)r   r.   r   r   r   is_git_full_commit_idr  r   r  r   r   )r   r  revnocheckout_cmd
is_shallowdepth_optionargspush_urls           r4   rl  zResolver._get_gitQ  s)    	g e+ e e efff	j))9:udS
$&9,,22J%ty'7';';G'D'DEL 	@$44U;; 	@ FPTP^_aeaqy}~~~~5(DIMM%4H4HI4<_cddddIMM*--EA<AA5A4<W[\\\\dl$????? @WdimmE&:&:DNKTM]eijjjj;;==F**&|T\BB L#WdimmE.B.BE$JDL`deeee#L$,dKKKK97R\R;;==F**Z//Du--t~>>D$"2$????9 1266<<>>&HHh,eXdeD2 2 2 29#''
33 	g9h(KT\aeffffff	g 	gr6   c                   | j         j        sd S | j                             | j                  }t          j                            |          rQt          |dd          5 }|                                	                                }d d d            n# 1 swxY w Y   nd S || j         j        k    r$t          j        d| j         j         d           d S d S )Nr   r   r   zSubproject zW's revision may be out of date; its wrap file has changed since it was first configured)r   r   r   r   r   r}   r  rq   r[   r~   r   rP   rf   )r   hashfiler   expected_hashs       r4   rh  zResolver.validatex  s&   y& 	F 9))$,777>>(## 	hg666 4$ $		 1 1 3 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 F DI333L  Pty~  P  P  P  Q  Q  Q  Q  Q 43s   'BBBr  c                ^    d}t          |          dv rt          d |D                       }|S )NF>   (   @   c              3     K   | ]}|d v V  	dS )0123456789AaBbCcDdEeFfNr   )r   chs     r4   	<genexpr>z1Resolver.is_git_full_commit_id.<locals>.<genexpr>  s(      HHB77HHHHHHr6   )r   all)r   r  results      r4   r  zResolver.is_git_full_commit_id  s9    u::!!HH%HHHHHFr6   c                l   | j                             d          }t          j        d          }|st	          d          t          j        |d| j                             d          | j        g| j                   |	                                dk    r t          j        |d|g| j
                   d S d S )	Nr   r    zMercurial program not found.r  r3   cwdtipr  )r   r   r  whichr.   
subprocess
check_callr   r  r   r   )r   r  r    s      r4   rm  zResolver._get_hg  s    	j))\$ 	@ >???r7DIMM%,@,@#~/484D	F 	F 	F 	F;;==E!!!2z5"9&*l4 4 4 4 4 4 "!r6   c           	         | j                             d          }t          j        d          }|st	          d          t          j        |dd|| j                             d          | j        g| j                   d S )Nr   r!   zSVN program not found.r  z-rr3   r  )	r   r   r  r  r.   r  r  r   r  )r   r  r!   s      r4   rn  zResolver._get_svn  s    	j))l5!! 	: 8999sJeTY]]5=Q=Q#~/484D	F 	F 	F 	F 	F 	Fr6   r|   T.Optional[T.Tuple[str, str]]c                |    | j         || j         j        vrd S | j                             |          \  }}}|r|}||fS r   )r   hostsauthenticators)r   r|   loginaccountpasswords        r4   get_netrc_credentialszResolver.get_netrc_credentials  sQ    :tz/?!?!?4#':#<#<V#D#D w 	Ehr6   r7   rv   c           	     <   d}t          j                    }t          j        d| j        d          }t
          j                            |          }|j        r=|j        	                    t                    rt          || j        | j                  }nt          |v rt          | d          dt          j         ddd	}|                     |j                  }|d
|j        vr|\  }	}
|j        dk    rSt)          |	 d|
                                                                           }|                    dd| i           nb|j        dk    rAt
          j                            |                    |	 d|
 d
|j                             }nt5          j        dd           	 t
          j                            ||          }t
          j                            |t>                    }nF# t@          $ r9}t5          j!        tE          |                     t          d| d          d }~ww xY wtG          j$        |          5 }|5 }	 tK          |&                                d                   }n# tN          $ r d }Y nw xY w|tQ          d           	 |)                    |          }|dk    rn+|                    |           |*                    |           G|+                                }||j,        fcd d d            cd d d            S tZ          j.        /                                 ta          d|d| j1        pd           }	 |)                    |          }|dk    rnM|                    |           |*                    |           |                    te          |                     i|3                                 |+                                }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ||j,        fS )Ni (  rp   F)modedirdelete)r8   r:   z" may be a WrapDB-impersonating URLzmesonbuild/*)z
User-AgentzAccept-LanguagezAccept-Encoding@r)   :AuthorizationzBasic ftp)r|   zNMeson is not going to use netrc credentials for protocols other than https/ftpr'  )headersr>   zcould not get z is the internet available?zContent-Lengthz!Downloading file of unknown size.Tr6   downloadDownloading)bar_typetotaldescdisable)4r   r   tempfileNamedTemporaryFiler  r*   r+   r,   r-   r/   r0   rX   r8   r  r.   r   r   r  r|   r2   r   r   rb   r   rG   rS   r   rP   rE   RequestrF   rH   rI   rC  r%   
contextlibclosingintr=  	TypeErrorprintr[   rr   r   rf   rQ   stdoutflushr   r  r   close)r   r7   	blocksizehtmpfiler3   respr  credsr  r  	enc_credsreqr   dlsizeblock	hashvalueprogress_bars                     r4   get_datazResolver.get_data  s   	N-4T]SXYYYl##I..< 	]CL112EFF 	]!)D<OZ^ZlmmmDD I--9 P P PQQQ ?H,<>>#&#& G
 ..sz::E S
%:%:"'x:(( )U*?*?X*?*?*F*F*H*H I I P P R RINNO5Ii5I5I#JKKKKZ5(( & 7 7uLnLnW_LnLnbeblLnLn8o8o p pIIL!q',. . . .]n,,Y,HH~--c;-GG ] ] ]Q   #$[Y$[$[$[\\\] %% 	&w 	&'TYY[[)9:;;   ~9:::) IIi00E||HHUOOOMM%((() KKMM	 ',.	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& J&
&,9040CtF F FL0		),,C<<e$$$##CJJ///0    I7	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&8 ',&&s   .AG6 6
H9 4H44H9P
O3'I=<O3=J	O3JA8O3P
C
O3'P
3O7	7P
:O7	;P

PPTr   r}   hash_requiredc           	        |dz   | j         j        vr|sd S | j                             |dz                                             }t	          j                    }t          |d          5 }|                    |                                           d d d            n# 1 swxY w Y   |	                                }||k    rt          d| d| d| d          d S )N_hashrbIncorrect hash for :
  expected
  actual.)r   r   r   r   r   r   rq   r   r[   r   r.   )r   r   r}   r  expectedr  rs   dhashs           r4   
check_hashzResolver.check_hash  s   '>!111-1F9==006688N$ 	HHQVVXX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	H ed e e e eV[ e e efff s   ((BB #B c                    g d}|D ]^}	 |                      |          c S # t          $ r8}t          j        d| dd           t	          j        |           Y d }~Wd }~ww xY w|                      |          S )N)r   r            zfailed to download with error: z. Trying after a delay...Fr'  )r  r*  r   rP   timesleep)r   r7   delaysdr   s        r4   get_data_with_backoffzResolver.get_data_with_backoff  s    !!! 	 	A}}Y/////   [q[[[chiiii
1 }}Y'''s   !
A#.AA#ofnamefallbackc           	        |                                   | j                            ||rdndz             }t          j        dt          j        |          |dt          j        |                     	 |                     |          \  }}| j                            |dz                                             }||k    r-t          j	        |           t          d| d| d| d	          nh# t          $ r[ |sW|dz   | j        j        v r|                     |||d
          cY S t          j        dt          j        |dz             d            w xY wt          j        ||           d S )N_fallback_urlr   r  fromr  r  r  r  r  T)r  z'A fallback URL could be specified usingzkey in the wrap file)rB  r   r   r   rC  rd  r  r   r   remover.   r   	_downloadrename)	r   r   r  r  r  srcurlr  r  r  s	            r4   r  zResolver._download  s   !!!t('NOPP	+ 6 6fdiPVFWFWXXX	!77??NE7y}}TG^44::<<H  	'"""#$i$$i$iH$i$iZ_$i$i$ijjj !  	 	 	 T/)TY-===>>$d>SSSSSB4/#9::<RT T T	 		'6"""""s   3A:C. .6E&-Ec                   | j                             |dz             }|dz   | j         j        v rt          j                            | j        |          }t          j                            |          rA|                     ||           t          j
        dt          j        |          |d           |S t          j        | j        d           |                     |||           |S t          | j         j                  |z  }|                                st!          d| d          |                     ||                                d	
           |                                S )Nr   r   r]  zfrom cache.T)exist_okzFile "" does not existF)r  )r   r   r   r   r}   r   r  r,  r  r   rC  rd  makedirsr  r	   r   r.   rg  )r   r   r  r   
cache_pathr}   s         r4   r  zResolver._get_file_internal  s8   9==!344&=DI,,,dmX>>Jw~~j)) "j111$)K"8"8$NNN!!K5555NN4[999	*++h6D;;== E#$CT$C$C$CDDDOOD$--//OGGG==??"r6   c                   d| j         j        v r-d| j         j        v rd| j         j        d}t          |          d| j         j        v r|                     d|          }	 t          j        || j                   d S # t          $ rb t          j
                    5 }t          j        ||           |                     || j                   d d d            n# 1 swxY w Y   Y d S Y d S w xY wd| j         j        v r| j         j        d         }t          j                            | j         j        |          }t          j                            |          st          d|           |                     || j                   d S d S )Npatch_filenamer   z
Wrap file z: must not have both "patch_filename" and "patch_directory"r#   z patch directory does not exist: )r   r   rf   r.   r  r  r  r  r*  r  TemporaryDirectoryrj  r   r}   r   r   r-  r   )r   r  r   r}   workdir	patch_dirsrc_dirs          r4   ro  zResolver.apply_patch+  s   ty///4EIY4Y4YiTY^iiiA"""ty///**7K@@D>%dD,<===== > > >022 >g)$888NN7D,<===> > > > > > > > > > > > > > > > > > > > >> $)"222	():;Igll49#5yAAG7==)) T#$Ry$R$RSSSNN7DL11111 32s6   !A= =C)1CC)C	C)C	C)(C)c                   | j         j        D ]_}t          j        d| d           t	          | j         j                  |z  }|                                st          d| d          t          j	        
                    t          |          | j                  }t          r:t          ddddt          t	          |                                                    g}n%t          rt          d	d
ddd|g}nt          d          t!          || j        t"          j                  \  }}}|j        dk    r9t          j        |                                           t          d| d          ad S )NzApplying diff file ""zDiff file "r  z-lz-fz-p1z-iz--work-treer@   applyz--ignore-whitespacez5Missing "patch" or "git" commands to apply diff files)r  stderrr   zFailed to apply diff file ")r   r   r   rC  r	   r   r,  r.   r   r}   rc  r%   r   PATCHrg  r   r   r  STDOUT
returncoder~   )r   r   r}   rc  r	  r   r  rl   s           r4   rp  zResolver.apply_diff_files>  sn   	, 	O 	OHH7H777888	*++h6D;;== J#$H$$H$H$HIIIgooc$ii>>G ] dD%s4==;Q;Q;S;S7T7TU ]
 M39NPUW^_#$[\\\"3DLARSSSIAsA|q  %%%#$M($M$M$MNNN !+	O 	Or6   root_src_dirroot_dst_dirc                |   t          j        |          D ]%\  }}}|                    ||d          }t           j                            |          st          j        |           |D ]}t           j                            ||          }t           j                            ||          }	t           j                            |	          rY	 t          j        |	           nC# t          $ r6 t          j	        |	t          j                   t          j        |	           Y nw xY wt          j        ||d           Ґ'dS )zG
        Copy directory tree. Overwrites also read only files.
        r   F)follow_symlinksN)r   r/  replacer}   r,  r  r   r  PermissionErrorchmodstatS_IWUSRr  copy2)
r   r  r  r  rl   r3  dst_dirfile_src_filedst_files
             r4   rj  zResolver.copy_treeX  s=    "$!6!6 	G 	GGQoolL!DDG7>>'** %G$$$ 	G 	G7<<777<<777>>(++ ,,	(++++* , , ,4<888	(+++++, XwFFFFF	G		G 	Gs   
C=DD)r&   ri   )r   r   r&   ri   )r>  r%   r&   r?  )rF  rG  r&   ri   )r  r%   r   r   r&   ri   )r  r%   r&   rN  )r>  r%   rS  r%   r&   r   )rV  r
  r&   r   r   )r  r%   rY  rZ  r&   r[  rb  )r  r%   r&   ri   )r  r%   r&   r9   )r|   r%   r&   r  )r7   r%   r&   rv   )T)r   r%   r}   r%   r  r9   r&   ri   F)
r   r%   r  r%   r  r%   r  r9   r&   ri   )r   r%   r  r%   r&   r%   )r  r%   r  r%   r&   ri   ))r   r   r   __annotations__r   r   r   defaultr  r  r8   r  r%  r#  r"  r0  r$  rE  rJ  rM  rR  rU  rX  rv  rB  ri  rk  rl  rh  r  rm  rn  r  r  r  r  r  r  ro  rp  rj  r   r6   r4   r  r  &  s        OOOKKK'Z^^J++++"*I****M N    F   M M M M       <- - - -c c c c   "4 4 4 4. . . .
	 	 	 	A A A A   `  `  `  `  ` D# # # #&F &F &F &FPY Y Y Y%g %g %g %gNQ Q Q Q$   	4 	4 	4 	4F F F F   >' >' >' >'@	g 	g 	g 	g 	g( ( ( (# # # # #&# # # #,2 2 2 2&O O O O4G G G G G Gr6   r  )r$   r%   r&   r'   )FF)r7   r%   r8   r9   r:   r9   r&   r;   )r8   r9   r&   rY   )r8   r9   r&   r^   )re   r%   rf   r%   rg   r%   rh   r%   r8   r9   r&   ri   )ru   r%   r&   rv   )r  r%   r  r%   r&   r%   r  )r	  r
  r  r%   r  r9   r&   r9   )F
__future__r   r=   r   r  dataclassesr   urllib.requestr*   urllib.errorurllib.parser   r   r  r  r  r  rQ   r   r  typingrC   re  r`   base64r   r   pathlibr	   r
   	functoolsr   r   r   r   r   r   r   r   r   r   interpreterbaser   r   TYPE_CHECKINGhttp.clientrB   typing_extensionsr   MethodrN   r1   ImportErrorrH   r0   r   r  r  r5   rX   r\   rd   rt   r   r.   r   r   r  r  r  r   r6   r4   <module>r.     s   # " " " " "           ! ! ! ! ! !             				         



                        " " " " " " " "                   d d d d d d d d d d d d d d d d ( ( ( ( ( ( ( ( ( ( ( (      ? 0))))))./F JJJGG   GGG - 444	W	 	 	 	Z Z Z Z Z@    4C C C C   ? ? ? ?"	 	 	 	 	N 	 	 		 	 	 	 	M 	 	 	I6 I6 I6 I6 I6 I6 I6 I6V   $ $ $ $ $ eB	G B	G B	G B	G B	G B	G B	G B	G B	G B	Gs   5B< <CC