
    -Phr                       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	m
Z
 ddl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 ej        r/dd	lmZ dd
lmZ ddlmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( eZ)ne*Z) G d de          Z+ G d de)          Z, G d de
          Z- ej.        de/          Z0 G d de          Z1 G d de1          Z2 G d d          Z3 G d de1e3          Z4 G d de1          Z5 G d d e4          Z6dBd$Z7dCd(Z8dDd.Z9dEd0Z:dFd6Z;dGd=Z< G d> d?e4          Z= G d@ dAe4          Z>dS )H    )annotationsN)Enum   )mlogmesonlib)
clib_langs)LibTypeMachineChoiceMesonExceptionHoldableObjectversion_compare_many)	OptionKey)Compiler)Environment)FeatureCheckBase)CustomTargetIncludeDirsCustomTargetIndexLibTypesStaticLibraryStructuredSourcesExtractedObjectsGeneratedTypes)PkgConfigDefineTypec                      e Zd ZdZdS )DependencyExceptionz3Exceptions raised while trying to find dependenciesN)__name__
__module____qualname____doc__     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/base.pyr   r   &   s        ====r"   r   c                  P    e Zd ZdZej        rddZddZdd
ZddZ	ddZ
ddZdS )MissingCompilerznRepresent a None Compiler - when no tool chain is found.
    replacing AttributeError with DependencyExceptionreturnNonec                    d S Nr!   selfs    r#   __init__zMissingCompiler.__init__1   s    Dr"   optimization_levelstrT.List[str]c                    g S r)   r!   )r+   r-   s     r#   get_optimization_argsz%MissingCompiler.get_optimization_args4       Ir"   
outputnamec                    g S r)   r!   )r+   r3   s     r#   get_output_argszMissingCompiler.get_output_args7   r2   r"   work_direnvironment'Environment'c                    d S r)   r!   )r+   r6   r7   s      r#   sanity_checkzMissingCompiler.sanity_check:   s    4r"   itemT.Anyc                f    |                     d          rt                      t          d          )N__zno toolchain found)
startswithAttributeErrorr   )r+   r;   s     r#   __getattr__zMissingCompiler.__getattr__=   s1    ??4   	# """!"6777r"   boolc                    dS NFr!   r*   s    r#   __bool__zMissingCompiler.__bool__B       ur"   Nr&   r'   )r-   r.   r&   r/   )r3   r.   r&   r/   )r6   r.   r7   r8   r&   r'   )r;   r.   r&   r<   r&   rB   )r   r   r   r    TTYPE_CHECKINGr,   r1   r5   r:   rA   rE   r!   r"   r#   r%   r%   *   s        9 9
 	 	 	 	 		 	 	 		 	 	 		 	 	 	8 8 8 8
     r"   r%   c                  F    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )DependencyMethodsautoz
pkg-configcmakebuiltinsystemextraframework	sysconfigzconfig-tool	sdlconfigzcups-configzpcap-configzlibwmf-configqmakedubN)r   r   r   AUTO	PKGCONFIGCMAKEBUILTINSYSTEMEXTRAFRAMEWORK	SYSCONFIGCONFIG_TOOL	SDLCONFIG
CUPSCONFIG
PCAPCONFIGLIBWMFCONFIGQMAKEDUBr!   r"   r#   rL   rL   F   sT        DIEGF%NIKIJJ"LE
CCCr"   rL   DependencyTypeNamec                     e Zd ZedEd            ZdFd	ZdGdZdHdZdIdZdJdZ	dKdZ
dLdZdLdZdMdNdZdLdZdJdZdOd ZdPd"ZdId#ZdId$ZdQd&ZdId'ZdRd*Zdddddd+dSd2ZdTd5Zdddddddd6dUd?ZdVdAZdWdCZdWdDZdS )X
DependencykwargsT.Dict[str, T.Any]r&   r.   c                    d|vrdS t          |d         t                    st          d          |d         dvrt          d          |d         S )Ninclude_typepreservez,The include_type kwarg must be a string type)rk   rP   
non-systemzDinclude_type may only be one of ['preserve', 'system', 'non-system'])
isinstancer.   r   )clsrg   s     r#   _process_include_type_kwz#Dependency._process_include_type_kwd   sd    '':&0#66 	V%&TUUU.!)MMM%&lmmmn%%r"   	type_namerd   r'   c                v   t          j                    j        | _        d| j         | _        d | _        d | _        d| _        || _        g | _	        g | _
        d | _        g | _        g | _        |                     |          | _        g | _        t#          j        t&                    | _        g | _        d | _        d S )NdepF)uuiduuid4int_idnameversionlanguageis_foundrp   compile_args	link_argsraw_link_argssourcesextra_filesro   rj   ext_depscollectionsdefaultdictlist
