
    -Ph                    X   U d 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mZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ej        r\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#  G d de          Z$ ej%        dej&        ej'        ej(        ej)                  Z*dZ+de,d<   dZ-de,d<   dD ]Z.	  ej/        e.          Z+ n# e0$ r Y w xY w ej1        d          Z-dZ2 G d de          Z3dcd Z4ddd"Z5ej6        ded&            Z7ej6        dfd)            Z7ej6        dgd,            Z7dhd/Z7did4Z8ej9         G d5 d6                      Z:ej9         G d7 d8                      Z;ej9         G d9 d:                      Z<ej9         G d; d<                      Z=ej9         G d= d>e=                      Z>ej9         G d? d@e=                      Z?ej9         G dA dBe=                      Z@ej9         G dC dDe=                      ZAej9         G dE dFe=                      ZBej9         G dG dH                      ZCdjdkdNZDdldPZEdmdSZFdndTZGdodUZHdodVZI G dW dX          ZJ ej9        dYZ           G d[ d\                      ZK G d] d^          ZLdpdbZMdS )qaA  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   )MesonException
Popen_safe)coredatamlog)PackageDefinition)
ModuleType)ProtocolSelf)manifest)mparser)Environment)
SubProjectc                      e Zd ZU ded<   dS )DataclassInstancez/T.ClassVar[dict[str, dataclasses.Field[T.Any]]]__dataclass_fields__N__name__
__module____qualname____annotations__     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/cargo/interpreter.pyr   r   (   s         MMMMMMr   r   _UnknownKeysTzT.Optional[ModuleType]tomllibT.Optional[str]	toml2json)r    tomliaI  This may (unlikely) be an error in the cargo manifest, or may be a missing implementation in Meson. If this issue can be reproduced with the latest version of Meson, please help us by opening an issue at https://github.com/mesonbuild/meson/issues. Please include the crate and version that is generating this warning if possible.c                      e Zd ZdS )TomlImplementationMissingN)r   r   r   r   r   r   r%   r%   K   s        Dr   r%   filenamestrreturnT.Dict[object, object]c                   t           rCt          | d          5 }t                               |          }d d d            n# 1 swxY w Y   n_t          t	          d          t          t          | g          \  }}}|j        dk    rt          d|          t          j	        |          }t          |t                    st          d          |S )Nrbz:Could not find an implementation of tomllib, nor toml2jsonr   z"toml2json failed to decode output
z3Cargo.toml isn't a dictionary? How did that happen?)r    openloadr"   r%   r	   
returncoder   jsonloads
isinstancedict)r&   frawpouterrs         r   	load_tomlr8   O   s     (D!! 	"Q,,q//C	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" +,hiii )X!6773<1 !FLLLjooc4   TRSSSJs   ?AAnamec                .    |                      dd          S )z^Fixup a meson variable name

    :param name: The name to fix
    :return: the fixed name
    -_)replacer9   s    r   fixup_meson_varnamer?   c   s     <<S!!!r   dmanifest.BuildTargetmanifest.FixedBuildTargetc                    d S Nr   r@   s    r   _fixup_raw_mappingsrF   m   s    ORsr   manifest.LibTargetmanifest.FixedLibTargetc                    d S rD   r   rE   s    r   rF   rF   p   s    KN3r   manifest.Dependencymanifest.FixedDependencyc                    d S rD   r   rE   s    r   rF   rF   s   s    MPSr   FT.Union[manifest.BuildTarget, manifest.LibTarget, manifest.Dependency]UT.Union[manifest.FixedBuildTarget, manifest.FixedLibTarget, manifest.FixedDependency]c                    d |                                  D             }d|v rBt          |d         t                    s
J d            t          j        |d                   |d<   t          j        d|          S )a  Fixup raw cargo mappings to ones more suitable for python to consume.

    This does the following:
    * replaces any `-` with `_`, cargo likes the former, but python dicts make
      keys with `-` in them awkward to work with
    * Convert Dependency versions from the cargo format to something meson
      understands

    :param d: The mapping to fix
    :return: the fixed string
    c                4    i | ]\  }}t          |          |S r   r?   .0kvs      r   
<dictcomp>z'_fixup_raw_mappings.<locals>.<dictcomp>   s'    
;
;
;Aq!!1
;
;
;r   r   zfor mypyrN   )itemsr1   r'   r   convertTcast)r@   r4   s     r   rF   rF   v   sw     <
;
;
;
;CC#i.#..::
::: Y88I6iknooor   datacls5T.Union[DataclassInstance, T.Type[DataclassInstance]]msgc                   t          |           d t          j        |          D             z
  }|rWt          j        |dd                    d                    t          |                              t                     |D ]}| |= | S )a:  Remove and warn on keys that are coming from cargo, but are unknown to
    our representations.

    This is intended to give users the possibility of things proceeding when a
    new key is added to Cargo.toml that we don't yet handle, but to still warn
    them that things might not work.

    :param data: The raw data to look at
    :param cls: The Dataclass derived type that will be created
    :param msg: the header for the error message. Usually something like "In N structure".
    :return: The original data structure, but with all unknown keys removed.
    c                    h | ]	}|j         
