
    <hU                       S 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JrJrJr  SSKJrJr  SSKJrJrJr  SS	KJrJr  SS
KJrJr  SSKJr  \
R:                  (       a&  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 S jjr(S!S jr)S"S jr*S"S jr+\RX                   " S S5      5       r-\RX                  " SS9 " S S5      5       r. " S S5      r/S#S jr0g)$aA  Interpreter for converting Cargo Toml definitions to Meson AST

There are some notable limits here. We don't even try to convert something with
a build.rs: there's so few limits on what Cargo allows a build.rs (basically
none), and no good way for us to convert them. In that case, an actual meson
port will be required.
    )annotationsN   )builderversioncfg)	load_tomlTomlImplementationMissing)Manifest	CargoLockfixup_meson_varname   )MesonExceptionMachineChoice)coredatamlog)PackageDefinition)raw)mparser)
DependencySystemDependency)Environment)
SubProject)RustCompilerc                b    U R                  U5      (       a  U S [        U5      *  OU nU SU U 3$ )N-)endswithlen)package_nameapisuffixbasenames       }/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/cargo/interpreter.py_dependency_namer#   #   s<    .:.C.CF.K.K|Mc&k\*Q]HZqfX&&    c                    [        U 5       S3$ )N_dep)r   )r   s    r"   _dependency_varnamer'   (   s    !,/055r$   c                     g)N
extra_args r*   r$   r"   _extra_args_varnamer+   ,       r$   c                     g)N
extra_depsr*   r*   r$   r"   _extra_deps_varnamer/   0   r,   r$   c                      \ rS rSr% S\S'   SrS\S'   \R                  " \S9r	S\S	'   \R                  " \S9r
S\S
'   \R                  " S S9rS\S'   Srg)PackageState4   r
   manifestFbool
downloaded)default_factoryz
T.Set[str]featuresrequired_depsc                 6    [         R                  " [        5      $ N)collectionsdefaultdictsetr*   r$   r"   <lambda>PackageState.<lambda>:   s    `k`w`wx{`|r$   zT.Dict[str, T.Set[str]]optional_deps_featuresr*   N)__name__
__module____qualname____firstlineno____annotations__r5   dataclassesfieldr=   r7   r8   r@   __static_attributes__r*   r$   r"   r1   r1   4   sT    J&,,SAHjA + 1 1# FM:F6A6G6GX|6}3}r$   r1   T)frozenc                  *    \ rS rSr% S\S'   S\S'   Srg)
PackageKey=   strr   r   r*   N)rA   rB   rC   rD   rE   rH   r*   r$   r"   rK   rK   =   s    	Hr$   rK   c                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jr\SS j5       rSS jrSS jrSS jrS S jrS!S jrS"S jrSrg)#InterpreterC   c                    Xl         [        R                  " SU R                   R                  R                  [
        R                     S   5      U l        0 U l        0 U l	        U R                  5       U l        g )Nr   rust)environmentTcastr   	compilersr   HOST