d_featuresfeaturechecksfeature_since)r+   rp   rg   s      r#   r,   zDependency.__init__n   s     :<<#$$($$	)-)-")+)+ 7;\^24 99&AA,.=H=TUY=Z=Z9;<@r"   otherobjectrB   c                Z    t          |t                    st          S | j        |j        k    S r)   )rm   rf   NotImplementedrv   )r+   r   s     r#   __eq__zDependency.__eq__   s)    %,, 	"!!x59$$r"   ru   c                    | j         S r)   )rv   r*   s    r#   __hash__zDependency.__hash__   s	    xr"   c                B    d| j         j         d| j         d| j         dS )N< z: >)	__class__r   rw   rz   r*   s    r#   __repr__zDependency.__repr__   s,    J4>*JJTYJJ$-JJJJr"   c                    dS rD   r!   r*   s    r#   is_builtzDependency.is_built   rF   r"   /T.Union[str, mlog.AnsiDecorator, mlog.AnsiText]c                   |                                  st          j        d          S | j        st          j        d          S t          j        t          j        d          dt          j        | j                            S )NNOYESr   )foundr   redrx   greenAnsiTextcyanr*   s    r#   summary_valuezDependency.summary_value   sd    zz|| 	"8D>>!| 	%:e$$$}TZ..TYt|5L5LMMMr"   r/   c                R   | j         dk    rPg }| j        D ]D}|                    d          s|                    d          r|d|dd          z   gz  }>||gz  }E|S | j         dk    r;g }| j        D ]/}|                    d          r|d|dd          z   gz  })||gz  }0|S | j        S )NrP   -Iz/Iz-isystemr   rl      )rj   r{   r?   )r+   	convertedis      r#   get_compile_argszDependency.get_compile_args   s    ((I& % %<<%% %d);); %*qu"4!55II!$II,,I& % %<<
++ %$122,/II!$II  r"   c                    t          t          j        |                                 gd | j        D             R            S )zHGet the compile arguments from this dependency and its sub dependencies.c              3  >   K   | ]}|                                 V  d S r)   )get_all_compile_args.0ds     r#   	<genexpr>z2Dependency.get_all_compile_args.<locals>.<genexpr>   s.      %V%V1a&<&<&>&>%V%V%V%V%V%Vr"   )r   	itertoolschainr   r   r*   s    r#   r   zDependency.get_all_compile_args   sT    IOD$9$9$;$; X%V%V%V%V%VX X X Y Y 	Yr"   NFry   T.Optional[str]rawc                0    |r| j         | j         S | j        S r)   )r}   r|   )r+   ry   r   s      r#   get_link_argszDependency.get_link_args   s#     	&4%1%%~r"   c                    t          t          j        |                                 gd | j        D             R            S )zEGet the link arguments from this dependency and its sub dependencies.c              3  >   K   | ]}|                                 V  d S r)   )get_all_link_argsr   s     r#   r   z/Dependency.get_all_link_args.<locals>.<genexpr>   s.      %S%Sa&9&9&;&;%S%S%S%S%S%Sr"   )r   r   r   r   r   r*   s    r#   r   zDependency.get_all_link_args   sT    IOD$6$6$8$8 U%S%ST]%S%S%SU U U V V 	Vr"   c                    | j         S r)   )rz   r*   s    r#   r   zDependency.found   s
    }r"   CT.List[T.Union[mesonlib.File, GeneratedTypes, 'StructuredSources']]c                    | j         S )zgSource files that need to be added to the target.
        As an example, gtest-all.cc when using GTest.)r~   r*   s    r#   get_sourceszDependency.get_sources   s     |r"   T.List[mesonlib.File]c                    | j         S )z!Mostly for introspection and IDEs)r   r*   s    r#   get_extra_fileszDependency.get_extra_files   s    r"   c                    | j         S r)   )rw   r*   s    r#   get_namezDependency.get_name   s
    yr"   c                "    | j         r| j         S dS )Nunknown)rx   r*   s    r#   get_versionzDependency.get_version   s    < 	<9r"   T.List['IncludeDirs']c                    g S r)   r!   r*   s    r#   get_include_dirszDependency.get_include_dirs       	r"   c                    | j         S r)   )rj   r*   s    r#   get_include_typezDependency.get_include_type   s      r"   compiler