S r   r>   )rS   xs     r   	<setcomp>z'_handle_unknown_keys.<locals>.<setcomp>   s    FFFafFFFr   zhas unexpected keysz"{}".z, )	setdataclassesfieldsr   warningformatjoinsorted_EXTRA_KEYS_WARNING)r[   r\   r^   
unexpectedrT   s        r   _handle_unknown_keysrl      s     TFFk.@.E.EFFFFJ S/		&Q[J\J\@]@]1^1^(	* 	* 	* 	 	AQKr   c                     e Zd ZU dZded<   ded<   dZded<   dZded<    ej        e		          Z
d
ed<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    ej        e		          Zd
ed<    ej        e		          Zd
ed<   dZded<   dZded<   dZded<    ej        e		          Zd
ed<    ej        e		          Zd
ed<   dZded<    ej        e	          Zd ed!<   dZded"<   dZded#<   dZded$<   dZ ded%<   dZ!ded&<   dZ"ded'<    ej        d()          Z#ded*<   d2d-Z$e%d3d1            Z&dS )4PackagezARepresentation of a Cargo Package entry, with defaults filled in.r'   r9   r   Nr!   descriptionresolverdefault_factoryT.List[str]authors2015manifest.EDITIONeditionrust_versiondocumentationreadmehomepage
repositorylicenselicense_filekeywords
categories	workspacebuildlinksexcludeincludeTboolpublishzT.Dict[str, T.Any]metadatadefault_runautolibautobinsautoexamples	autotestsautobenchesFinitapir(   Nonec                8    t          | j                  | _        d S rD   )_version_to_apir   r   selfs    r   __post_init__zPackage.__post_init__   s    "4<00r   r4   manifest.Packager   c                    t          j        dd |                                D                       }t          || d|d                    } | di |S )Nzmanifest.FixedPackagec                4    i | ]\  }}t          |          |S r   rQ   rR   s      r   rV   z$Package.from_raw.<locals>.<dictcomp>   s'    HHHDAq)!,,aHHHr   zPackage entry r9   r   )rY   rZ   rW   rl   )r\   r4   pkgs      r   from_rawzPackage.from_raw   sa    f,HHCIIKKHHHJ J"3-Kc&k-K-KLLszzSzzr   r(   r   )r4   r   r(   r   )'r   r   r   __doc__r   ro   rp   rd   fieldlistrt   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r2   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   rn   rn      s         LKIIILLL#'K'''' $H$$$$,;,TBBBGBBBB &G&&&&$(L((((%)M))))"F"""" $H$$$$"&J&&&&#G####$(L((((-K-dCCCHCCCC/k/EEEJEEEE!%I%%%%!E!!!!!E!!!!,;,TBBBGBBBB,;,TBBBGBBBBG#4;#4T#J#J#JHJJJJ#'K''''GHLIK { e,,,C,,,,1 1 1 1    [  r   rn   c                      e Zd ZU dZded<   ded<   dZded<   d	Zd
ed<    ej        e	          Z
ded<   edd            Zedd            ZddZd	S )SystemDependencyzh Representation of a Cargo system-deps entry
        https://docs.rs/system-deps/latest/system_deps
    r'   r9   rs   r   Fr   optionalNr!   featurerq   zT.Dict[str, T.Dict[str, str]]feature_overridesr4   T.Anyr(   c                   t          |t                    r$ | |t                              |                    S |                    d|          }t                              |                    d                    }|                    dd          }|                    d          }d |                                D             } | |||||          S )Nr9   r   r   Fr   c                "    i | ]\  }}|d v	||S )>   r9   r   r   r   r   rR   s      r   rV   z-SystemDependency.from_raw.<locals>.<dictcomp>   s)    qqqdaQFp=p=pQ=p=p=pr   )r1   r'   r   convert_versiongetrW   )r\   r9   r4   r   r   r   r   s          r   r   zSystemDependency.from_raw   s    c3 	D3t-==cBBCCCwwvt$$"2237793E3EFF77:u--'')$$qqciikkqqqs4(G5FGGGr   c                    |  | j         d          ng }g }|D ]:}|                                }|d         dvrd| }|                    |           ;|S )N,r   z><=>=)splitstripappend)r   versresultrU   s       r   r   z SystemDependency.convert_version   sr    %,%8}w}S!!!b  	 	A		At5  HHMM!r   features
