
    <h`                    R   % S SK Jr  SSKJr  S SKrS SKJr  S SKrS SK	rS SK
rS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJrJr  S S	KJ r   S
SKJ!r!  SSKJ"r"  SSK#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+  SSK,J-r-  SSK,J.r.  SSKJ#r#  \R^                  (       a  S SK0r1S SK2J3r3  \3S   r4 S SK5r5Sr6Sr8Sr9/ SQr:\#Rv                  " 5       (       a  SSK<J=r=  SSK#J>r>  / r?S\@S'    \=" SS\?S9rA\AR                  5       (       d  OW\>" \AR                  5       S5      (       a  O:\?R                  \R                  R                  \AR                  5       5      5        Mu  \AR                  5       (       a  \AR                  5       OSrHO\R                  " S5      rHS2S jrJS3S4S  jjrKS5S! jrLS6S" jrM\ " SS#9S7S$ j5       rNS8S% jrOS9S& jrP " S' S(\)5      rQ " S) S*\Q5      rR " S+ S,5      rSS:S- jrTS;S<S. jjrU\" SS/9 " S0 S15      5       rVg! \7 a    Sr6 GNZf = f)=    )annotations   )mlogN)	dataclass)	b64encode)netrc)PathPurePath)	lru_cache   )WrapMode)coredata)DirectoryLockDirectoryLockAction	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)ExternalProgram)version_compareT.List[str]_exclude_pathspatch)silentexclude_pathsz>=2.6.1c                8   [         R                  R                  U 5      nUR                  (       d  [	        U  S35      eUR                  R                  [        5      (       d  [	        U  S35      e[        (       a  UR                  S:X  d  [	        SU  35      eU$ )z2raises 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)urlstrurls     u/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/wrap/wrap.pywhitelist_wrapdbr:   L   s    
,,


'C<<vh&9:;;<<  !455vh&FGHHwszzW,VW]V^_``J    c                  ^ U(       a  SnOSnSU4S jjn[        U 5      n[        (       a	   U" U5      $ U(       d  [        S[        R                   S	U 35      e[        R                  " S[        R                   S
3SS9   U" UR                  SS95      $ ! [         a  nSU  SU S3n[        U[        R
                  R                  5      (       a]  [        UR                  [        R                  5      (       a4  U(       a  [        R                  " U S35         S nAN[        U U 35      e[        U5      eS nAff = f! [         a  n[        SU  SU 35      eS nAff = f)Nz:

    To allow connecting anyway, pass `--allow-insecure`. c                  > 0 nT(       a  SUS'   [         R                  R                  [         R                  R	                  U 5      US9n[
        R                  " S[         R                  R                  U[        S95      $ )NgzipAccept-Encodingheadershttp.client.HTTPResponsetimeout)	r.   requestRequestr/   
urlunparseTcasturlopenREQ_TIMEOUT)r8   rB   reqallow_compressions      r9   
do_urlopen"open_wrapdburl.<locals>.do_urlopen]   se    )/G%&nn$$V\\%<%<S%A7$Svv0&..2H2HVa2H2bccr;   z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)r6   )r8   urllib.parse.ParseResultreturnrC   )r:   r5   OSError
isinstancer.   errorURLErrorreasonsslSSLCertVerificationErrorr   warningr2   sys
executable_replace)		urlstringallow_insecurehave_optrN   insecure_msgrO   r8   excpmsgs	      `     r9   open_wrapdburlrg   W   sT   Ud 9
%Cw
	)c?" :3>>:JJfgsftuvv 	3CNN3CCfgnrsZ#,,f,566#  	)0<vQOC$ 5 566:dkkSVSoSo;p;p!LLC5(R!STT'3%~(>??#C((	)$  Z:9+\RVQWXYYZs6   B E 
E"A;D<"D<<E
E$EE$c                    U R                  5       nU R                  S   nUS:X  a  [        R                  " U5      $ U(       a  [	        SU R
                   SU 35      eU$ )NzContent-Encodingr?   z Unexpected Content-Encoding for : )readrB   r?   