'Compiler'c                    g S r)   r!   )r+   r   s     r#   get_exe_argszDependency.get_exe_args   r   r"   r{   r|   linksincludesr~   r{   r|   r   r   r~   'Dependency'c                    t          d          )a7  Create a new dependency that contains part of the parent dependency.

        The following options can be inherited:
            links -- all link_with arguments
            includes -- all include_directory and -I/-isystem calls
            sources -- any source, header, or generated sources
            compile_args -- any compile args
            link_args -- any link args

        Additionally the new dependency will have the version parameter of its
        parent (if any) and the requested values of any dependencies will be
        added as well.
        z-Unreachable code in partial_dependency called)RuntimeError)r+   r{   r|   r   r   r~   s         r#   get_partial_dependencyz!Dependency.get_partial_dependency   s      JKKKr"   deplist(T.Iterable[T.Callable[[], 'Dependency']]c                l    |D ]0} |            }|j         r| j                            |            dS 1dS )a  Add an internal dependency from a list of possible dependencies.

        This method is intended to make it easier to add additional
        dependencies to another dependency internally.

        Returns true if the dependency was successfully added, false
        otherwise.
        TF)rz   r   append)r+   r   r   rr   s       r#   _add_sub_dependencyzDependency._add_sub_dependency   sQ      	 	A!##C| $$S)))tt ur"   rN   	pkgconfig
configtoolinternalrP   default_valuepkgconfig_definerN   r   r   r   rP   r   r   r   c               0    ||S t          d| d          )Nz#No default provided for dependency z7, which is not pkg-config, cmake, or config-tool based.)r   )r+   rN   r   r   r   rP   r   r   s           r#   get_variablezDependency.get_variable   s?     $  !  #H  #H  #H  #H  I  I  	Ir"   rj   c                f    t          j        |           }|                     d|i          |_        |S )Nrj   )copydeepcopyro   rj   )r+   rj   new_deps      r#   generate_system_dependencyz%Dependency.generate_system_dependency  s1    -%%#<<nl=[\\r"   	recursivec                    | S z)Used as base case for internal_dependencyr!   r+   r   s     r#   get_as_staticzDependency.get_as_static      r"   c                    | S r   r!   r   s     r#   get_as_sharedzDependency.get_as_shared  r   r"   )rg   rh   r&   r.   )rp   rd   rg   rh   r&   r'   )r   r   r&   rB   )r&   ru   r&   r.   rH   )r&   r   )r&   r/   rD   ry   r   r   rB   r&   r/   )r&   r   )r&   r   r&   r   )r   r   r&   r/   )r{   rB   r|   rB   r   rB   r   rB   r~   rB   r&   r   )r   r   r&   rB   rN   r   r   r   r   r   r   r   rP   r   r   r   r   r   r&   r.   )rj   r.   r&   r   )r   rB   r&   rf   )r   r   r   classmethodro   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#   rf   rf   b   sr       & & & [&A A A A,% % % %
   K K K K   N N N N! ! ! !&Y Y Y Y
    
V V V V
      
                ! ! ! !    >C16e05uL L L L L L$     8<Z^37UY/3VZ=AI I I I I I   
        r"   rf   c                       e Zd Z	 d;d< fdZd=d!Zd>d#Zd?d%Zd&d&d&d&d&d&d'd@d*ZdAd+Zdddddddd,dBd5Z	dCd7Z
