
    -PhK                    >   d dl mZ d dlZd dlZd dlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZ dd	l	mZ dd
l
mZ ddlmZmZmZmZmZmZm Z  ddl!m"Z" ej#        rddlm$Z$ ddlm%Z% ddl&m'Z' g dZ( G d d          Z) G d de"          Z*dS )    )annotationsN   )	compilersenvironmentmesonliboptions)coredata)
ExecutableJarSharedLibrarySharedModuleStaticLibrary)detect_compiler_for)InvalidArguments
SubProject)MachineChoice	OptionKey)BaseNodeArithmeticNode	ArrayNodeElementaryNodeIdNodeFunctionNode
StringNode   )AstInterpreter)BuildTarget)TYPE_var)
AstVisitor)
executablejarlibraryshared_libraryshared_modulestatic_libraryboth_librariesc                      e Zd Zd
dZddZd	S )IntrospectionHelper
cross_fileT.Optional[str]c                H    ||gng | _         g | _        i | _        g | _        d S N)r*   native_filecmd_line_optionsprojectoptions)selfr*   s     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/ast/introspection.py__init__zIntrospectionHelper.__init__%   s2    *4*@:,,b(*8:+-    otherobjectreturnboolc                    t           S r-   )NotImplemented)r1   r5   s     r2   __eq__zIntrospectionHelper.__eq__+   s    r4   N)r*   r+   )r5   r6   r7   r8   )__name__
__module____qualname__r3   r;    r4   r2   r)   r)   #   s<        . . . .     r4   r)   c                       e Zd Zdd ed          ddfd9 f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d>d.Zd>d/Zd>d0Zd>d1Zd>d2Zd?d3Zd@d4ZdAd5ZdBdCd8Z xZS )DIntrospectionInterpreterN subprojectssource_rootstrsubdirbackendvisitorsT.Optional[T.List[AstVisitor]]r*   r+   
subprojectr   subproject_direnv#T.Optional[environment.Environment]c	                   t          |          }	|pt          j        |d |	          }
t                                          |||||
|           || _        || _        t          d          | j        i| _        i | _	        g | _
        g | _        d | _        | j                            | j        | j        | j        | j        | j        | j        | j        | j        | j        | j        d
           d S )N)rH   rG   )
add_languages
dependencyr!   r"   r#   projectr$   r%   r&   r'   )r)   r   Environmentsuperr3   r*   rG   r   default_optionsproject_datatargetsdependenciesproject_nodefuncsupdatefunc_add_languagesfunc_dependencyfunc_executablefunc_jarfunc_libraryfunc_projectfunc_shared_libfunc_shared_modulefunc_static_libfunc_both_lib)r1   rD   rF   rG   rH   r*   rJ   rK   rL   r   env_	__class__s              r2   r3   z!IntrospectionInterpreter.__init__1   s     &j11Ik-k4IIfj.$Yabbb$ )) 4 4dlC02358:&*
!4..=(("2!4"2"0
 
 	 	 	 	 	r4   noder   argsT.List[TYPE_var]kwargsT.Dict[str, TYPE_var]r7   Nonec                     j         rt          d          | _         t          |          dk     rt          d          dd}|d	         }|                    d
d          }t	          |t
                    r|j        }t	          |t                    sd}                     |dd                    } ||                    dd                     pdg} ||                    dd                     pg }	||||	d _	         
                                                      |                    dg                     }