T.Set[str]c                &    | j         d u p| j         |v S rD   )r   )r   r   s     r   enabledzSystemDependency.enabled   s    |t#?t|x'??r   )r9   r'   r4   r   r(   r   )r   r!   r(   rs   )r   r   r(   r   )r   r   r   r   r   r   r   rd   r   r2   r   r   r   staticmethodr   r   r   r   r   r   r      s           IIIH#G####7H{7HY]7^7^7^^^^^	H 	H 	H [	H    \@ @ @ @ @ @r   r   c                     e Zd ZU dZded<   ded<   dZded<   dZded	<   dZded
<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<    ej        e          Zded<    ej        d          Zded<   ddZed d            ZdS )!
Dependencyz+Representation of a Cargo Dependency Entry.zdataclasses.InitVar[str]r9   rs   r   Nr!   registrygitbranchrevpathFr   r    r'   packageTdefault_featuresrq   r   r   r   r(   r   c                6   | j         p|| _         t                      }| j        D ]}|                    d          r=|                    t          |dd                                                               T|                    d          r<|                    t          |dd                                                               |s	d| _        d S t          |          dk    r|	                                | _        d S t          d| j         d          )N)r   z==r   =r   0z*Cannot determine minimum API version from .)r   rc   r   
startswithaddr   r   r   lenpopr   )r   r9   r   rU   s       r   r   zDependency.__post_init__	  s    |+tee 	8 	8A||L)) 8!""667777c"" 8!""66777 	_DHHHXX]]wwyyDHHH !]dl!]!]!]^^^r   r4   manifest.DependencyVc                    t          |t                    r | |t          j        |                    S t	          t          |          | d|           } | |fi |S )z/Create a dependency from a raw cargo dictionaryzDependency entry )r1   r'   r   rX   rl   rF   )r\   r9   r4   fixeds       r   r   zDependency.from_raw  sn     c3 	33tW_S11222$%8%=%=sD^X\D^D^__s4!!5!!!r   )r9   r'   r(   r   )r9   r'   r4   r   r(   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   r   r      s9         65"""" $H$$$$C"F""""C D    HG!!!!!-K-dCCCHCCCC { e,,,C,,,,_ _ _ _  " " " [" " "r   r   c                      e Zd ZU ded<    ej        d           Zded<   dZded	<   d
Zded<   dZ	ded<   d
Z
ded<   dZded<   d
Zded<   dZded<    ej        e          Zded<   dZded<   edd            ZdS )BuildTargetr'   r9   c                     dgS Nlibr   r   r   r   <lambda>zBuildTarget.<lambda>&  
    Y^X_ r   rq   T.List[manifest.CRATE_TYPE]
crate_typeNz$dataclasses.InitVar[T.Optional[str]]r   Tr   testFdoctestbenchdocharnessru   rv   rw   rs   required_featurespluginr4   rA   r(   r   c                    |                     dd          }t          t          |          | d|           } | di |S )Nr9   z<anonymous>zBinary entry r   )r   rl   rF   )r\   r4   r9   r   s       r   r   zBuildTarget.from_raw>  sK    wwv}--$%8%=%=sDZTXDZDZ[[s||U||r   )r4   rA   r(   r   )r   r   r   r   rd   r   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   "  s         III.?k.?P_P_.`.`.`J````15D5555 D G E CG &G&&&&%6[%6t%L%L%LLLLLF   [  r   r   c                      e Zd ZU dZdZded<   dZded<   ej        	                    dd          Zded	<   d
Z
ded<    ej        d           Zded<   dZded<   edd            ZdS )Libraryz(Representation of a Cargo Library Entry.Tr   r   r   srczlib.rsr'   r   F
proc_macroc                     dgS r   r   r   r   r   r   zLibrary.<lambda>M  r   r   rq   r   r   doc_scrape_examplesr4   rG   fallback_namer(   r   c                v    t          |          }d|vr||d<   t          || d|d                    } | di |S )Nr9   zLibrary entry r   )rF   rl   )r\   r4   r   r   s       r   r   zLibrary.from_rawP  sU    #C(( )E&M$UC1Q%-1Q1QRRs||U||r   N)r4   rG   r   r'   r(   r   )r   r   r   r   r   r   r   osr   rh   r   rd   r   r   r   r   r   r   r   r   r   r   D  s          32GCUH--D----J.?k.?P_P_.`.`.`J```` $$$$$	 	 	 [	 	 	r   r   c                  "    e Zd ZU dZdZded<   dS )Binaryz$Representation of a Cargo Bin Entry.Tr   r   N)r   r   r   r   r   r   r   r   r   r   r   ]  s+          /.Cr   r   c                  "    e Zd ZU dZdZded<   dS )Testz%Representation of a Cargo Test Entry.Tr   r   N)r   r   r   r   r   r   r   r   r   r   r   e  s+          0/Er   r   c                  "    e Zd ZU dZdZded<   dS )	Benchmarkz*Representation of a Cargo Benchmark Entry.Tr   r   N)r   r   r   r   r   r   r   r   r   r   r   m  s+          54Dr   r   c                  B    e Zd ZU dZ ej        d           Zded<   dS )Examplez(Representation of a Cargo Example Entry.c                     dgS )Nbinr   r   r   r   r   zExample.<lambda>z  r   r   rq   r   r   N)r   r   r   r   rd   r   r   r   r   r   r   r   r   u  s?          32.?k.?P_P_.`.`.`J``````r   r   c                      e Zd ZU dZded<   ded<   ded<   ded<    ej        d	          Zd
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   dZded<   d!dZ	d S )"Manifesta'  Cargo Manifest definition.

    Most of these values map up to the Cargo Manifest, but with default values
    if not provided.

    Cargo subprojects can contain what Meson wants to treat as multiple,
    interdependent, subprojects.

    :param path: the path within the cargo subproject.
    rn   r   zT.Dict[str, Dependency]dependenciesdev_dependenciesbuild_dependenciesFr   zT.Dict[str, SystemDependency]system_dependenciesr   r   zT.List[Binary]r   zT.List[Test]r   zT.List[Benchmark]r   zT.List[Example]examplezT.Dict[str, T.List[str]]r   z$T.Dict[str, T.Dict[str, Dependency]]targetr   r'   r   r(   r   c                    | j                             dg            d | j        j                            di                                           D             | _        d S )Ndefaultc                L    i | ]!\  }}|t                               ||          "S r   )r   r   rR   s      r   rV   z*Manifest.__post_init__.<locals>.<dictcomp>  sA      $I  $I  $I41aA'7'@'@A'F'F  $I  $I  $Ir   zsystem-deps)r   