dDd9ZdDd:Z xZS )EInternalDependencyNrx   r.   incdirsr   r{   r/   r|   	librariesT.List[LibTypes]whole_libraries?T.List[T.Union[StaticLibrary, CustomTarget, CustomTargetIndex]]r~   ET.Sequence[T.Union[mesonlib.File, GeneratedTypes, StructuredSources]]r   T.Sequence[mesonlib.File]r   T.List[Dependency]	variablesT.Dict[str, str]d_module_versionsT.List[T.Union[str, int]]d_import_dirsobjectsT.List['ExtractedObjects']rw   r   c                   t                                          t          d          i            || _        d| _        || _        || _        || _        || _        || _	        t          |          | _        t          |          | _        |	| _        |
| _        || _        |r
|| j        d<   |r
|| j        d<   |r	|| _        d S d S )Nr   Tversionsimport_dirs)superr,   rd   rx   rz   include_directoriesr{   r|   r   r   r   r~   r   r   r   r  r   rw   )r+   rx   r   r{   r|   r   r   r~   r   r   r   r   r   r  rw   r   s                  r#   r,   zInternalDependency.__init__  s     	+J77<<<#* ("".G}},, " 	<*;DOJ' 	;-:DOM* 	DIII	 	r"   memo!T.Dict[int, 'InternalDependency']r&   'InternalDependency'c           	     l   | j                             | j                   }t          |t                    sJ ||t	          |           <   | j                                        D ]Q\  }}|dv r$t          ||t          j        |                     -t          ||t          j	        ||                     R|S )N>   r   r   )
r   __new__rm   r   id__dict__itemssetattrr   r   )r+   r  resultkvs        r#   __deepcopy__zInternalDependency.__deepcopy__/  s    ''77&"455555RXXM'')) 	; 	;DAq44449Q<<00004=D#9#9::::r"   mlog.AnsiDecoratorc                *    t          j        d          S )Nr   )r   r   r*   s    r#   r   z InternalDependency.summary_value:  s     z%   r"   rB   c                l    | j         s| j        s| j        rdS t          d | j        D                       S )NTc              3  >   K   | ]}|                                 V  d S r)   )r   r   s     r#   r   z.InternalDependency.is_built.<locals>.<genexpr>B  s*      77A1::<<777777r"   )r~   r   r   anyr   r*   s    r#   r   zInternalDependency.is_built?  sC    < 	4> 	T-A 	477777777r"   F)r{   r|   r   r   r~   r   r   r   c               &   r| j                                         ng }r| j                                        ng }r| j                                        ng }	r| j                                        ng }
r| j                                        ng }|r| j                                        ng }r| j                                        ng }fd| j        D             }t          | j
        ||||	|
|||| j        g g g | j                  S )Nc           	     D    g | ]}|                                S )r   )r   )r   r   r{   r   r|   r   r~   s     r#   
<listcomp>z=InternalDependency.get_partial_dependency.<locals>.<listcomp>O  sP     H H H45 ..%%w / 0 0 H H Hr"   )r{   r   r|   r   r   r~   r   r  r   r   rx   r   rw   )r+   r{   r|   r   r   r~   r   final_compile_argsfinal_link_argsfinal_librariesfinal_whole_librariesfinal_sourcesfinal_extra_filesfinal_includes
final_depss    `````         r#   r   z)InternalDependency.get_partial_dependencyD  sg    :FMT.3355523<D$.--///"38@$.--///b?D L 4 9 9 ; ; ;"/6>))+++B7BJD,11333<DL166888"H H H H H H H H9=H H H
 "L.*<_.C,j$."bRTVZV_a a 	ar"   c                    | j         S r)   )r  r*   s    r#   r   z#InternalDependency.get_include_dirsW  s    ''r"   r   rN   r   r   r   rP   r   r   r   c               d    | j                             ||          }||S t          d|           )Nz?Could not get an internal variable and no default provided for )r   getr   )	r+   rN   r   r   r   rP   r   r   vals	            r#   r   zInternalDependency.get_variableZ  s=     n  =99?J!"ldh"l"lmmmr"   rf   c                \   ddl m}m}m} t	          j        |           }|j        D ]V}t          ||          rt          d          t          |||f          r#|	                                rt          d          W|xj
        t          j        d|j                  z  c_
        g |_        |S )Nr   )SharedLibraryr   r   zJCannot convert a dependency to link_whole when it contains a SharedLibraryzxCannot convert a dependency to link_whole when it contains a CustomTarget or CustomTargetIndex which is a shared libraryr   )buildr*  r   r   r   r   r   rm   r   links_dynamicallyr   rI   cast)r+   r*  r   r   r   xs         r#   generate_link_whole_dependencyz1InternalDependency.generate_link_whole_dependencyc  s    JJJJJJJJJJ-%%" 	d 	dA!]++ d$ &5 6 6 6A.?@AA daFYFYF[F[ d$ &c d d d 	16*k*1*;$= $= 	=r"   r   c                    t          j         |           }fd| j        D             |_        rd | j        D             |_        |S )Nc                <    g | ]}|                     d           S )staticr'  r   libr   s     r#   r  z4InternalDependency.get_as_static.<locals>.<listcomp>v  '    TTTcSWWXy99TTTr"   c                8    g | ]}|                     d           S T)r   r   rr   s     r#   r  z4InternalDependency.get_as_static.<locals>.<listcomp>x  &    QQQC 1 1$ 7 7QQQr"   r   r   r   r+   r   r   s    ` r#   r   z InternalDependency.get_as_statict  T    )D//TTTTT^TTT 	RQQ4=QQQGr"   c                    t          j         |           }fd| j        D             |_        rd | j        D             |_        |S )Nc                <    g | ]}|                     d           S )sharedr3  r4  s     r#   r  z4InternalDependency.get_as_shared.<locals>.<listcomp>}  r6  r"   c                8    g | ]}|                     d           S r8  )r   r9  s     r#   r  z4InternalDependency.get_as_shared.<locals>.<listcomp>  r:  r"   r;  r<  s    ` r#   r   z InternalDependency.get_as_shared{  r=  r"   r)   )rx   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  rw   r   )r  r	  r&   r
  )r&   r  rH   )r{   rB   r|   rB   r   rB   r   rB   r~   rB   r   rB   r&   r   r   r   )r&   rf   )r   rB   r&   r   )r   r   r   r,   r  r   r   r   r   r   r/  r   r   __classcell__r   s   @r#   r   r     sE        *.      <	 	 	 	! ! ! !