t          j        |
          }t          j        | j                  }d |                                D              _         j                             j                    j        j        s j        dk    r j         j        j        vr j        dk    r? j        j                            t5          j        d|          i  j        j                   n^ j        j                             j        i t5          j        d|          i             j        j                             j                                                    sId|v rE|d         }t	          |t@                    r(t	          |j        t                    sJ |j         _!                                         sg  j	        d<   tD          j#        $                     j%         j!                  }tD          j#        &                    |          rvtE          j'        |          D ]a}tD          j#        &                    tD          j#        $                    ||                    r" (                    tS          |                     b j        *                     j+                    fd j        j                                        D             } j        ,                    |            -                    |dt\          j/                    -                    |dt\          j0                   d S )NzSecond call to project()r   zCNot enough arguments to project(). Needs at least the project name.rg   T.Anyr7   T.Optional[T.List[str]]c                    t          | t                    rEg }| j        j        D ]4}t          |t                    s d S |                    |j                   5|S t          | t                    r| j        gS d S r-   )
isinstancer   rh   	argumentsr   appendvalue)rg   rvs      r2   	_str_listz8IntrospectionInterpreter.func_project.<locals>._str_listZ   s    $	** , & &A%a44 $#ttHHQW%%%%$
++ $
|#4r4   r   version	undefinedlicenseunknownlicense_files)descriptive_namerx   rz   r|   rT   c                4    i | ]\  }}t          |          |S r?   r   ).0srv   s      r2   
<dictcomp>z9IntrospectionInterpreter.func_project.<locals>.<dictcomp>x   s$    'X'X'XDAq	!a'X'X'Xr4   rB   z$T.Dict[T.Union[OptionKey, str], str]rK   rC   c                d    i | ],\  }}j         j        j                            |          )||-S r?   )r   r	   optstoreis_backend_option)r   krv   r1   s      r2   r   z9IntrospectionInterpreter.func_project.<locals>.<dictcomp>   sQ      A  A  ADAqHXHaHjH|H|}~HH  A1a  A  A  Ar4   T)rg   rn   r7   ro   )1rX   r   lengetrq   r   rt   rE   flatten_argsrU   _load_option_filer   stringlistifycdatacreate_options_dictrJ   itemsproject_default_optionsrT   rZ   r   first_invocationr	   initialized_subprojectsr   &initialize_from_top_level_project_callTcastr   initialize_from_subproject_calladdis_subprojectr   rK   ospathjoinrD   isdirlistdirdo_subprojectr   init_backend_optionsrG   set_options_add_languagesr   HOSTBUILD)r1   rg   rh   rj   rw   	proj_name	proj_vers
proj_langsproj_licenseproj_license_filesdef_opts_project_default_optionsstring_dict	spdirnamesubprojects_dirir   s   `                r2   r`   z%IntrospectionInterpreter.func_projectS   sO    	?"#=>>> t99q=="#hiii
	 
	 
	 
	 G	JJy+66	i00 	(!I)S)) 	$#I&&tABBx00
 !yIt!<!<==L)&Yvzz/4'H'HIIOR1:y]i  }O  P  P   $$VZZ0A2%F%FGG#+#9(#C#C /0H$/ZZ'X'XKDUDUDWDW'X'X'X$##D$@AAA, 	KB1F1F4?bfbo  cH  LH  LH"$$&MMFA;OO$,. . . .
 &FFOFA;OO	  
 599$/JJJ!!## 	6(8F(B(B/0I)Z00 6!)/377777&/o#!!## 	:/1Dm, gll4+;T=PQQOw}}_-- :O44 : :Aw}}RW\\/1%E%EFF :**:a==999**4<888 A  A  A  AD$4$<$B$B$D$D  A  A  A!!'***Jm.@AAAJm.ABBBBBr4   dirnamec           
        t           j                            | j                                        | j                  }t           j                            ||          }	 t          |d| j        | j        || j        | j        | j	                  }|
                                 ||j        d<   | j        dxx         |j        gz  cc<   d S # t          j        t          f$ r Y d S w xY w)NrB   )r*   rJ   rK   rL   rH   namerC   )r   r   r   r   get_source_dirrK   rA   rG   r*   rH   analyzerU   r   MesonExceptionRuntimeError)r1   r   subproject_dir_abssubprsubis        r2   r   z&IntrospectionInterpreter.do_subproject   s   W\\$*:*I*I*K*KTM`aa/99	+E2t|PTP_ls  EI  EX  ^b  ^n  y}  yF  G  G  GDLLNNN(/Df%m,,,1B0CC,,,,,'6 	 	 	DD	s   A)C	 	C#"C#c                   |                      |          }|                    dd          }t          |t          t          j        f          s
J d            t          |t          j                  r|                                }d|v rG|                    dd          }|                     |||rt          j	        nt          j
                   d S t          j	        t          j
        fD ]}|                     |||           d S )NrequiredTfor mypynativeF)flatten_kwargsr   rq   r8   r   UserFeatureOption