decompressr2   r8   )respdataencodings      r9   read_and_decompressro   }   sX    99;D||./H6t$$	>txxj8*UVVr;   c                4    [        SU SS5      n[        U5      $ )Nz.https://wrapdb.mesonbuild.com/v2/releases.jsonT)rg   ro   )rb   r8   s     r9   get_releases_datarq      s     
I>[_ae
fCs##r;   )maxsizec                    [        U 5      n[        R                  " S[        R                  " UR                  5       5      5      $ )NT.Dict[str, T.Any])rq   rI   rJ   jsonloadsdecode)rb   rm   s     r9   get_releasesrx      s-    ^,D66&

4;;=(ABBr;   c                    [        SU SU SU SU S3	USS5      n[        U S5       nUR                  [        U5      5        S S S 5        g ! , (       d  f       g = f)N!https://wrapdb.mesonbuild.com/v2/_-/.wrapTwb)rg   openwritero   )wrapfilenamenew_versionnew_revisionrb   r8   fs          r9   update_wrap_filer      sb    
<TF!K=PQR^Q__`ae`ffkl't5C	h		#C() 
		s   A
Ac                   [         R                  R                  U 5      nUR                  S:w  a  [	        SU  S35      eUR
                  R                  S5      R                  S5      nUS   S:X  a
  US   US   4$ US   S	:X  a0  US   nUR                  S
S5      u  pEUR                  SS5      u  pVXV4$ [	        SU  35      e)Nr   zURL z$ does not seems to be a wrapdb patchr}   r   v1v2r{   r   r|   zInvalid wrapdb URL )	r.   r/   r0   netlocr2   pathstripsplitrsplit)	patch_urluarrtagr{   versionrevisions          r9   parse_patch_urlr      s    i(Axx**d9+-QRSS
&&,,s

!
!#
&C
1v~2wB	Q4"gZZQ'
#NN32  1)=>>r;   c                      \ rS rSrSrg)r2       N__name__
__module____qualname____firstlineno____static_attributes__r   r;   r9   r2   r2          r;   r2   c                      \ rS rSrSrg)WrapNotFoundException   r   Nr   r   r;   r9   r   r      r   r;   r   c                      \ rS rSrSSS jjr\SS j5       r\SS j5       r\\" S5      4SS jj5       r	\SS j5       r
SS	 jrSS
 jr\SS j5       rSS jrSrg)PackageDefinition   Nc                X   Xl         X l        X0l        U=(       d    0 U l        0 U l        / U l        / U l        S U l        S U l        SU l	        [        R                  R                  U R                  S5      U l        U R                  R                  SU R                   5      U l        [        R                  R!                  U R                  5      (       a  [#        S5      eSU R                  ;   a  U R                  S   R%                  S5       Hr  n['        UR)                  5       5      nUR+                  5       (       a  [#        S5      eSUR,                  ;   a  [#        S	5      eU R                  R/                  U5        Mt     S U R                  U R                   R1                  5       '   g )
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 "..")r   subprojects_dirtypevaluesprovided_depsprovided_programsr   wrapfile_hashoriginal_filename
redirectedosr   joinfilesdirgetr   dirnamer2   r   r	   r   is_absolutepartsappendlower)selfr   r   type_r   sr   s          r9   __init__PackageDefinition.__init__   s?   	.	l;=.0(*.226 %T%9%9>Jdii@77??4>>** MNN4;;&[[.44S9AGGI##%%'(MNN4::%'(NOO&&t, : 15499??,-r;   c                    [        XX#5      $ N)r   )r   r   r   r   s       r9   from_valuesPackageDefinition.from_values   s     FFr;   c                    [         R                  R                  U 5      n[         R                  R                  U 5      n[	        X5      $ r   )r   r   basenamer   r   )filenamer   r   s      r9   from_directory PackageDefinition.from_directory   s3    ww)''//(3 77r;   r=   c                   [         R                  U 5      u  p#nSU;   a  [        SS5      R                  U5        SU;   a  [        SS5      R                  U5        S H8  nU S3U;   d  M  U S	3U;  d  M  [        S
U S	3S5      R                  U5        M:     [        R
                  R                  U 5      nUS:X  a  [        US   5      n[        UR                  5       H2  u  pUS-  S:X  a  U	S:X  a  [        S5      eM!  U	S:w  d  M)  [        S5      e   UR                  S:w  a  [        S5      e[        Xg5      nUR                  5       (       d  [        SU S35      e[         R                  [        U5      U5      n
X
l        SU
l        U
$ [        R
                  R#                  U 5      S S n[         R%                  XX45      n
X
l        U
R'                  U5        UR)                  S5      nU(       aj  UR+                  S5      (       aT  US:X  a  [,        R.                  " S5        O7US:X  a  [,        R.                  " S5        O[,        R.                  " SU S 35        [1        U S!S"S#9 n[2        R4                  " UR7                  5       R9                  S"5      5      R;                  5       U
l        S S S 5        U
$ ! , (       d  f       U
$ = f)$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.wrapr~   z+wrap-redirect filename must be a .wrap filezwrap-redirect z filename does not existTr   z https://wrapdb.mesonbuild.com/v1sqlitezRsqlite wrap has been renamed to sqlite3, update using `meson wrap install sqlite3`libjpegz_libjpeg wrap has been renamed to libjpeg-turbo, update using `meson wrap install libjpeg-turbo`z:WrapDB v1 is deprecated, updated using `meson wrap update `rutf-8rn   )r   _parse_wrapr   user   r   r   r	   	enumerater   r2   suffixis_filefrom_wrap_filestrr   r   r   r   parse_provide_sectionr   
startswithr   deprecationr   hashlibsha256rj   encode	hexdigestr   )r   
subprojectconfigr   r   whatr   fnameipwrapr   r   r    s                 r9   r    PackageDefinition.from_wrap_file   s    1 = =h Gv6!3X>BB:N&8(CGG
S'Dy!V+4&V0K<TF$GRVVWab ( ''//(3J 
+,E!%++.q5A:Dy+,XYY ! M)+,qrr / ||w&#$QRR0E==??#nUG;S$TUU$33CJ
KD%-""DOKww)#2. ,,TER!)""6*JJ{+	--.PQQx  !uv"    "C  D  #]^b]ccd!ef(C'2d!(		0B0B70K!L!V!V!XD 3  32 s   +AJ<<
Kc                    [         R                  " S S9nUR                  U SS9  [        UR                  5       5      S:  a  [	        SU  35      eUR                  5       S   nUR                  S	5      (       d  [	        U< S
U  35      eUSS  nU[        ;  a  [	        SU< 35      e[        X   5      nXU4$ ! [         R                   a  n[	        SU  SU< 35      eS nAff = f)N)interpolationr   r   zFailed to parse ri   r   zMissing sections in r   zwrap-z! is not a valid first section in    Unknown wrap type )
configparserConfigParserrj   Errorr2   lensectionsr   	ALL_TYPESdict)r   r   ewrap_sectionr   r   s         r9   r   PackageDefinition._parse_wrap  s    	F!..TBFKK7K3 v !A%"6xj ABB(+&&w//<"22ST\S] ^__QR 	!"4UI >??f*+f$$ !! 	F"28*Bqe DEE	Fs   $B: :C%C  C%c                ~   UR                  S5      (       a  [        S5      eUR                  S5      (       a  US   R                  5        H  u  p#US:X  aZ  UR                  S5       Vs0 s H!  oDR	                  5       R                  5       S _M#     nnU R                  R                  U5        Me  US:X  aE  UR                  S5       Vs/ s H  oDR	                  5       PM     nnU =R                  U-  sl        M  U(       d  SU< SU R                   S	3n[        U5      eX0R                  U'   M     g g s  snf s  snf )
Nprovidesz:Unexpected "[provides]" section, did you mean "[provide]"?providedependency_namesr   program_namesz#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_sectionr2   itemsr   r   r   r   updater   r   )r   r   kvn
names_dict
names_listms           r9   r   'PackageDefinition.parse_provide_section  s%   j)) \]]i((y)//1** DE773<!P<a'')//"3T"9<J!P&&--j9'56WWS\!B\'')\J!B**j8*>qe4		{ SR RA (**()""1%% 2 ) "Q
 "Cs   )(D5	D:c                x     U R                   U   $ ! [         a    [        SU< SU R                   S35      ef = f)NzMissing key r  r~   )r   KeyErrorr2   r   )r   keys     r9   r   PackageDefinition.get2  sF    	L;;s## 	L,sgT$))E JKK	Ls    (9c                B    [         R                  R                  U S5      $ )Nz.meson-subproject-wrap-hash.txt)r   r   r   )subproject_directorys    r9   get_hashfilePackageDefinition.get_hashfile8  s    ww||02STTr;   c                    U R                   (       aB  [        U R                  U5      SSS9 nUR                  U R                   S-   5        S S S 5        g g ! , (       d  f       g = f)Nwr   r   
)r   r   r  r   )r   r  r    s      r9   update_hash_cache#PackageDefinition.update_hash_cache<  sR    d''(<=sWUY]

4--45 VU UUs   A
A#)r   r   r   r   r   r   r   r   r   r   r   r   )NN)r   r   r   r   r   T.Optional[str]r   zT.Optional[T.Dict[str, str]])
r   r   r   r   r   r   r   zT.Dict[str, str]rU   r   )r   r   rU   r   )r   r   r   r   rU   r   )r   r   rU   z9T.Tuple[configparser.ConfigParser, str, T.Dict[str, str]])r   zconfigparser.ConfigParserrU   None)r  r   rU   r   )r  r   rU   r   )r  r   rU   r  )r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r  r  r   r   r;   r9   r   r      s    54 G G 8 8
 ?I"~ 3 3j % %"*0L U U6r;   r   c                    [         R                  R                  XS-   5      n[         R                  R                  U5      (       a!  [        R                  U5      nUR                  $ U$ )Nr~   )r   r   r   isfiler   r   r   )subdir_rootpackagenamer   r   s       r9   get_directoryr#  A  sL    GGLLG&;<E	ww~~e //6~~r;   c                     [         R                  " XUS9$ ! [         R                   a  n[        [	        U5      5      eSnAff = f)zI
Wrapper to convert GitException to WrapException caught in interpreter.
checkN)r   verbose_gitGitExceptionr2   r   )cmd
workingdirr&  r   s       r9   r'  r'  H  s?    $##C5AA   $CF##$s    A?A)eqc                     \ rS rSr% S\S'   S\S'   \" S5      rS\S'   \R                  r	S\S	'   S
r
S\S'   S
rS\S'   S
rS\S'   S0S jrS0S jrS0S jrS1S jrS0S jrS2S jrS3S jrS4S jrS5S jrS6S jrS7S jrS8S9S jjrS8S9S jjrS0S jrS:S jrS;S jrS;S  jrS0S! jrS<S" jrS0S# jr S0S$ jr!S=S% jr"S>S& jr#S?S' jr$S@SAS( jjr%S>S) jr&SBSCS* jjr'SDS+ jr(S;S, jr)S0S- jr*SES. jr+S/r,g)FResolveriQ  r   
source_dirsubdirr=   r   r   r   	wrap_modeFboolwrap_frontendrb   r*   c                    [         R                  R                  U R                  U R                  5      U l        [         R                  R                  S5      =(       d*    [         R                  R                  U R
                  S5      U l        0 U l	        S U l
        0 U l        0 U l        0 U l        0 U l        0 U l        [!        5       U l        U R%                  5         U R'                  5         U R)                  5         g )NMESON_PACKAGE_CACHE_DIRpackagecache)r   r   r   r.  r/  r!  environr   cachedirwrapsr   r   r   wrapdbwrapdb_provided_depswrapdb_provided_programssetloaded_dirs
load_wraps
load_netrcload_wrapdb)r   s    r9   __post_init__Resolver.__post_init__[  s    77<<E

'@AsRWW\\RVRbRbdrEs57
(,
=?AC*,68!:<%'*ur;   c                     [        5       U l         g ! [         a     g [         a#  n[        R                  " SU S3SS9   S nAg S nAff = f)Nzfailed to process netrc file: rQ   Ffatal)r   FileNotFoundError	Exceptionr   r]   )r   r   s     r9   r?  Resolver.load_netrcj  sF    	MDJ  	 	MLL9!A>eL	Ms    
A
	A
AA
c                   [         R                  R                  U R                  5      n[         R                  R	                  [         R                  R                  US5      5      (       a@  SSKJn  UR                  XR                  5       H  nX0R                  UR                  '   M     [         R                  R                  U R                  5      (       GaT  [        [         R                  " U R                  5      5      u  pEnU H|  nUR                  S5      (       d  M  [         R                  R                  U R                  U5      n[        R!                  XR"                  5      nX0R                  UR                  '   M~     SS1n	U R                  R%                  5        H  nXR&                  UR                  1-  n	M     U Ha  nXy;   a  M
  [         R                  R                  U R                  U5      n[        R)                  U5      nX0R                  UR                  '   Mc     U R                  R%                  5        H  nU R+                  U5        M     U R,                  R/                  U R0                  5        g )Nz
Cargo.lockr   )r   r~   r5  r   )r   r   r   r!  existsr   r=   r   r>  r8  r   isdirnextwalkr3   r   r   r   r   r   r   add_wrapr=  addr/  )
r   r.  r   r   rootdirsfilesr   r   ignore_dirss
             r9   r>  Resolver.load_wrapsr  s   WW__T%5%56
77>>"'',,z<@AA ((5E5EF(,

499% G 77==))** $RWWT-=-=%> ?Dzz'**T%5%5q9(77O(,

499%  *>:K

))+		:: ,#T%5%5q9(77>(,

499%  JJ%%'DMM$ (T[[)r;   c                   UR                   R                  5        HZ  nX R                   ;   a:  U R                   U   nSU< SUR                   SUR                   3n[        U5      eXR                   U'   M\     UR                   HZ  nX R                  ;   a:  U R                  U   nSU< SUR                   SUR                   3n[        U5      eXR                  U'   M\     g )NzMultiple wrap files provide z dependency: z and z
 program: )r   keysr   r2   r   )r   r   r  	prev_wrapr  s        r9   rN  Resolver.add_wrap  s    ##((*A&&& ..q1	21%}TYYKuU^UcUcTde#A&&$(q! + ''A*** 2215	21%z$))ER[R`R`Qab#A&&(,""1% (r;   c                "    [        U R                  S5      R                  SSS9 n[        R                  " U5      U l        S S S 5        U R
                  R                  5        H}  u  p#U R                  R                  UR                  S/ 5       Vs0 s H  oDU_M     sn5        U R                  R                  UR                  S/ 5       Vs0 s H  oDU_M     sn5        M     g ! , (       d  f       N= f! [         a     g f = fs  snf s  snf )Nzwrapdb.jsonr   r   r   r  r  )r	   r!  r   ru   loadr9  rF  r  r:  r  r   r;  )r   r   r   infor   s        r9   r@  Resolver.load_wrapdb  s    	d&&6;;C';RVW"iil S ++++-JD%%,,txxHZ\^?_-`?_!g?_-`a))00488O]_C`1aC`aT'C`1ab .	 SR  		 .a1as:   $C7 C&C7 D
D
&
C40C7 4C7 7
DDc                Z   U R                   R                  U5      nU(       d  g U R                  5         US   S   nUR                  SS5      u  pE[	        SU SU SU SU S3	S	S
9n[        U R                  U S35      nUR                  S5       nUR                  [        U5      5        S S S 5        [        R                  " SU SU SU 35        [        R                  [        U5      5      n	XR                  U	R                   '   U R#                  U	5        U	$ ! , (       d  f       Nv= f)Nversionsr   r|   r   rz   r{   r}   r~   T)rN   r   z
Installed z	 version z
 revision )r9  r   check_can_downloadr   rg   r	   r!  r   r   ro   r   logr   r   r   r8  r   rN  )
r   	subp_namer[  latest_versionr   r   r8   r   r   r   s
             r9   get_from_wrapdbResolver.get_from_wrapdb  s   {{y)!j)!,*11#q9@1WIUVW_V``abkallqr  GK  LT%%)E':;ZZGG',- :i[	'*XJOP //E
; $

499d s   D
D*c                   UR                   R                  5        H  u  p#U R                   R                  UR                  5      nU(       aH  UR                  c;  UR                  b.  U R                   UR                  	 U R
                  UR                  	 X R                   ;  d  M  X0R                   U'   U R                  U5        M     g r   )r8  r  r   r   r   r   rN  )r   other_resolverr  r	  rW  s        r9   _merge_wrapsResolver._merge_wraps  s    "((..0DA

q{{3IY^^38J JJq{{+&&q{{3

" !

1a  1r;   c           	     >   U R                   [        R                  :w  a  XR                  ;  ao  [	        U R
                  XU R                   U R                  U R                  U R                  5      nU R                  U5        U R                  R                  U5        g g g r   )r0  r   	nopromoter=  r-  r.  r2  rb   r*   rg  rO  )r   r/  r   rf  s       r9   load_and_mergeResolver.load_and_merge  s    >>X///FBRBR4R%doov4>>[_[m[mos  pC  pC  EI  EP  EP  QNn-  ( 5S/r;   c                    UR                  5       nU R                  R                  U5      nU(       a)  UR                  R                  U5      nUR                  U4$ U R                  R                  U5      nUS 4$ r   )r   r   r   r   r:  )r   r"  r   dep_var	wrap_names        r9   find_dep_providerResolver.find_dep_provider  sp     "'')!!%%k2((,,[9G99g%%--11+>	$r;   c                    U R                   R                  U5      nU(       a  UR                  R                  U5      $ S $ r   )r8  r   r   )r   ra  depnamer   s       r9   get_varnameResolver.get_varname  s2    zz~~i(26t!!%%g.@D@r;   c                    U HY  nU R                   R                  U5      nU(       a  UR                  s  $ U R                  R                  U5      nU(       d  MW  Us  $    g r   )r   r   r   r;  )r   namesr   r   ro  s        r9   find_program_providerResolver.find_program_provider  sU    D))--d3Dyy 5599$?Iy    r;   Nc                8  ^ ^^ T R                   R                  U5      nUc#  T R                  U5      nUc  [        SU S35      eUT l        T R                  R
                  T l        [        R                  R                  T R                  R                  T R                  R
                  5      T l
        [        R                  R                  T R                  5      (       d9  [        R                  R                  T R                  T R
                  5      T l
        [        R                  R                  T R                  T R                  5      nT R                  R                  (       Gap  [        R                  R!                  T R                  R                  5      n[        R                  R                  T R                  U5      nT R                  R                  U:w  a  [        R                  R                  T R                  R                  T R                  5      n["        R$                  " S["        R&                  " U5      5        [)        USSS9 nUR+                  [,        R.                  " S[1        [        R                  R                  T R                  R                  T R                  5      5      R3                  5        S35      5        S S S 5        S	S
SS.m[4        R6                  " ST R                  R8                  R                  SU5      5      mT(       a7  TT;  a1  SR                  TR;                  5       5      n	[=        ST< SU	 35      eU(       a  TU:w  a  [=        ST< SU 35      eT=(       d    SmSUUU 4S jjn
U
" 5       (       a  T R?                  5         UT4$ T RA                  5         [        R                  R                  T R                  5      (       a;  [        R                  RC                  T R                  5      (       d  [=        S5      eGOx[        R                  R                  T RD                  T R
                  5      n[        R                  RC                  U5      (       a  T RG                  UT R                  5        OT R                  RH                  S:X  a  T RK                  U5        OT RM                  5         T R                  RH                  S:X  a  T RO                  U5        OyT R                  RH                  S:X  a  T RQ                  5         ONT R                  RH                  S:X  a  T RS                  5         O#[=        ST R                  RH                  < 35      e T RU                  U5        T RW                  5         U
" 5       (       d  [=        STT    S35      eT R                  R]                  T R                  5        UT4$ ! , (       d  f       GN= f! [X         a    [[        T R                  5        e f = f)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   T.Optional[Method]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   c                    > [         R                  R                  [         R                  R                  TR                  TT    5      5      $ r   )r   r   rJ  r   r   )r}  methods_mapr   s   r9   has_buildfile(Resolver._resolve.<locals>.has_buildfile  s.    77>>"'',,t||[=P"QRRr;   z*Path already exists but is not a directoryr    r!   r"   r#   r   zSubproject exists but has no z file.rU   r1  )/r8  r   rc  r   r   r   r   r   r   r   r   rJ  r!  relpathr.  r   r   r   r`  boldr   r   textwrapdedentr
   as_posixrI   rJ   r   rV  r2   validateresolve_git_submodulerK  r7  	copy_treer   	_get_filer_  _get_git_get_hg_get_svnapply_patchapply_diff_filesrG  r   r  )r   r"  force_methodr   rel_pathr   
main_fnamerelr   allowed_methodsr  cached_directoryr}  r  s   `           @@r9   _resolveResolver._resolve  sf   zz~~k*<''4D|+.ST_S``u,vww	,,ww||DII$=$=tyy?R?RSww~~dll++77<<(8(8$..IDL77??4<<A99&&& ww''		(C(CDHd&6&6AJyy**j8ggoodii&A&A4??S$))C.1 *cG<GGHOO 1$$,RWW__TYY=X=XZ^ZjZj-k$l$u$u$w#x y-   = #%!,
 ,dii.>.>.B.B8\.Z[fK/"ii(8(8(:;O,vj8[\k[l mnnFl2/&;cdpcq rss"7	S 	S ??MMOV## 	""$77>>$,,''77==..#$PQQ /  "ww||DMM4>>Jww}}-../>6){+'')99>>U*MM+.YY^^t+LLNYY^^u,MMO'*<TYY^^<N(OPP  -%%'
 "?F@S?TTZ [\\
 			##DLL1S =<|  $T\\2s   A=W&>!W8 &
W58!Xc                     [        U R                  S[        R                  S5         U R	                  X5      sS S S 5        $ ! , (       d  f       g = f! [
         a    [        S5      ef = f)Nz	.wraplockz$Failed to lock subprojects directoryzFAttempted to resolve subproject without subprojects directory present.)r   r!  r   WAITr  rF  r   )r   r"  r  s      r9   resolveResolver.resolveK  sf    	rt//277EG }}[?G G G ! 	r'(pqq	rs'   &A A	A 
AA A A*c                X    U R                   [        R                  L a  Sn[        U5      eg )Nz7Automatic wrap-based subproject downloading is disabled)r0  r   
nodownloadr2   )r   r  s     r9   r_  Resolver.check_can_downloadT  s+     >>X000IA"" 1r;   c                   [         (       d  g[        R                  R                  U R                  5      (       d  g[        S/[        U R                  5      R                  5      u  pU(       d  g[        / SQU R                  5      u  pU(       d  gUR                  S5      (       a  [        R                  " S5        gUR                  S5      (       a  [        S5      eUR                  S	5      (       a)  [        / S
QU R                  5      (       a  g[        S5      eUR                  S5      (       a1  [        / SQU R                  5        [        SS/U R                  5        gUS:X  a  g[        SU< 35      e)NFz	rev-parse)	submodulestatusrQ   +z"git submodule might be out of dateTUz!git submodule has merge conflictsr|   )r  r  --initrQ   zgit submodule failed to init )r  r  rQ   checkoutrQ   r=   zUnknown git submodule output: )r   r   r   rK  r   r   r	   parentr   r   r]   r2   r'  )r   retouts      r9   r  Resolver.resolve_git_submodule[  s#    s ww}}T\\**k]D,>,E,EF94<<H>>#LL=>^^C   CDD^^C  A4<<PP >??^^C  4dllCS)4<<8 BY<SGDEEr;   c                N   U R                  SU5      nU R                  nSU R                  R                  ;   a,  [        R
                  " U R                  5        U R                  n [        R                  " X#5        g ! [         a  n[        S[        U5       35      UeS nAff = f)Nr   lead_directory_missingz%failed to unpack archive with error: )_get_file_internalr!  r   r   r   mkdirr   shutilunpack_archiverV   r2   r   )r   r"  r   extract_dirr   s        r9   r  Resolver._get_file  s    &&x=&& $tyy'7'77HHT\\",,K	Y!!$4 	Y"GAx PQWXX	Ys   &A= =
B$BB$c                   [         (       d  [        SU S35      eU R                  R                  S5      nSSSUS/nSn/ nU R                  R                  R                  S	S
5      S
:w  a)  SnSU R                  R                  R                  S	5      /nU(       a  U R                  U5      (       a  [        SSSU R                  /U R                  SS9  [        SSSU R                  R                  S5      /U R                  SS9  U R                  R                  S5      n[        S/UQSPUPU R                  SS9  [        X0R                  SS9  GOU(       d  [        SU R                  R                  S5      U R                  /U R                  SS9  UR                  5       S:w  a_  [        X0R                  5      (       dE  [        SU R                  R                  S5      U/U R                  SS9  [        X0R                  SS9  O_SSS/UQnUR                  5       S:w  a  USU/-  nX`R                  R                  S5      U R                  /-  n[        X`R                  SS9  U R                  R                  R                  SS
5      R                  5       S:X  a  [        SSSSS/UQU R                  SS9  U R                  R                  R                  S5      nU(       a  [        SS S!SU/U R                  SS9  g g )"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%  remoterO  originr8   fetchcloneheadz--branchzclone-recursivetruer  r  r  z
--checkoutz--recursivezpush-urlzset-urlz--push)r   r2   r   r   r   is_git_full_commit_idr'  r   r!  r   r   )r   r"  revnocheckout_cmd
is_shallowdepth_optionargspush_urls           r9   r  Resolver._get_git  s   s"I+Vd eff		j)9:udS
$&99,2J%tyy'7'7';';G'DEL$44U;; FPTP^P^_aeaqaqy}~5(DIIMM%4HI4<<_cdIIMM*-EA<AA5A4<<W[\ll$?WdiimmE&:DNNKTM]M]eij;;=F*&|\\BB#WdiimmE.BE$JDLL`de#L,,dK97R\R;;=F*Z//Du-t~~>>D"2"2$?99 126<<>&Hh,eXdeD299##''
39h(KT\\aef r;   c                   U R                   R                  (       d  g U R                   R                  U R                  5      n[        R
                  R                  U5      (       a3  [        USSS9 nUR                  5       R                  5       nS S S 5        Og WU R                   R                  :w  a/  [        R                  " SU R                   R                   S35        g g ! , (       d  f       NX= f)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   r   rj   r   r   r]   r   )r   hashfiler    expected_hashs       r9   r  Resolver.validate  s    yy&& 99))$,,777>>(##hg6$ $		 1 1 3 76  DII333LL;tyy~~&6  7O  P  Q 4 76s   1C$$
C2c                L    Sn[        U5      S;   a  [        S U 5       5      nU$ )NF>   (   @   c              3  *   #    U  H	  oS ;   v   M     g7f)0123456789AaBbCcDdEeFfNr   ).0chs     r9   	<genexpr>1Resolver.is_git_full_commit_id.<locals>.<genexpr>  s     H%B77%s   )r   all)r   r  results      r9   r  Resolver.is_git_full_commit_id  s(    u:!H%HHFr;   c                   U R                   R                  S5      n[        R                  " S5      nU(       d  [	        S5      e[
        R                  " USU R                   R                  S5      U R                  /U R                  S9  UR                  5       S:w  a#  [
        R                  " USU/U R                  S9  g g )	Nr   r"   zMercurial program not found.r  r8   cwdtipr  )r   r   r  whichr2   
subprocess
check_callr   r!  r   r   )r   r  r"   s      r9   r  Resolver._get_hg  s    		j)\\$ >??r7DIIMM%,@#~~/484D4D	F;;=E!!!2z5"9&*ll4 "r;   c           	        U R                   R                  S5      n[        R                  " S5      nU(       d  [	        S5      e[
        R                  " USSXR                   R                  S5      U R                  /U R                  S9  g )Nr   r#   zSVN program not found.r  z-rr8   r  )	r   r   r  r  r2   r  r  r   r!  )r   r  r#   s      r9   r  Resolver._get_svn  sj    		j)ll5! 899sJeYY]]5=Q#~~/484D4D	Fr;   c                    U R                   b  XR                   R                  ;  a  g U R                   R                  U5      u  p#nU(       a  UnX$4$ r   )r   hostsauthenticators)r   r   loginaccountpasswords        r9   get_netrc_credentialsResolver.get_netrc_credentials  sG    ::zz/?/?!?#'::#<#<V#D Er;   c           	        Sn[         R                  " 5       n[        R                  " SU R                  SS9n[
        R                  R                  U5      nUR                  (       aD  UR                  R                  [        5      (       a   [        XR                  U R                  S9nGO[        U;   a  [        U S35      eUR                  S:X  Ga  [         R"                  " S5      nUc  [        S5      e[        R$                  " 5        n[        R                  " SU R                  SS9 n/ n	UR&                  (       a  U	S	UR&                   /-  n	UR(                  (       a  UR(                   S
3OSn
USS/U	QU
 UR                   SUR*                  SS   3Pn[,        R.                  " XSS9  [0        R*                  R3                  U[0        R*                  R5                  UR*                  5      5      nUR7                  5         [         R8                  " XR:                  5        U R=                  UR:                  5      UR:                  4sS S S 5        sS S S 5        $ S[>        R@                   3SSS.nU RC                  URD                  5      nUb  S
URD                  ;  a  Uu  nnUR                  S:X  aC  [G        U SU 3RI                  5       5      RK                  5       nURM                  SSU 305        OdUR                  S:X  a?  [
        R                  RO                  URQ                  U SU S
URD                   3S95      nO[R        RT                  " SSS9   [
        RV                  RY                  XS9n[
        RV                  R[                  U[\        S9n[d        Rf                  " W5       od n [i        URk                  5       S    5      nUcx  [o        S!5         URq                  U5      nUS":X  a  O$URM                  U5        URs                  U5        M<  URu                  5       nUUR:                  4sS S S 5        sS S S 5        $ [v        Rx                  R{                  5         [}        S#US$U R~                  =(       d    S S%9n URq                  U5      nUS":X  a  O>URM                  U5        URs                  U5        URM                  [        U5      5        MV  UR7                  5         URu                  5       nS S S 5        S S S 5        WUR:                  4$ ! , (       d  f       O= f S S S 5        GM  ! , (       d  f       GN= f! [^         a3  n[R        R`                  " [c        U5      5        [        SU S35      eS nAff = f! [l         a    S n GNf = f! , (       d  f       N= f! , (       d  f       N= f)&Ni (  r   F)modedirdelete)rb   rc   z" may be a WrapDB-impersonating URLsftpz8Scheme sftp is not available. Install sftp to enable it.z-P@r=   z-ozKbdInteractiveAuthentication=no:r   T)r  r&  zmesonbuild/*)z
User-AgentzAccept-Languager@   r-   AuthorizationzBasic ftp)r   zNMeson is not going to use netrc credentials for protocols other than https/ftprD  rA   rD   zcould not get z; is the internet available?zContent-Lengthz!Downloading file of unknown size.r;   downloadDownloading)bar_typetotaldescdisable)Ar   r   tempfileNamedTemporaryFiler7  r.   r/   r0   r1   r3   r4   rg   rb   r2  r2   r6   r  r  TemporaryDirectoryportusernamer   r  runr   r   r   closemover   	hash_filer   r   r  r   r   r   rw   r  rH   r`   r   r]   rF   rG   rK   rL   rV   r`  r   
contextlibclosingintr[  	TypeErrorprintrj   r   r   r^   stdoutflushr   r*   r   )r   ra   	blocksizehtmpfiler8   rl   r  workdirr  usercommand
downloadedrB   credsr  r  	enc_credsrM   r   dlsizeblock	hashvalueprogress_bars                           r9   get_dataResolver.get_data  s   	NN--4T]]SXYll##I.<<CLL112EFF!)<O<OZ^ZlZlmD I-9+-O PQQZZ6!<<'D|#$^__,,.'//Tt}}UZ[_f88TchhZ11D-0\\#,,q)r'Hx4xTXSYZ]ZfZfYgghiliqiqrsrtiuhvQwxw4@WW\\'2773C3CCHH3MN
J5~~gll3W\\A \[ /. !,H,<,<+=>#&#&G
 ..szz:E S

%:"'x::( )UG1XJ*?*F*F*H I P P RINNOvi[5I#JKZZ5( & 7 7ugUVW_V``abeblblamLn8o pILL!q',.^nn,,Y,H~~--c;-G %w'TYY[)9:; ~9: IIi0E|HHUOMM%(  KKM	 ',,. 07w%% JJ&
&,9040CtFL 		),C<e$##CJ/   I7 07%8 ',,&&C \[[ /...F  ^Q #nYK?[$\]]^   07w%%s   !U/D!T'	U%?U :V:<V)>VA(V)	V:B4V)	V:'
T5	1U
U
V .VVV&"V)%V&&V))
V7	3V::
Wc                    [         R                  " 5       n[        US5       nUR                  UR	                  5       5        S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)Nrb)r   r   r   r  rj   r   )r   r   r  r   s       r9   r  Resolver.hash_file=  sR    NN$HHQVVX {{} {{}s    A
A7c           	         US-   U R                   R                  ;  a  U(       d  g U R                   R                  US-   5      R                  5       nU R	                  U5      nXT:w  a  [        SU SU SU S35      eg )N_hashIncorrect hash for :
  expected
  actual.)r   r   r   r   r  r2   )r   r   r   hash_requiredexpecteddhashs         r9   
check_hashResolver.check_hashC  sy    '>!1!11-99==0668t$"5dV4zV[U\\d eff r;   c                    / SQnU H  n U R                  U5      s  $    U R                  U5      $ ! [         a:  n[        R                  " SU S3SS9  [        R
                  " U5         S nAMi  S nAff = f)N)r   r            zfailed to download with error: z. Trying after a delay...FrD  )r  rG  r   r]   timesleep)r   ra   delaysdr   s        r9   get_data_with_backoffResolver.get_data_with_backoffK  so    !A}}Y//  }}Y''  >qcAZ[chi

1s   1
A5/A00A5c           	        U R                  5         U R                  R                  X(       a  SOS-   5      n[        R                  " S[        R
                  " U5      US[        R
                  " U5      5         U R                  U5      u  pgU R                  R                  US-   5      R                  5       nXh:w  a+  [        R                  " U5        [        SU SU SU S	35      e [        R                  " Xr5        g ! [         ah    U(       d_  US-   U R                  R                  ;   a  U R                  XUS
S9s $ [        R                  " S[        R
                  " US-   5      S5        e f = f)N_fallback_urlr   r  fromr  r  r  r  r  T)fallbackz'A fallback URL could be specified usingzkey in the wrap file)r_  r   r   r   r`  r  r,  r   r   remover2   r   	_downloadrename)	r   r   ofnamer"  r1  srcurlr!  r	  r   s	            r9   r3  Resolver._downloadU  s6   !t(OP		+ 6fdiiPVFWX	!77?NEyy}}TG^4::<H 		'"#&9$tH:\Z_Y``h$ijj ! 			'"  	/)TYY-=-==>>$d>SSB4/#9:<RT	s   :A/D ?E31E3c                   U R                   R                  US-   5      nUS-   U R                   R                  ;   a  [        R                  R                  U R                  U5      n[        R                  R                  U5      (       a@  U R                  X5        [        R                  " S[        R                  " U5      US5        U$ [        R                  " U R                  SS9  U R                  XU5        U$ [        U R                   R                  5      U-  nUR                  5       (       d  [!        SU S35      eU R                  XR#                  5       S	S
9  UR#                  5       $ )Nr   r   r{  zfrom cache.T)exist_okzFile "" does not existF)r  )r   r   r   r   r   r   r7  rJ  r"  r   r`  r  makedirsr3  r	   r   r2   r  )r   r   r"  r   
cache_pathr   s         r9   r  Resolver._get_file_internalh  s   99==!34&=DII,,,dmmX>Jww~~j))1$))K"8$N!!KK5NN4[9		**+h6D;;==#fTF2B$CDDOOD--/OG==?"r;   c                   SU R                   R                  ;   a@  SU R                   R                  ;   a&  SU R                   R                  < S3n[        U5      eSU R                   R                  ;   a4  U R	                  SU5      n [
        R                  " X0R                  5        g SU R                   R                  ;   a  U R                   R                  S   n[        R                  R                  U R                   R                  U5      n[        R                  R!                  U5      (       d  [        SU 35      eU R                  X`R"                  5        g g ! [         ad    [        R                  " 5        n[
        R                  " X45        U R                  X@R                  5        S S S 5         g ! , (       d  f        g = ff = f)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   r   r2   r  r  r  r!  rG  r  r  r  r   r   r   r   rK  r   )r   r"  r  r   r
  	patch_dirsrc_dirs          r9   r  Resolver.apply_patch~  sV   tyy///4EIYIY4YTYY^^..hiA""tyy///**7K@D>%%d,<,<=
 $))"2"22		(():;Iggll499#5#5yAG77==))#&Fyk$RSSNN7LL1 3	  >002g))$8NN7,<,<= 3222>s*    E G>2F:0G:
G		G	Gc                   U R                   R                   GH[  n[        R                  " SU S35        [	        U R                   R
                  5      U-  nUR                  5       (       d  [        SU S35      e[        R                  R                  [        U5      U R                  5      n[        (       a-  [        SSSS[        [	        U5      R                  5       5      /nO$[        (       a  [        S	S
SSSU/nO[        S5      e[!        X@R                  ["        R$                  S9u  pVnUR&                  S:w  d  GM+  [        R                  " UR)                  5       5        [        SU S35      e   g )NzApplying diff file ""zDiff file "r:  z-lz-fz-p1z-iz--work-treerQ   applyz--ignore-whitespacez5Missing "patch" or "git" commands to apply diff files)r  stderrr   zFailed to apply diff file ")r   r   r   r`  r	   r   rJ  r2   r   r   r  r   r   PATCHr  r   r   r  STDOUT
returncoder   )r   r   r   r  r)  r   r  r{   s           r9   r  Resolver.apply_diff_files  s#   		,,HHH+H:Q78		**+h6D;;==#k$7G$HIIggooc$i>Gu dD%s4=;Q;Q;S7TU
 M39NPUW^_#$[\\"3LLARARSIAA||q %#&A(1$MNN/ -r;   c                   [         R                  " U5       H  u  p4nUR                  XS5      n[         R                  R	                  U5      (       d  [         R
                  " U5        U H  n[         R                  R                  X75      n[         R                  R                  Xg5      n	[         R                  R	                  U	5      (       a   [         R                  " U	5        [        R                  " XSS9  M     M     g! [         a>    [         R                  " U	[        R                  5        [         R                  " U	5         Nef = f)z7
Copy directory tree. Overwrites also read only files.
r   F)follow_symlinksN)r   rM  replacer   rJ  r;  r   r2  PermissionErrorchmodstatS_IWUSRr  copy2)
r   root_src_dirroot_dst_dirrA  r{   rR  dst_dirfile_src_filedst_files
             r9   r  Resolver.copy_tree  s     "$!6Gool!DG77>>'**G$77<<777<<777>>(++,		(+ XF 	 "7 + ,4<<8		(+,s   DAEE)r7  r   r   r=  r   r   r   r!  r   r9  r:  r;  r8  )rU   r  )r   r   rU   r  )ra  r   rU   zT.Optional[PackageDefinition])rf  z
'Resolver'rU   r  )r/  r   r   r   rU   r  )r"  r   rU   z)T.Tuple[T.Optional[str], T.Optional[str]])ra  r   rs  r   rU   r  )rw  r'   rU   r  r   )r"  r   r  r|  rU   zT.Tuple[str, Method]r  )r"  r   rU   r  )r  r   rU   r1  )r   r   rU   zT.Optional[T.Tuple[str, str]])ra   r   rU   T.Tuple[str, str])r   r   rU   r   )T)r   r   r   r   r  r1  rU   r  F)
r   r   r5  r   r"  r   r1  r1  rU   r  )r   r   r"  r   rU   r   )rS  r   rT  r   rU   r  )-r   r   r   r   __annotations__r   r   r   defaultr0  r2  rb   r*   rA  r?  r>  rN  r@  rc  rg  rk  rp  rt  rx  r  r  r_  r  r  r  r  r  r  r  r  r  r  r"  r,  r3  r  r  r  r  r   r   r;   r9   r-  r-  Q  s    OK'^J
+"**Ix*M4 ND FDM*>-c"! )	A` Dr#&FPY%gNQ$	4FO'bg(#&#,2&O4Gr;   r-  )r7   r   rU   rT   )FFF)
ra   r   rb   r1  rc   r1  rN   r1  rU   rC   )rl   rC   rU   bytes)rb   r1  rU   r^  )rb   r1  rU   rt   )r   r   r   r   r   r   r   r   rb   r1  rU   r  )r   r   rU   rZ  )r!  r   r"  r   rU   r   r[  )r)  r'   r*  r   r&  r1  rU   r1  )W
__future__r   r=   r   r   dataclassesr   urllib.requestr.   urllib.errorurllib.parser   r   r  r  rP  r  r^   r   r(  typingrI   r  ru   r?   base64r   r   pathlibr	   r
   	functoolsr   r   r   r   r   r   r   r   r   r   r   r   interpreterbaser   r   TYPE_CHECKINGhttp.clientrS   typing_extensionsr   Methodr[   r5   ImportErrorrL   r4   r   
is_windowsprogramsr%   r&   r(   r\  _patchfoundget_versionr   r   r   get_pathrG  r  r:   rg   ro   rq   rx   r   r   r2   r   r   r#  r'  r-  r   r;   r9   <module>rt     s   #   !    	      
         "      ) ( ??)./F G - 4	**"$NK$
 ^T||~~6--/;;bggoofoo.?@A  "(FOOTELL!E	$ZL$ 4C C*?"	N 		M 	R6 R6h$ ej	G j	G j	G}  Gs   H H&%H&