host_rustc	manifestspackages	_get_cfgscfgs)selfenvs     r"   __init__Interpreter.__init__D   sZ    &&1A1A1J1J1T1TUbUgUg1hio1pq02:<NN$	r$   c                    U R                    Vs/ s H#  n[        R                  R                  US5      PM%     sn$ s  snf )N
Cargo.toml)rY   ospathjoin)r]   subdirs     r"   get_build_def_filesInterpreter.get_build_def_filesN   s-    AEPvV\2PPPs   *<c                   U R                  U5      nU R                  UR                  R                  UR                  R                  5      u  p4U(       d  U R                  US5        [        R                  R                  U R                  R                  US5      n[        R                  " U5      nU R                  X65      nUUR                  UR                  SUR!                  S5      /5      S5      UR                  SUR!                  S5      UR#                  UR$                   Vs/ s H  oR!                  U5      PM     sn5      /5      /-  nXpR'                  X65      -  nXpR)                  U5      -  nUR*                  R,                  (       aH  UR*                  R,                  R.                   H$  n	UR1                  U R3                  X6U	5      5        M&     UR5                  U5      $ s  snf )Ndefaultrb   importrR   messagezEnabled features:)_load_manifest_fetch_packagepackagenamer   _enable_featurerc   rd   re   rS   
source_dirr   Builder_create_projectassignfunctionstringarrayr7   _create_dependencies_create_meson_subdirr3   lib
crate_typeextend_create_libblock)
r]   rf   r3   pkgcachedfilenamebuildastfr|   s
             r"   	interpretInterpreter.interpretQ   s   &&v.))(*:*:*?*?AQAQAUAUV   i0 77<< 0 0 ; ;V\R)""3.LL5<<3G2HI6RNN901cllCl\\!_lCD' 
 	
 	((44((//<<!ll..99


4++C
CD : {{3 Ds   *G-c                   [        X5      nU R                  R                  U5      nU(       a  US4$ [        X5      nU R                  R
                  R                  U5      u  pg[        R                  R                  US5      nU R                  R
                  R                  U[        R                  " SU5      5        U R                  U5      n	XPR                  R
                  R                  ;   =(       a/    U R                  R
                  R                  U   R                  S Ln
[!        X5      nX@R                  U'   U	R"                  R%                  5        HG  u  p[&        R(                  " XR*                  5      (       d  M,  U	R,                  R/                  U5        MI     U	R,                  R%                  5        H)  u  pUR0                  (       a  M  U R3                  XM5        M+     US4$ )NTsubprojectsr   F)rK   rZ   getr#   rS   wrap_resolverresolverc   rd   re   load_and_mergerT   rU   rm   wrapstyper1   targetitemsr   eval_cfgr\   dependenciesupdateoptional_add_dependency)r]   r   r   keyr   meson_depnamerf   _subprojects_dirr3   r5   	conditionr   depnamedeps                  r"   rn   Interpreter._fetch_packagem   s   +mm$9(;$$22::=I	'',,v}=&&55oqvvl\iGjk&&v.--;;AAA Q**00?DDDP 	 80 c'/'<'<'>#I||Iyy11%%,,\: (? %11779LG<<<$$S2 : Ezr$   c                \    U R                   [        UR                  UR                  5         $ r:   )rZ   rK   ro   r   )r]   r   s     r"   _dep_packageInterpreter._dep_package   s     }}ZSWW=>>r$   c                   U R                   R                  U5      nU(       d  [        R                  R	                  U R
                  R                  U5      n[        R                  R	                  US5      n[        U5      nSU;   a=  [        R                  " SU5      n[        R                  " Xc5      nX R                   U'   U$ [        U S35      eU$ )Nrb   ro   zraw.Manifestz+/Cargo.toml does not have [package] section)rY   r   rc   rd   re   rS   rr   r   rT   rU   r
   from_rawr   )r]   rf   	manifest_rd   r   tomlraw_manifests          r"   rm   Interpreter._load_manifest   s    NN&&v.	77<< 0 0 ; ;VDDww||D,7HX&DD  vvnd;$--lA	)2v&  %x/Z%[\\r$   c                   X!R                   ;   a  g UR                  R                  R                  U5      nU(       dt  U[        R
                  " UR                  R                  UR                  R                  5      ;   a  g [        SU SUR                  R                  R                   S35      eUR                   R                  U5        U R                  UR                  UR                  5      u  pEUR                  (       a  U R                  US5        UR                    H  nU R                  XF5        M     UR"                  U    H  nU R                  XF5        M     g )NzDependency z not defined in z	 manifestrj   )r8   r3   r   r   	itertoolschaindev_dependenciesbuild_dependenciesr   ro   rp   addrn   r   default_featuresrq   r7   r@   )r]   r   r   r   dep_pkgr   r   s          r"   r   Interpreter._add_dependency   s   '''ll''++G4)//#,,*G*GIhIhii ;wi7GH\H\HaHaGbbk!lmmg&((cgg>
  )4A  , ++G4A  , 5r$   c                v   X!R                   ;   a  g UR                   R                  U5        X!R                  R                  ;   a  U R	                  X5        UR                  R                   R                  U/ 5       GH9  nSU;   a  UR                  SS5      u  pEUS   S:X  aq  US S nXAR                  ;   a=  UR                  R                  U   nU R                  U5      nU R                  Xu5        Mx  UR                  U   R                  U5        M  U R	                  X5        UR                  R                  R                  U5      nU(       a$  U R                  U5      nU R                  Xu5        M  M  UR                  S5      (       a  U R	                  XSS  5        GM(  U R                  X5        GM<     g )N/r   ?zdep:   )r7   r   r3   r   r   r   splitr8   r   rq   r@   
startswith)r]   r   featurer   r   dep_fr   r   s           r"   rq   Interpreter._enable_feature   sk   ll"!ll///  . &&**7B7Aax!"a2;#%%crlG"3"33!ll77@"&"3"3C"8,,W< 227;??F((6,,3377@C"&"3"3C"8,,W<  f%%$$SAB%0$$S,- 8r$   c                R  ^  T R                   R                  5       R                  5       nT R                  R                  R                  [        R                  S5      n[        U5      nU H%  nUS:X  d  M  UR                  [        U5      5        M'     [        U 4S jU 5       5      $ )NrR   --cfgc              3  F   >#    U  H  nTR                  U5      v   M     g 7fr:   )
_split_cfg).0ir]   s     r"   	<genexpr>(Interpreter._get_cfgs.<locals>.<genexpr>   s     51DOOA&&s   !)rX   get_cfgscopyrS   r   get_external_argsr   rW   iterappendnextdict)r]   r\   	rustflagsrustflags_ir   s   `    r"   r[   Interpreter._get_cfgs   s    '')..0$$--??@R@RTZ[	9oAG|D-.  5555r$   c                    U R                   " SSS9n[        U5      S:  a  US   OSnU(       a  US   S:X  a  USS nUS   U4$ )N=r   )maxsplit r   "r   )r   r   )r   pairvalues      r"   r   Interpreter._split_cfg   sM    yyq)t9q=QbU1X_!BKEAw~r$   c                V   / nUR                  UR                  SUR                  R                  R                   35      5        UR                  UR                  SUR                  R                  R                   35      5        UR
                  (       a   UR                  UR                  S5      5        / nUR                  UR                  UR                  R                  R                  5      UR                  S5      /5        UR                  UR                  R                  R                  5      UR                  S[        R                   35      UR                  U5      S.nUR                  R                  R                  (       a3  UR                  UR                  R                  R                  5      US'   OWUR                  R                  R                  (       a2  UR                  UR                  R                  R                  5      US'   UR                  S	XE5      /$ )
zCreate the project() function call

:param pkg: The package to generate from
:param build: The AST builder
:return: a list nodes
z	rust_std=zbuild.rust_std=zwarning_level=0rR   z>= )r   meson_versiondefault_optionslicenselicense_filesproject)r   rw   r3   ro   editionr5   r}   rp   r   r   stable_versionrx   r   license_filerv   )r]   r   r   r   argskwargss         r"   rt   Interpreter._create_project   s    57u||i8L8L8T8T7U,VWXu||ocll>R>R>Z>Z=[,\]^>>""5<<0A#BC)+LL--223LL 
 	
 ||CLL$8$8$@$@A #\\C0G0G/H*IJ${{?;1
 <<'' %S\\-A-A-I-I JF9\\!!..&+ll3<<3G3G3T3T&UF?#y$788r$   c                   / nUR                    H/  nUR                  R                  U   nX0R                  XR5      -  nM1     UR	                  UR                  UR                  / 5      S5      5        UR                  R                  R                  5        H;  u  pgUR                  UR                  5      (       d  M'  X0R                  XgU5      -  nM=     U$ )Nsystem_deps_args)r8   r3   r   _create_dependencyr   ru   rx   system_dependenciesr   enabledr7   _create_system_dependency)r]   r   r   r   r   r   rp   sys_deps           r"   ry    Interpreter._create_dependencies   s    (*((G,,++G4C**366C ) 	

5<<B1CDE \\==CCEMDs||,,55dUKK F 
r$   c                t   UR                  UR                   Vs/ s H  oCR                  U5      PM     sn5      UR                  UR                  (       + 5      S.n[        U5       S3nS[        U5       3nUR                  UR                  SUR                  UR                  5      /U5      U5      UR                  UR                  SUR                  U5      5      UR                  UR                  UR                  UR                  S5      UR                  U5      /5      S5      /5      5      /$ s  snf )N)r   required_system_depsystem_deps_have_
dependencyfoundr   r   )rx   r   rw   r4   r   r   ru   rv   rp   if_method
identifierr   
plusassign)r]   rp   r   r   skwvarnamer   s           r"   r   %Interpreter._create_system_dependency  s!    {{S=N=N#O=NLLO=N#OP