is_enabledr   r   r   r   )r1   rg   rh   rj   r   r   for_machines          r2   r[   z+IntrospectionInterpreter.func_add_languages   s   $$V,,::j$//(T7+D$EFFRR
RRRh 9:: 	-**,,HvZZ%00Fhv0e0C0CS`Sefffff - 3]5GH A A##D(K@@@@A Ar4   	raw_langsr   r8   r   r   c                   g }|                      |          D ]\}t          |t                    r|                    |           -t          |t                    r|                    |j                   ]t          |t          j                  D ]}|	                                }|| j
        j        |         vr	 t          | j        ||d| j                  }n# t          j        $ r |r Y ]w xY w| j        ri }|                                D ]S}	t#          j        | j
        j                            |	                    }
|	                    | j                  }	|
||	<   T| j
                            |||| j        | j                   d S )N)keyTrJ   )r   rq   rE   rs   r   rt   sortedr   
sort_clinklowerr	   r   r   rJ   r   r   get_optionscopyr   get_value_objectevolveadd_compiler_options)r1   r   r   r   langsllangcompr   r   rv   s              r2   r   z'IntrospectionInterpreter._add_languages   s   ""9-- 	& 	&A!S!! &QAz** &QW%%%5i&:;;; 	v 	vD::<<D4=2;???!.t/?{TXZ^ZijjDD. ! ! ! ! ! ? v G!--// ' ' Idm&<&M&Ma&P&PQQHHH@@%&

M66wkSWSceietuuu#	v 	vs   ;CC.-C.c           	        |                      |          }|                     |          }|sd S |d         }d|v }|                    dd          }|                    dg           }t          |t                    s|g}t          |t
                    r|j        }t          |t                    sd}| xj        |||||j	        dk    |dgz  c_        d S )Nr   fallbackr   Trx   F)r   r   rx   has_fallbackconditionalrg   )
r   r   r   rq   listr   rt   r8   rW   condition_level)r1   rg   rh   rj   r   r   r   rx   s           r2   r\   z(IntrospectionInterpreter.func_dependency   s      &&$$V,, 	FAw!V+::j$//**Y++'4(( 	 iGh// 	&~H(D)) 	H (/!3
 
  	r4   
kwargs_rawtargetclassT.Type[BuildTarget]T.Optional[T.Dict[str, T.Any]]c                                           |          }|rt          |d         t                    sd S |d         }|g}g }d|v r|t          j        |d                   z  }d|v r|t          j        |d                   z  }                     |d          }d fd}	 |	|          }
 |	|          }fd	|                                D             }d
 |                                D             }d |                                D             }|                    dd          rt          j	        nt          j
        }g }g }d|d<    | j         j        ||d | j         j        j        |         |
  
        }|                                 |                                |j                                        |                                |                                t,          j                            t,          j                             j         j        t          j                             j        |j        |                                |                                |
|||d} xj        |gz  c_        |S )Nr   sourcesextra_filesTinqueueT.List[BaseNode]r7   c                   g }| r|                      d          }d }t          |t                    sJ t          |t                    r|j        }nt          |t
                    r|j        }nt          |t                    rbt          |j        t                    sJ |j        }|j	        v r5j	        |         }t          |t
          t          t          f          r| |gz  } n&t          |t                    r| |j        |j        gz  } ||j                                        }t          |t                    r(|j        j        t           v r|                     d           d |D             }| d |D             z  } |r||gz  }| |S )Nr   c                J    g | ] }t          |t          t          f          |!S r?   )rq   rE   r   r   xs     r2   
<listcomp>zQIntrospectionInterpreter.build_target.<locals>.traverse_nodes.<locals>.<listcomp>  s-    #]#]#]!Jq3PZJ[<\<\#]A#]#]#]r4   c           	     b    g | ],}t          |t          t          t          t          f          *|-S r?   )rq   r   r   r   r   r   s     r2   r   zQIntrospectionInterpreter.build_target.<locals>.traverse_nodes.<locals>.<listcomp>  s3    uuu!Jq<QZ\bdrBs4t4tuAuuur4   )poprq   r   r   rh   r   r   rt   rE   assignmentsr   leftrightrr   r   	func_nameBUILD_TARGET_FUNCTIONS)	r   rescurrarg_nodevar_nametmp_node	arg_nodeselementary_nodesr1   s	           r2   traverse_nodesz=IntrospectionInterpreter.build_target.<locals>.traverse_nodes   s   $&C "{{1~~!$11111dL11 7#yHHi00 7#yHHf-- 	7%dj#66666#zH4#333#'#3H#=%hFL0QRR 2#z1Gn55 7	4:66G#$.3355	dL11 %dn6JNd6d6dMM!$$$#]#]y#]#]#] uuyuuuu# "D6MC7  "8 Jr4   c                6    i | ]\  }}|j         v |d v ||S )>   installbuild_alwaysbuild_by_default)known_kwargs)r   r   rv   r   s      r2   r   z9IntrospectionInterpreter.build_target.<locals>.<dictcomp>  sY      U  U  U41aQ+BZ=Z=Z_`  eT  `T  `T!Q  `T  `T  `Tr4   c                R    i | ]$\  }}|t          |t                    r|j        n|%S r?   )rq   r   rt   r   r   rv   s      r2   r   z9IntrospectionInterpreter.build_target.<locals>.<dictcomp>  s6    pppQUQRTU!
1n(E(ELQWW1pppr4   c                D    i | ]\  }}t          |t                    ||S r?   )rq   r   r   s      r2   r   z9IntrospectionInterpreter.build_target.<locals>.<dictcomp>  s/    aaa41aTUW_I`I`a!Qaaar4   r   F_allow_no_sources)r   machineidtype
defined_inrF   r   	installedoutputsr   r   rj   rg   )r   r   r7   r   ) r   rq   rE   r   listifyr   r   r   r   r   r   rF   rJ   r   r	   r   process_compilers_lateget_basenamer   get_lower_case_nameget_idget_typenamer   r   normpathr   rD   build_filenamer   should_installget_outputsrV   )r1   rg   rh   r   r   r   srcqueueextra_queuerj   r   source_nodesextraf_nodeskwargs_reducedr   objectsempty_sourcestarget
new_targets   `   `             r2   build_targetz%IntrospectionInterpreter.build_target   s     && 	:d1gs33 	4Aw6 
""(I)>???HJ&&8+J},EFFFK$$Z66	 	 	 	 	 	@ &~h//%~k22 U  U  U  U6<<>>  U  U  UppYgYmYmYoYopppaa>+?+?+A+Aaaa-3ZZ%-H-H`m))mN`!#').2*+T4;m]acj!-t}/F{/SUce e%%''' '')))==??--//''))'**27<<8H$+WbWq+r+rssk & 7..00))++#'
 

  	$r4   c                0   | j         j                            t          d                    }|dk    r|                     |||t
                    S |dk    r|                     |||t                    S |dk    r|                     |||t
                    S d S )Ndefault_librarysharedstaticboth)r	   r   get_value_forr   r  r   r   )r1   rg   rh   rj   r  s        r2   build_libraryz&IntrospectionInterpreter.build_library;  s    -0>>yIZ?[?[\\h&&$$T4GGG(($$T4GGG&&$$T4GGGtr4   c                <    |                      |||t                    S r-   )r  r
   r1   rg   rh   rj   s       r2   r]   z(IntrospectionInterpreter.func_executableE  s      tVZ@@@r4   c                <    |                      |||t                    S r-   )r  r   r  s       r2   rc   z(IntrospectionInterpreter.func_static_libH        tV]CCCr4   c                <    |                      |||t                    S r-   r  r   r  s       r2   ra   z(IntrospectionInterpreter.func_shared_libK  r  r4   c                <    |                      |||t                    S r-   r!  r  s       r2   rd   z&IntrospectionInterpreter.func_both_libN  r  r4   c                <    |                      |||t                    S r-   )r  r   r  s       r2   rb   z+IntrospectionInterpreter.func_shared_moduleQ  s      tV\BBBr4   c                0    |                      |||          S r-   )r  r  s       r2   r_   z%IntrospectionInterpreter.func_libraryT  s    !!$f555r4   c                <    |                      |||t                    S r-   )r  r   r  s       r2   r^   z!IntrospectionInterpreter.func_jarW  s      tVS999r4   c                   d|vrd S |                     d          }t          |t                    r|j        }|dk    r|                     |||t
                    S |dk    r|                     |||t                    S |dk    r|                     |||t                    S |dk    r|                     |||t                    S |dk    r|                     |||          S |dk    r|                     |||t                    S d S )Ntarget_typer!   r$   r&   r'   r#   r"   )
r   rq   r   rt   r  r
   r   r   r  r   )r1   rg   rh   rj   r'  s        r2   func_build_targetz*IntrospectionInterpreter.func_build_targetZ  s!   &&4jj//k>22 	,%+K,&&$$T4DDD,,,$$T4GGG,,,$$T4GGG,,,$$T4GGGI%%%%dD&999E!!$$T4===tr4   c                    | j         dk    S )NrB   r   r1   s    r2   r   z&IntrospectionInterpreter.is_subprojectn  s    "$$r4   c                    |                                   |                                  |                                  |                                  d S r-   )load_root_meson_filesanity_check_astparse_projectrunr*  s    r2   r   z IntrospectionInterpreter.analyzeq  sI    !!###




r4   c                L   | j         j        sdS | j         j        d         }t          |t                    sdS |j        j                                        D ]M\  }}t          |t                    s
J d            |j        dk    rt          |t                    r	|j        c S NdS )zFast path to extract subproject_dir kwarg.
           This is faster than self.parse_project() which also initialize options
           and also calls parse_project() on every subproject.
        Nr   r   rK   )
astlinesrq   r   rh   rj   r   r   rt   r   )r1   rQ   kwvals       r2   extract_subproject_dirz/IntrospectionInterpreter.extract_subproject_dirw  s    
 x~ 	4(.#'<00 	4|*0022 	% 	%GBb&))55:555x+++c:.. %9$$$tr4   Finclude_unknown_argsc                   i }|                                 D ]g\  }}t          |t                    r|                     ||          }||||<   8t          |t          t
          t          t          f          s|r|||<   h|S r-   )r   rq   r   resolve_noderE   r8   intfloat)r1   rj   r6  flattened_kwargsr   r4  resolveds          r2   r   z'IntrospectionInterpreter.flatten_kwargs  s     	, 	,HC#x(( ,,,S2FGG',4$S)C#tS%!899 ,=Q ,(+ %r4   )rD   rE   rF   rE   rG   rE   rH   rI   r*   r+   rJ   r   rK   rE   rL   rM   )rg   r   rh   ri   rj   rk   r7   rl   )r   r   r7   rl   )r   ri   r   r8   r   r   r7   rl   )
rg   r   rh   ri   r   rk   r   r   r7   r   )rg   r   rh   ri   rj   rk   r7   r   )r7   r8   )r7   rl   )r7   r+   )F)rj   rk   r6  r8   r7   rk   )r<   r=   r>   r   r3   r`   r   r[   r   r\   r  r  r]   rc   ra   rd   rb   r_   r^   r(  r   r   r5  r   __classcell__)rf   s   @r2   rA   rA   .   s        =A/3*4*R..'4<@             DGC GC GC GCR	 	 	 	A A A Av v v v6   0R R R Rh   A A A AD D D DD D D DD D D DC C C C6 6 6 6: : : :   (% % % %      &	  	  	  	  	  	  	  	  	 r4   rA   )+
__future__r   r   r   typingr   rB   r   r   r   r   r	   r   buildr
   r   r   r   r   r   interpreterbaser   r   r   r   mparserr   r   r   r   r   r   r   interpreterr   TYPE_CHECKINGr   r   visitorr    r   r)   rA   r?   r4   r2   <module>rF     s   # " " " " "  				     8 8 8 8 8 8 8 8 8 8 8 8             O O O O O O O O O O O O O O + + + + + + : : : : : : : : $ $ $ $ $ $       k k k k k k k k k k k k k k k k k k ' ' ' ' ' '? $######******######   
	 	 	 	 	 	 	 	e  e  e  e  e ~ e  e  e  e  e r4   