8 8 8 8
 >C16e05u38a a a a a a&( ( ( ( 8<Z^37UY/3VZ=An n n n n n   "          r"   r   c                      e Zd ZddZd	dZdS )
HasNativeKwargrg   rh   c                :    |                      |          | _        d S r)   )get_for_machine_from_kwargsfor_machiner+   rg   s     r#   r,   zHasNativeKwarg.__init__  s    ;;FCCr"   r&   r
   c                ^    |                     dd          rt          j        nt          j        S )NnativeF)r'  r
   BUILDHOSTrI  s     r#   rG  z*HasNativeKwarg.get_for_machine_from_kwargs  s&    &,jj5&A&AY}""}GYYr"   N)rg   rh   )rg   rh   r&   r
   )r   r   r   r,   rG  r!   r"   r#   rE  rE    sF        D D D DZ Z Z Z Z Zr"   rE  c                  f    e Zd Zddd
Zd dZddddddd!dZd"dZd"dZed"d            Z	d#dZ
dS )$ExternalDependencyNrp   rd   r7   r8   rg   rh   ry   r   c                   t                               | ||           || _        || _        d| _        || _        |                    dd           }t          |t                    r|g}|| _	        |                    dd          | _
        |                    dd          | _        |                    d| j        j        j                            t          d                              | _        | j        rt"          j        nt"          j        | _        t          | j        t*                    st-          d          t.                              | |           t1          | j        || j        | j                  | _        d S )	NFrx   requiredTsilentr2  prefer_staticzStatic keyword must be boolean)rf   r,   envrw   rz   ry   r'  rm   r.   version_reqsrQ  rR  coredataoptstoreget_value_forr   r2  r	   STATICPREFER_SHAREDlibtyperB   r   rE  detect_compilerrH  clib_compiler)r+   rp   r7   rg   ry   rU  s         r#   r,   zExternalDependency.__init__  s?   D)V444	 zz)T22lC(( 	*(>L5A