setdefaultr   r   r   rW   r   r   s    r   r   zManifest.__post_init__  sz      B/// $I  $ISWS_ShSlSlmz|~SS  TF  TF  TH  TH  $I  $I  $I   r   Nr   )
r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   }  s         	 	 ))))----////9J9JPU9V9V9VVVVVLLL&&&&0000DNNNNI I I I I Ir   r   r   raw_manifestmanifest.Manifestsubdirr   c                |   t          t                              | d                   d |                     di                                           D             d |                     di                                           D             d |                     di                                           D             t
                              |                     di           | d         d	                   d
 |                     di           D             d |                     di           D             d |                     di           D             d |                     di           D             |                     di           d |                     di                                           D             |          S )Nr   c                L    i | ]!\  }}|t                               ||          "S r   r   r   rR   s      r   rV   z%_convert_manifest.<locals>.<dictcomp>  s.    ___$!QJ1%%___r   r   c                L    i | ]!\  }}|t                               ||          "S r   r  rR   s      r   rV   z%_convert_manifest.<locals>.<dictcomp>  s.    ccc$!QJ1%%cccr   zdev-dependenciesc                L    i | ]!\  }}|t                               ||          "S r   r  rR   s      r   rV   z%_convert_manifest.<locals>.<dictcomp>  s.    eee$!QJ1%%eeer   zbuild-dependenciesr   r9   c                B    g | ]}t                               |          S r   )r   r   rS   bs     r   