s||#34
 )./{;!"5d";!<=LL \\#((+,
  IIWe&6&6w&?@%++$$U\\'%:ELL<M$NO*O C
 	
 $Ps   D5c                6   U R                  U5      nSUR                  UR                   Vs/ s H  oBR                  U5      PM     sn5      0nUR	                  UR                  SUR                  [        UR                  UR                  5      5      /U5      [        UR                  5      5      UR	                  UR                  SUR                  SUR                  [        UR                  5      5      UR                  S5      /SUR                  S5      05      UR                  S5      /5      S	5      UR	                  UR                  UR                   Vs/ s H  obR                  U5      PM     sn5      S
5      UR                  S/UR                  S
5      UR                  UR                  UR!                  UR                  S5      UR                  S	5      5      UR                  UR                  SUR                  S5      UR                  [        UR                  UR                  5      5      UR                  S5      UR                  S	5      UR                  S5      UR                  S
5      /5      /5      5      /5      5      /$ s  snf s  snf )Nr   r   r   get_variabler7   default_valuer   ,actual_featuresneeded_featuresr   errorr   z#previously configured with featureszbut need)r   rx   r   rw   ru   rv   r#   ro   r   r'   r   r   r7   foreachr   r   not_in)r]   r   r   r   r   r   r   s          r"   r   Interpreter._create_dependency"  s<   $u{{S=N=N#O=NLLO=N#OP
  LL \\"23;;"HIJ
 $CKK0 LLLL&(()<S[[)IJj12(%,,r*:;	 \\#&'	 "& LLs||%L|!ll1o|%LMO`aMM3%!1!12C!Dekk		%,,u'7'7'<e>N>NO`>abdidodoNN7\2%5ckk377%KL%JK(():;Z0(():;- 	q 	e 	S G ?+
 +	
 $PV &Ms   J
Jc                   UR                  UR                  / 5      [        5       5      UR                  UR                  / 5      [        5       5      UR                  UR	                  SUR                  S5      /5      S5      UR                  UR                  SUR                  S5      UR                  S5      /5      UR                  UR	                  SUR                  S5      /5      /5      5      /$ )Nrk   fsis_dirmesonrf   )
ru   rx   r+   r/   rv   rw   r   r   r   r   )r]   r   s     r"   rz    Interpreter._create_meson_subdir_  s     LLR*=*?@LLR*=*?@LL5<<3E2FGNIIell8U-=-=d-CellSZF[E\]kk5>>(U\\'=R<S#T"UVX	
 	
r$   c                "	   / n0 nUR                    H  nUR                  R                  U   nUR                  UR	                  [        UR                  5      5      5        XgR                  :w  d  M`  U R                  U5      nUR                  R                  R                  n	UR                  U5      XRR                  [        U	5      5      '   M     UR                  R                  R                  5        HS  u  pjU
R                  UR                  5      (       d  M'  UR                  UR	                  [        U5       S35      5        MU     UR	                  S5      UR	                  [!        5       5      UR	                  S5      /nUR                  UR	                  [#        5       5      5        UR                  [        UR                  R                  R                  5      5      UR                  UR                  R                  R$                  5      /nUR'                  U5      UR)                  U5      UR'                  U5      S.nUS;   a  SOSU 3n[+        UR                  R                  R                  UR                  R                  R,                  U5      nUR                  R                  R.                  (       d  US:X  a#  UR1                  S	UR	                  S
5      X5      nOLUS;   a  SnOUS;   a  SnO[3        SU 35      eUS;   a  UR                  S5      US'   UR5                  UX5      n/ nUR                   H,  nUUR                  S5      UR                  SU S35      /-  nM.     UR7                  UR'                  U5      S5      UR7                  US5      UR7                  UR5                  SUR	                  S5      UR)                  UR                  S5      UR                  SR9                  UR                  5      5      05      UR                  UR                  R                  R:                  5      S.S9S5      UR1                  SUR	                  S5      UR                  U5      UR	                  S5      /5      /$ )Nr   features_argsr   )r   rust_dependency_map	rust_args>   r{   rlib
proc-macro-rsr   r  
proc_macrorR   >   r{   r
  	staticlibstatic_library>   dylibcdylibshared_libraryzUnsupported crate type >   r  r  crust_abir   z	feature="r   r{   declare_dependencyr7   r   )	link_with	variablesr   )r   r   override_dependencyr  )r8   r3   r   r   r   r'   ro   r   r{   rp   rw   r   r   r   r   r7   r+   r/   rd   rx   r   r#   r   r  r   r   rv   ru   re   r   )r]   r   r   r|   r   dependency_maprp   r   r   dep_lib_namer   r	  posargsr   depname_suffixr   r{   target_typer  r   s                       r"   r~   Interpreter._create_libq  s   13EG%%D,,++D1C 0 01DS[[1Q RS{{"++C0&//3388RWR^R^_cRd||,?,MNO & !\\==CCEMDs||,,##E$4$48KD8Q7RR]5^$_` F
 _-023/0/
	 	E,,-@-BCD LL,S\\-=-=-B-BCDLL))../-
 "KK5#(::n#=Y/1
 #-0M"MUVWaVbSc"3<<#7#7#<#<cll>R>R>V>VXfg <<&&**D,,|U-=-=f-EwWC99.22.$'>zl%KLL44%*\\#%6z"..g>C24Aell73U\\IaSPQBR5STTM  LL]3_ELLe$LL(%*%5%5e%<%*ZZ!LL4ell388CLLCY6Z1 & $)<<0D0D0L0L#M  	  LL%  )LL)$$U+!
 	
r$   )r\   rS   rX   rY   rZ   N)r^   r   returnNone)r  zT.List[str])rf   rM   r  zmparser.CodeBlockNode)r   rM   r   rM   r  zT.Tuple[PackageState, bool])r   r   r  r1   )rf   rM   r  r
   )r   r1   r   rM   r  r   )r   r1   r   rM   r  r   )r  zT.Dict[str, str])r   rM   r  zT.Tuple[str, str])r   r1   r   builder.Builderr  T.List[mparser.BaseNode])rp   rM   r   r   r   r!  r  r"  )r   r   r   r!  r  r"  )r   r!  r  r"  )r   r1   r   r!  r|   zraw.CRATE_TYPEr  r"  )rA   rB   rC   rD   r_   rg   r   rn   r   rm   r   rq   r[   staticmethodr   rt   ry   r   r   rz   r~   rH   r*   r$   r"   rO   rO   C   sf    %Q 82?-$-B6  9B	
6;
z
$R
r$   rO   c                   / n[         R                  R                  U S5      n[         R                  R                  U5      (       Gay   [	        U5      n[        R                  " SU5      n[        R                  " U5      nUR                   GH/  n[        UR                  [         R"                  " UR                   5      5      n	UR$                  c  MG  UR$                  S:X  a  UR&                  n
U
c7  UR(                  SUR                   S	UR                    S
UR$                   S3   n
SUR                   SUR                    S3nUR                   SUR                    3nUR+                  [,        R.                  " XSUUU S3U
SS.5      5        GM  UR$                  R1                  S5      (       a  [2        R4                  R7                  UR$                  SS 5      n[2        R4                  R9                  UR:                  5      nSU;   a  US   S   OSnUR<                  =(       d    Un[2        R4                  R?                  URA                  SSSS95      nUR+                  [,        R.                  " XSUR                  UUSS.5      5        GM	  [        R                  " SU SUR$                   35        GM2     U$ ! [
         a+  n[        R                  " S[        U5      SS9  Us SnA$ SnAff = f)z(Convert Cargo.lock into a list of wraps z
Cargo.lockzFailed to load Cargo.lock:F)fatalNzraw.CargoLockz5registry+https://github.com/rust-lang/crates.io-indexz	checksum  z ()z https://crates.io/api/v1/crates/r   z	/downloadr   filez.tar.gzcargo)	directory
source_urlsource_filenamesource_hashr   zgit+r   branchr   r   )paramsqueryfragmentgit)r*  urlrevisionr   zUnsupported source URL in z: )!rc   rd   re   existsr   r	   r   warningrM   rT   rU   r   r   ro   r#   rp   r   r   sourcechecksummetadatar   r   from_valuesr   urllibparseurlparseparse_qsr0  r1  
urlunparse_replace)rr   subproject_dirr   r   r   eraw_cargolock	cargolockro   	subp_namer8  r3  r*  partsr0  r.  r4  s                    r"   
load_wrapsrG    s    (*Eww||J5H	ww~~h	X&D 5&&}5	 ((G(w{{7??7STI~~%#ZZ"++#(11Igll^1W__L]]_`g`n`n_oop2qrH8aGXXab&||nAgoo->?	.::9V\!*"%*3G'<#+%_   **622--gnnQR.@A--ekk:/75/@x+b >>3Vll--ennBb[]n.^_.::9V[!( (%	^   9(2gnnEUVW? )@ LK ) 	LL5s1vUKL	s   	K 
K8 K3-K83K8)r  )r   rM   r   rM   r    rM   r  rM   )r   rM   r  rM   )r  rM   )rr   rM   rA  rM   r  zT.List[PackageDefinition])1__doc__
__future__r   rF   rc   r;   urllib.parser;  r   typingrT   r   r   r   r   r   r   r	   r3   r
   r   r   mesonlibr   r   r   r   	wrap.wrapr   TYPE_CHECKINGr   r   r   r   rS   r   interpreterbaser   compilers.rustr   r#   r'   r+   r/   	dataclassr1   rK   rO   rG  r*   r$   r"   <module>rR     s    #  	     # # 6 > > 4  )??6),-'
6 ~ ~ ~ d#  $
@
 @
F-r$   