:t44jj511jj48+<+E+S+ST]^mTnTn+o+opp)-Ow~~':O$+t,, 	H%&FGGGf---,TYTEUW[Wdeer"   r&   &T.Union['MissingCompiler', 'Compiler']c                    | j         S r)   )r]  r*   s    r#   get_compilerzExternalDependency.get_compiler  s    !!r"   Fr   r{   rB   r|   r   r   r~   rf   c                   t          j         |           }t          j                    j        |_        |sg |_        |sg |_        |sg |_        |s	 |sg |_        |S r)   )r   rs   rt   ru   rv   r{   r|   r~   r+   r{   r|   r   r   r~   news          r#   r   z)ExternalDependency.get_partial_dependency  sn     ioo*,," 	"!C 	CM 	CK 	 	CK
r"   r.   c                    dS N r!   r*   s    r#   log_detailszExternalDependency.log_details      rr"   c                    dS re  r!   r*   s    r#   log_infozExternalDependency.log_info  rh  r"   c                     dS re  r!   r!   r"   r#   	log_triedzExternalDependency.log_tried  s    rr"   r'   c                   | j         sd S | j        r| j        sd| _         g }|dt          j        | j                  dgz  }|t          t          j        d                    dz   d| j        gz  }t          j        |  | j	        rd| j        d}t          |          d S t          | j        | j                  \  | _         }}| j         sdt          j        | j                  dg}|t          t          j        d                    dz   dt          j        | j                  d	t          j        d
                    d |D                                 gz  }|r$|dd
                    d |D                       gz  }t          j        |  | j	        r0d}t          |                    | j        || j                            d S d S d S )NFrf   found:r   .zUnknown version, but need:zUnknown version, but need Foundz	but need:z, c                    g | ]}d | d 	S 'r!   r   es     r#   r  z5ExternalDependency._check_version.<locals>.<listcomp>  s     6S6S6SAx1xxx6S6S6Sr"   z
; matched:c                    g | ]}d | d 	S rr  r!   rt  s     r#   r  z5ExternalDependency._check_version.<locals>.<listcomp>  s     0I0I0IaQ0I0I0Ir"   z+Invalid version, need {!r} {!r} found {!r}.)rz   rU  rx   r   boldrw   r.   r   logrQ  r   r   normal_cyanjoinformat)r+   	found_msgm	not_foundr   s        r#   _check_versionz!ExternalDependency._check_version  s   } 	F 	<  %24	lDIdi,@,@(KK	c$(4..11C79UW[Whii	)$$= 1KT5FKKKA-a0001 1 )t7HII 2	5} !-ty/C/CX NI#dhtnn"5"5";")4+;DL+I+I;"&)DII6S6S6S6S6S,T,T"U"U"W WI  L!l&*ii0I0I50I0I0I&J&J&L L	Hi((} `I1!((49iQUQ]2^2^___F;	 	  r"   r)   )rp   rd   r7   r8   rg   rh   ry   r   )r&   r^  )r{   rB   r|   rB   r   rB   r   rB   r~   rB   r&   rf   r   rG   )r   r   r   r,   r`  r   rg  rj  staticmethodrl  r  r!   r"   r#   rO  rO    s        f f f f f(" " " " >C16e05u     $          \! ! ! ! ! !r"   rO  c                  6     e Zd Zd fdZdddddd	ddZ xZS )NotFoundDependencyrw   r.   r7   r8   r&   r'   c                    t                                          t          d          i            || _        || _        d| _        d S )Nz	not-foundF)r  r,   rd   rT  rw   rz   )r+   rw   r7   r   s      r#   r,   zNotFoundDependency.__init__  s?    +K88"===	r"   Fr   r{   rB   r|   r   r   r~   'NotFoundDependency'c               h    t          j         |           }t          j                    j        |_        |S r)   )r   rs   rt   ru   rv   rb  s          r#   r   z)NotFoundDependency.get_partial_dependency  s&     ioo*,,"
r"   )rw   r.   r7   r8   r&   r'   )r{   rB   r|   rB   r   rB   r   rB   r~   rB   r&   r  )r   r   r   r,   r   rB  rC  s   @r#   r  r    sk              >C16e05u         r"   r  c                  H     e Zd Z	 dd fdZdd fdZddddddddZ xZS )ExternalLibraryFrw   r.   r|   r/   r7   r8   ry   rR  rB   r&   r'   c                   t                                          t          d          |i |           || _        || _        d| _        |rd| _        || _        |s| j        r=t          j        dt          j	        |          dt          j
        d                     d S t          j        dt          j	        |          dt          j        d                     d S d S )	Nlibraryry   FTLibraryrn  r   r   )r  r,   rd   rw   ry   rz   r|   r   rx  rw  r   r   )r+   rw   r|   r7   ry   rR  r   s         r#   r,   zExternalLibrary.__init__  s    +I66RRZ[[[	  	' DM&DN 	O} ODIdOOXtz%?P?PQQQQQDIdOOXtx~~NNNNN		O 	Or"   Nr   r   c                    | j         dk    r|dk    s|dk    r| j         dk    rg S t                                          ||          S )ad  
        External libraries detected using a compiler must only be used with
        compatible code. For instance, Vala libraries (.vapi files) cannot be
        used with C code, and not all Rust library types can be linked with
        C-like code. Note that C++ libraries *can* be linked with C code with
        a C++ linker (and vice-versa).
        vala)ry   r   )ry   r  r   )r+   ry   r   r   s      r#   r   zExternalLibrary.get_link_args  sU     MV##F(:(:4=F#:#:Iww$$hC$@@@r"   r   r{   r   r   r~   'ExternalLibrary'c               z    t          j         |           }t          j                    j        |_        |sg |_        |S r)   )r   rs   rt   ru   rv   r|   rb  s          r#   r   z&ExternalLibrary.get_partial_dependency  s5    
 ioo*,," 	CM