<listcomp>z%_convert_manifest.<locals>.<listcomp>  s$    AAA		AAAr   r   c                B    g | ]}t                               |          S r   )r   r   r  s     r   r	  z%_convert_manifest.<locals>.<listcomp>  s$    @@@aq		@@@r   r   c                B    g | ]}t                               |          S r   )r   r   r  s     r   r	  z%_convert_manifest.<locals>.<listcomp>  s&    FFF1		A		FFFr   r   c                B    g | ]}t                               |          S r   )r   r   r  s     r   r	  z%_convert_manifest.<locals>.<listcomp>  s&    FFF		!		FFFr   r   r   c                z    i | ]8\  }}|d  |                     di                                           D             9S )c                L    i | ]!\  }}|t                               ||          "S r   r  )rS   k2v2s      r   rV   z0_convert_manifest.<locals>.<dictcomp>.<dictcomp>  s.    ]]]RR$$R,,]]]r   r   )r   rW   rR   s      r   rV   z%_convert_manifest.<locals>.<dictcomp>  sX     	= 	= 	=Q 
]]155QS;T;T;Z;Z;\;\]]] 	= 	= 	=r   r   )r   rn   r   r   rW   r   )r   r   r   s      r   _convert_manifestr    s   i011__,2B2B>SU2V2V2\2\2^2^___cc,2B2BCUWY2Z2Z2`2`2b2bcccee,2B2BCWY[2\2\2b2b2d2deee))%44l96Mf6UVVAA\%5%5eR%@%@AAA@@<#3#3FB#?#?@@@FF(8(8"(E(EFFFFFl&6&6y"&E&EFFFR((	= 	=!%%h3399;;	= 	= 	=  r   r   c                     | j         d          }t          |d                   dk    r|d         S t          |          dk    r$t          |d                   dk    rd|d          S dS )Nr   r   r   r   z0.r   )r   intr   )r   r   s     r   r   r     sk     7=D
47||qAw	TaCQLLA--DG~~3r   package_namer   c                T    |                      d          r
| d d         n| }| d| dS )Nz-rsr;   )endswith)r  r   basenames      r   _dependency_namer    s?    $0$9$9%$@$@R|CRC  lH!!!!!!r   c                &    t          |            dS )N_deprQ   )r  s    r   _dependency_varnamer    s    !,//5555r   c                     dS )N
extra_argsr   r   r   r   _extra_args_varnamer        <r   c                     dS )N
extra_depsr   r   r   r   _extra_deps_varnamer#    r   r   c                      e Zd Zd	dZdS )
PackageStater   r   
downloadedr   r(   r   c                    || _         || _        t                      | _        t                      | _        t          j        t                    | _        d S rD   )r   r&  rc   r   required_depscollectionsdefaultdictoptional_deps_features)r   r   r&  s      r   __init__zPackageState.__init__  sA     $$'EE),?J?VWZ?[?[###r   N)r   r   r&  r   r(   r   )r   r   r   r,  r   r   r   r%  r%    s.        \ \ \ \ \ \r   r%  T)frozenc                  $    e Zd ZU ded<   ded<   dS )
PackageKeyr'   r  r   Nr   r   r   r   r/  r/    s%         HHHHHr   r/  c                  v    e Zd Zd'dZd(d	Zd)dZd*dZd+dZd,dZd-dZ	d.dZ
d.dZd/d Zd0d!Zd1d"Zd2d%Zd&S )3Interpreterenvr   r(   r   c                0    || _         i | _        i | _        d S rD   )environment	manifestspackages)r   r2  s     r   r,  zInterpreter.__init__  s    02:<r   r   r'   mparser.CodeBlockNodec           
     N   |                      |          }|                     |j        j        |j        j                  \  }}|s|                     |d           t          j                            | j	        j
        |d          }t          j        |          |                     |          }|                                        d                    d          g          d                              d                    d                              fd|j        D                       g          gz  }||                     |          z  }||                               z  }t          j                            t          j                            | j	        j
        ||j        j        |j        j        j                            r>|j        j        j        D ],}|                    |                     ||                     -                    |          S )Nr   
Cargo.tomlimportrustmessagezEnabled features:c                :    g | ]}                     |          S r   stringrS   r3   r   s     r   r	  z)Interpreter.interpret.<locals>.<listcomp>  s#    CCCU\\!__CCCr   )_load_manifest_fetch_packager   r9   r   _enable_featurer   r   rh   r4  
source_dirr   Builder_create_projectassignfunctionr?  arrayr   _create_dependencies_create_meson_subdirexistsr   r   r   extend_create_libblock)	r   r   r   r   cachedr&   astr   r   s	           @r   	interpretzInterpreter.interpret  s   &&v..))(*:*?AQAUVVV 	1   i000 7<< 0 ;V\RR))""3..LL5<<3G3G2HII6RRNN9011CCCCclCCCDD'  
 	
 	t((e444t((/// 7>>"',,t'7'BFCLL]_b_k_o_tuuvv 	E!l.9 E E


4++C
CCDDDD{{3r   r  r   T.Tuple[PackageState, bool]c                   t          ||          }| j                            |          }|r|dfS t          ||          }| j        j                            |          \  }}t          j        	                    |d          }| j        j        
                    |t          j        d|                     |                     |          }	|| j        j        j        v o| j        j        j        |         j        d u}
t!          |	|
          }|| j        |<   |	j                                        D ]"\  }}|j        s|                     ||           #|dfS )NTsubprojectsr   F)r/  r6  r   r  r4  wrap_resolverresolver   r   rh   load_and_mergerY   rZ   rA  wrapstyper%  r   rW   r   _add_dependency)r   r  r   keyr   meson_depnamer   r<   subprojects_dirr   r&  depnamedeps                r   rB  zInterpreter._fetch_package  sT   s++m$$ 	9(s;;$2::=II	',,v}==&55oqvl\iGjGjkkk&&v..T-;AA Q*0?DDP 	 8Z00 c$17799 	3 	3LGS< 3$$S'222Ezr   r`  r   r%  c                L    | j         t          |j        |j                           S rD   )r6  r/  r   r   )r   r`  s     r   _dep_packagezInterpreter._dep_package  s    }ZSW==>>r   r   c                >   | j                             |          }|st          j                            | j        j        |d          }t          |          }d|v r0t          j	        d|          }t          ||          }|| j         |<   nt          | d          |S )Nr9  r   r   z+/Cargo.toml does not have [package] section)r5  r   r   r   rh   r4  rD  r8   rY   rZ   r  r   )r   r   	manifest_r&   r4   r   s         r   rA  zInterpreter._load_manifest  s    N&&v..	 	]w||D$4$?VVHH%%CC v&93??-lFCC	)2v&&$%[%[%[\\\r   r   r_  c                B   ||j         v rd S |j        j                            |          }|sR|t	          j        |j        j        |j        j                  v rd S t          d| d|j        j	        j
         d          |j                             |           |                     |j	        |j                  \  }}|j        r|                     |d           |j        D ]}|                     ||           |j        |         D ]}|                     ||           d S )NzDependency z not defined in z	 manifestr   )r(  r   r   r   	itertoolschainr   r   r   r   r9   r   rB  r   r   rC  r   r+  )r   r   r_  r`  dep_pkgr<   r3   s          r   r[  zInterpreter._add_dependency'  s?   c'''Fl'++G44 	n)/#,*GIhiiii !lw!l!lH\Ha!l!l!lmmmg&&&((cg>>
 	5  )444 	- 	-A  !,,,,+G4 	- 	-A  !,,,,	- 	-r   r   c                v   ||j         v rd S |j                             |           ||j        j        v r|                     ||           |j        j                             |g           D ]M}d|v r|                    dd          \  }}|d         dk    rr|d d         }||j        v r>|j        j        |         }|                     |          }| 	                    ||           }|j
        |                             |           |                     ||           |j        j                            |          }|r+|                     |          }| 	                    ||           |                    d          r |                     ||dd                     7| 	                    ||           Od S )N/r   ?zdep:   )r   r   r   r   r[  r   r   r(  rb  rC  r+  r   )r   r   r   r3   r_  dep_fr`  rh  s           r   rC  zInterpreter._enable_feature9  s   cl""F!!!cl///  g... &**7B77 	- 	-Aaxx!"a2;#%%%crclG#"333!l7@"&"3"3C"8"8,,We<<<< 27;??FFFF((g666,377@@C ="&"3"3C"8"8,,We<<<f%% -$$S!ABB%0000$$S!,,,,-	- 	-r   r   builder.BuilderT.List[mparser.BaseNode]c                   g }|                     |                    d|j        j        j                              |                     |                    d|j        j        j                              |j        r(|                     |                    d                     g }|                    |                    |j        j        j                  |                    d          g           |                    |j        j        j                  |                    dt          j
                   |                    |          d}|j        j        j        r(|                    |j        j        j                  |d<   n8|j        j        j        r'|                    |j        j        j                  |d<   |                    d	||          gS )
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=0r;  z>= )r   meson_versiondefault_optionsr}   license_filesproject)r   r?  r   r   rw   r&  rM  r9   r   r
   stable_versionrI  r}   r~   rH  )r   r   r   rs  argskwargss         r   rF  zInterpreter._create_projectZ  s    57u||,V8L8T,V,VWWXXXu||,\cl>R>Z,\,\]]^^^> 	D""5<<0A#B#BCCC)+LL-233LL  
 	 	 	
 ||CL$8$@AA #\\*I0G*I*IJJ${{?;;1
 1
 <' 	V %S\-A-I J JF9\!. 	V&+ll3<3G3T&U&UF?#y$7788r   c                   g }|j         D ]-}|j        j        |         }||                     ||          z  }.|                    |                    |                    g           d                     |j        j                                        D ]9\  }}|	                    |j
                  r||                     |||          z  }:|S )Nsystem_deps_args)r(  r   r   _create_dependencyr   rG  rI  r   rW   r   r   _create_system_dependency)r   r   r   rQ  r_  r`  r9   sys_deps           r   rJ  z Interpreter._create_dependencies{  s    (*( 	7 	7G,+G4C4**3666CC

5<<B1CDDEEE \=CCEE 	L 	LMD's|,, Lt55dGUKKK
r   r9   r   c                                        fd|j        D                                           |j                   d}t	          |           d}dt	          |           }                                        d                    |j                  g|          |          	                    
                    d                    |                                                                                                     d                              |          g          d          g                    gS )	Nc                :    g | ]}                     |          S r   r>  rS   sr   s     r   r	  z9Interpreter._create_system_dependency.<locals>.<listcomp>  #    #I#I#IELLOO#I#I#Ir   )r   required_system_depsystem_deps_have_
dependencyfound--cfgrz  )rI  r   r   r   r?   rG  rH  r?  r9   if_method
identifierrO  
plusassign)r   r9   r`  r   kwvarnamecfgs      `   r   r|  z%Interpreter._create_system_dependency  sN   {{#I#I#I#IS[#I#I#IJJ

s|#344
 
 )..;;;="5d";";==LL \\#(++, 
   IIWe&6&6w&?&?@@%++$$U\\'%:%:ELL<M<M$NOO* O C C 
 	
r   c                   |                      |          }d                    fd|j        D                       i}                                        d                    t          |j        |j                            g|          t          |j                                                
                    d
                    d                    t          |j                                                d          gd                    d          i                              d	          g          d
                                                  fd|j        D                       d                              dg                    d                                                                                          d                              d
                                                            d                    d                              t          |j        |j                                                d                              d
                              d                              d          g          g                    g                    gS )Nr   c                :    g | ]}                     |          S r   r>  r  s     r   r	  z2Interpreter._create_dependency.<locals>.<listcomp>  r  r   r  r   get_variabler   default_valuer   r   actual_featuresc                :    g | ]}                     |          S r   r>  r@  s     r   r	  z2Interpreter._create_dependency.<locals>.<listcomp>  s#    %L%L%L!ell1oo%L%L%Lr   needed_featuresr3   errorr   z#previously configured with featureszbut need)rb  rI  r   rG  rH  r?  r  r   r   r  r  r  r   foreachrO  r  not_in)r   r`  r   r   r  s     `  r   r{  zInterpreter._create_dependency  s   $$u{{#I#I#I#IS[#I#I#IJJ
  LL \\"23;"H"HIIJ 
 $CK00  LLLL&(()<S[)I)IJJj112(%,,r*:*:;	  \\#&&'	 	 " & LL%L%L%L%Ls|%L%L%LMMO`aaMM3%!1!12C!D!Dekk		%,,u'7'7'<'<e>N>NO`>a>abbdidodoNN7\22%5ck37%K%KLL%JKK(():;;Z00(():;;-  	q 	e 	e 	 	S G G  ?+
 +	
r   c                j   |                     |                    g           t                                |                     |                    g           t                                |                     |                    d|                    d          g          d          |                    |                    d|                    d          |                    d          g          |	                    |                    d|                    d          g          g                    gS )Nr:  fsis_dirmesonr   )
rG  rI  r  r#  rH  r?  r  r  r  rO  )r   r   s     r   rK  z Interpreter._create_meson_subdir  s     LLR*=*?*?@@LLR*=*?*?@@LL5<<3E3E2FGGNNIIell8U-=-=d-C-CellSZF[F[E\]]kk5>>(U\\'=R=R<S#T#T"UVVX X	
 	
r   r   manifest.CRATE_TYPEc                   g }i }|j         D ]}|j        j        |         }|                    |                    t          |j                                       ||j        k    r^|                     |          }|j        j        j	        }	|
                    |          ||
                    t          |	                    <   |j        j                                        D ]W\  }}
|
                    |j                  r8|                    |                    t          |           d                     X|                    d          |                    t!                                |                    d          g}|                    |                    t#                                           |
                    t          |j        j        j	                            |
                    |j        j        j                  g}|                    |          |                    |          |                    |          d}|j        j        j        s|dk    r,|                    d|                    d          ||          }nS|dv rd	}n|d
v rd}nt/          d|           |dv r|
                    d          |d<   |                    |||          }g }|j        D ]3}||
                    d          |
                    d| d          gz  }4|                    |                    |          d          |                    |d          |                    |                    d|                    d          |                    |
                    d          |
                    d                    |j                            i          d          d          |                    d|                    d          |
                    t7          |j        j        j	        |j        j        j                            |                    d          g          gS )Nr  features_argsrz  )r   rust_dependency_map	rust_argsz
proc-macror   r;  >   r   rlib	staticlibstatic_library>   dylibcdylibshared_libraryzUnsupported crate type >   r  r  crust_abir  z	feature=""r   declare_dependencyr   r   )	link_with	variables)r  r`  override_dependencyr  )r(  r   r   r   r  r  r   rb  r   r9   r?  r?   r   rW   r   r   r  r#  r   rI  r2   r   r  r   rH  rG  rh   r  r   )r   r   r   r   r   dependency_mapr9   r`  rh  dep_lib_namer}  r  posargsrx  r   target_typer  r3   s                     r   rN  zInterpreter._create_lib  sF   13EG% 	e 	eD,+D1C 0 01DS[1Q1Q R RSSSs{""++C00&/38RWR^R^_cRdRdu||,?,M,MNNO \=CCEE 	a 	aMD's|,, a##E$4$48KD8Q8Q5^5^5^$_$_``` _--02233/00/
	 	E,,-@-B-BCCDDD LL,S\-=-BCCDDLL).//-
 "KK55#(::n#=#=Y//1
 1
 <& 	?**D*D,,|U-=-=f-E-EwPVWWCC999.222.$%Kz%K%KLLL444%*\\#%6%6z"..gv>>C24 	U 	UAell733U\\BRaBRBRBR5S5STTMM LL]33_EELLe$$LL(%*%5%5e%<%<%*ZZ!LL44ell388CLCYCY6Z6Z1 & &       LL%  ))LL!1#,2F2KS\MaMe!f!fgg$$U++ 
 	