r"   )F)rw   r.   r|   r/   r7   r8   ry   r.   rR  rB   r&   r'   rD   r   )r{   rB   r|   rB   r   rB   r   rB   r~   rB   r&   r  )r   r   r   r,   r   r   rB  rC  s   @r#   r  r    s        /4O O O O O O OA A A A A A A >C16e05u	 	 	 	 	 	 	 	 	 	r"   r  depsr   r&   c                B   | s|                                  S g }| rg }t          j        |           D ]i}t          |t                    r|                                rt          d          |                    |           |                    |j	                   j|} | |S )Nz*Dependencies must be external dependencies)
r   r   listifyrm   rf   r   r   r   extendr   )r  r$  	next_depsr   s       r#   get_leaf_external_dependenciesr    s     yy{{J
 	!$'' 	) 	)Aa,, X

 X)*VWWWa   QZ((((   r"   libpathsr/   refpathsc                v    t                    dk    rt          |           S dfd}t          | |          S )	zSort <libpaths> according to <refpaths>

    It is intended to be used to sort -L flags returned by pkg-config.
    Pkg-config returns flags in random order which cannot be relied on.
    r   libpathr.   r&   T.Tuple[int, int]c                @   g }D ]Y}	 t           j                            | |g          }n# t          $ r d}Y nw xY w|                    t          |                     Zt          |          }|                    |          }t          |                   |z
  }||fS re  )ospath
commonpath
ValueErrorr   lenmaxindex)r  common_lengthsrefpathcommon_path
max_length	max_indexreversed_max_lengthr  s          r#   key_funczsort_libpaths.<locals>.key_func5  s    &( 	4 	4G!#%7#5#5w6H#I#I ! ! ! !!!#k"2"23333((
"((44	!(9"566C.//s   !+::)key)r  r.   r&   r  )r  r   sorted)r  r  r  s    ` r#   sort_libpathsr  ,  sU     8}}H~~0 0 0 0 0 0 ())))r"   r7   r8   rH  r
   r|   c                ^    d |                      |          D             fd|D             S )zRemove -L<system path> arguments.

    leaving these in will break builds where a user has a version of a library
    in the system path, and a different version not in the system path if they
    want to link against the non-system path version.
    c                    h | ]}d | S )z-Lr!   r   ps     r#   	<setcomp>z'strip_system_libdirs.<locals>.<setcomp>J  s    WWWAxAxxWWWr"   c                    g | ]}|v|	S r!   r!   )r   lexcludes     r#   r  z(strip_system_libdirs.<locals>.<listcomp>K  s#    555!AW$4$4A$4$4$4r"   )get_compiler_system_lib_dirs)r7   rH  r|   r  s      @r#   strip_system_libdirsr  C  sA     XW!I!I+!V!VWWWG5555y5555r"   include_argsc                ^    d |                      |          D             fd|D             S )zRemove -I<system path> arguments.

    leaving these in will break builds where user want dependencies with system
    include-type used in rust.bindgen targets as if will cause system headers
    to not be found.
    c                    h | ]}d | S )r   r!   r  s     r#   r  z+strip_system_includedirs.<locals>.<setcomp>U  s    [[[AxAxx[[[r"   c                    g | ]}|v|	S r!   r!   )r   r   r  s     r#   r  z,strip_system_includedirs.<locals>.<listcomp>V  s#    888!q'7'7A'7'7'7r"   ) get_compiler_system_include_dirs)r7   rH  r  r  s      @r#   strip_system_includedirsr  M  sA     \[!M!Mk!Z!Z[[[G8888|8888r"   possibleT.Iterable[DependencyMethods]rg   rh   T.List[DependencyMethods]c                   |                     dd          }t          |t                    r|gS |d t          D             vrt          d|d          t          |          }|t          j        u r	 |t          j        t          j        t          j        t          j        fv rt          j        }|t          j	        u rt          j        }|t          j
        k    rt          |           }ng|| v r|g}n_t          d                    |j        t          j        d t          j
        gt          |           z   D                                           |S )NmethodrM   c                    g | ]	}|j         
S r!   valuert  s     r#   r  z%process_method_kw.<locals>.<listcomp>]  s    999!ag999r"   zmethod z is invalidz8Unsupported detection method: {}, allowed methods are {}c                    g | ]	}|j         
S r!   r  )r   r.  s     r#   r  z%process_method_kw.<locals>.<listcomp>|  s    !]!]!]a!'!]!]!]r"   )r'  rm   rL   r   r]   r^   r_   r`   ra   rb   rV   r   r{  r  r   format_list)r  rg   r  methodss       r#   process_method_kwr  X  sq   .4jj6.J.JF&+,, x99'899999!"AF"A"A"ABBBv&&F "... 	 #-/@/K#.0A0NP P P #."((( #. "'''x..	8		(!FMM !]!]4E4J3KdS[nn3\!]!]!]^^` `a a 	a
 Nr"   rw   r.   rT  ry   r   r^  c                <   |j         j        |         }|rW||vrK|                                 dz   }t          |                    |                                                    ||         S t
          D ]}	 ||         c S # t          $ r Y w xY wt                      S )z8Given a language and environment find the compiler used.zI requires a {0} compiler, but {0} is not in the list of project languages)rV  	compilers
capitalizer   r{  r   KeyErrorr%   )rw   rT  rH  ry   r  r}  langs          r#   r\  r\    s     &{3I  9$$!! %> >A%ahhx/B/B/D/D&E&EFFF"" 	 	D &&&   s   6B  
BBc                  @     e Zd ZdZ	 dd fdZedd            Z xZS )SystemDependencyz-Dependency base for System type dependencies.Nrw   r.   rT  r8   rg   rh   ry   r   r&   r'   c                z    t                                          t          d          |||           || _        d S )NrP   r  r  r,   rd   rw   r+   rw   rT  rg   ry   r   s        r#   r,   zSystemDependency.__init__  s8    +H55sFXVVV			r"   c                     dS )NrP   r!   r!   r"   r#   rl  zSystemDependency.log_tried  s    xr"   r)   
rw   r.   rT  r8   rg   rh   ry   r   r&   r'   r   r   r   r   r    r,   r  rl  rB  rC  s   @r#   r  r    sm        77 .2      
    \    r"   r  c                  @     e Zd ZdZ	 dd fdZedd            Z xZS )BuiltinDependencyz.Dependency base for Builtin type dependencies.Nrw   r.   rT  r8   rg   rh   ry   r   r&   r'   c                z    t                                          t          d          |||           || _        d S )NrO   r  r  r  s        r#   r,   zBuiltinDependency.__init__  s8    +I66VhWWW			r"   c                     dS )NrO   r!   r!   r"   r#   rl  zBuiltinDependency.log_tried  s    yr"   r)   r  r   r  rC  s   @r#   r  r    sm        88 .2      
    \    r"   r  )r  r   r&   r   )r  r/   r  r/   r&   r/   )r7   r8   rH  r
   r|   r/   r&   r/   )r7   r8   rH  r
   r  r/   r&   r/   )r  r  rg   rh   r&   r  )
rw   r.   rT  r8   rH  r
   ry   r   r&   r^  )?
__future__r   r   r  r   r   typingrI   rs   enumr   rf  r   r   r  r   r	   r
   r   r   r   optionsr   rJ   compilers.compilersr   r7   r   interpreterbaser   r+  r   r   r   r   r   r   r   r   interpreter.type_checkingr   _MissingCompilerBaser   r   r%   rL   NewTyper.   rd   rf   r   rE  rO  r  r  r  r  r  r  r  r\  r  r  r!   r"   r#   <module>r     s*   # " " " " "  				                            " " " " " " c c c c c c c c c c c c c c       ? "......))))))222222                    @?????#!> > > > >. > > >    *   8       2 QY3S99 l l l l l l l l\p p p p p p p pdZ Z Z Z Z Z Z ZV V V V V^ V V Vr       ( ( ( ( (( ( ( (V    * * * *.6 6 6 6	9 	9 	9 	9& & & &P   ,    )       *     r"   