r   N)r2  r   r(   r   )r   r'   r(   r7  )r  r'   r   r'   r(   rS  )r`  r   r(   r%  )r   r'   r(   r   )r   r%  r_  r'   r(   r   )r   r%  r   r'   r(   r   )r   r%  r   ro  r(   rp  )r9   r'   r`  r   r   ro  r(   rp  )r`  r   r   ro  r(   rp  )r   ro  r(   rp  )r   r%  r   ro  r   r  r(   rp  )r   r   r   r,  rR  rB  rb  rA  r[  rC  rF  rJ  r|  r{  rK  rN  r   r   r   r1  r1    s!       = = = =       <   *? ? ? ?   - - - -$- - - -B9 9 9 9B	 	 	 	
 
 
 
4;
 ;
 ;
 ;
z
 
 
 
$N
 N
 N
 N
 N
 N
r   r1  rD  subproject_dirT.List[PackageDefinition]c                   g }t           j                            | d          }t           j                            |          r)	 t	          j        dt          |                    }n=# t          $ r0}t          j	        dt          |          d           |cY d}~S d}~ww xY w|d         D ]}|d         }|d	         }t          |t          |                    }	|                    d
          }
|
H|
dk    rs|                    d          }||d         d| d| d|
 d         }d| d| d}| d| }|                    t          j        |	|d||| d|dd                     |
                    d          rt$          j                            |
dd                   }t$          j                            |j                  }d|v r|d         d         nd}|j        p|}t$          j                            |                    ddd                    }|                    t          j        |	|d |||dd!                     t          j	        d"| d#|
            |S )$z) Convert Cargo.lock into a list of wraps z
Cargo.lockzmanifest.CargoLockzFailed to load Cargo.lock:F)fatalNr   r9   r   sourcez5registry+https://github.com/rust-lang/crates.io-indexchecksumr   z	checksum  z ()z https://crates.io/api/v1/crates/rj  z	/downloadr;   filez.tar.gzcargo)	directory
source_urlsource_filenamesource_hashr  zgit+rm  r   r   r   )paramsqueryfragmentr   )r  urlrevisionr  zUnsupported source URL in z: )r   r   rh   rL  rY   rZ   r8   r%   r   rf   r'   r  r   r   r   r   from_valuesr   urllibparseurlparseparse_qsr  r  
urlunparse_replace)rD  r  rY  r&   	cargolocker   r9   r   	subp_namer  r  r  r  partsr  r   r  s                     r   
load_wrapsr  @  s    (*Ew||J55H	w~~h (P	3Yx5H5HIIII( 	 	 	L5s1vvUKKKKLLLLLL	 !+ "	P "	PG6?Di(G(w/G/GHHI[[**F~RRR";;z22#(45\5\5\5\5\SY5\5\5\]HRRRRRR#//g//	.:9nV\!*"%*3'<'<'<#+%_ _       ""6** P--fQRRj99--ek::/75/@/@x++b >3Vl--ennBb[]n.^.^__.:9nV[!% (%	^ ^       N(NNfNNOOOOLs   "A' '
B!1%BB!B!)r&   r'   r(   r)   )r9   r'   r(   r'   )r@   rA   r(   rB   )r@   rG   r(   rH   )r@   rJ   r(   rK   )r@   rM   r(   rN   )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(   r'   )r  r'   r(   r'   )r(   r'   )rD  r'   r  r'   r(   r  )Nr   
__future__r   rd   	importlibr/   r   shutilr)  urllib.parser  rf  typingrY   r   r   r   mesonlibr   r	   r
   r   	wrap.wrapr   TYPE_CHECKINGtypesr   typing_extensionsr   r   r   r   r4  r   interpreterbaser   r   TypeVarFixedPackageFixedDependencyFixedLibTargetFixedBuildTargetr   r    r   r"   timport_moduleImportErrorwhichrj   r%   r8   r?   overloadrF   rl   	dataclassrn   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r#  r%  r/  r1  r  r   r   r   <module>r     s     # " " " " "          				                              1 1 1 1 1 1 1 1         ) ) ) ) ) )? 9      00000000)))))),,,,,,N N N N NH N N N AIox/D&68O&79 9M #' & & & &!	 ! ! ! !	 * *A)))!,,    [))I; 	 	 	 	 	 	 	 	   (" " " "  R R R  R N N N  N P P P  Pp p p p*   0 * * * * * * * *X $@ $@ $@ $@ $@ $@ $@ $@L '" '" '" '" '" '" '" '"T        B     k   0     [        ;            a a a a ak a a a I I I I I I I I@    $	 	 	 	" " " "
6 6 6 6      \ \ \ \ \ \ \ \ d###       $#
a
 a
 a
 a
 a
 a
 a
 a
H. . . . . .s   CC C 