
    <hTs                    p   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  SSKJrJr  SSKJr  SSKJrJrJrJrJr  SSKJr  \R.                  (       a/  SS	KJr  SS
KJr  SSKJr  SSKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(  \r)O\*r) " S S\5      r+ " S S\)5      r, " S S\
5      r-\R\                  " S\/5      r0 " S S\5      r1 " S S\15      r2 " S S5      r3 " S S\1\35      r4 " S S\15      r5 " S S \45      r6S+S! jr7S,S" jr8S-S# jr9S.S$ jr:S/S% jr;    S0S& jr< " S' S(\45      r= " S) S*\45      r>g)1    )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                      \ rS rSrSrSrg)DependencyException&   z3Exceptions raised while trying to find dependencies N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       }/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/dependencies/base.pyr   r   &   s    =r%   r   c                  v    \ rS rSrSr\R                  (       a  SS jrSS jrSS jr	SS jr
SS jrSS jrS	rg
)MissingCompiler*   zjRepresent a None Compiler - when no tool chain is found.
replacing AttributeError with DependencyExceptionc                    g Nr   selfs    r&   __init__MissingCompiler.__init__1   s    r%   c                    / $ r+   r   )r-   optimization_levels     r&   get_optimization_args%MissingCompiler.get_optimization_args4       Ir%   c                    / $ r+   r   )r-   
outputnames     r&   get_output_argsMissingCompiler.get_output_args7   r4   r%   c                    g r+   r   )r-   work_direnvironments      r&   sanity_checkMissingCompiler.sanity_check:   s    r%   c                X    UR                  S5      (       a
  [        5       e[        S5      e)N__zno toolchain found)
startswithAttributeErrorr   )r-   items     r&   __getattr__MissingCompiler.__getattr__=   s&    ??4   ""!"677r%   c                    gNFr   r,   s    r&   __bool__MissingCompiler.__bool__B       r%   r   NreturnNone)r1   strrK   T.List[str])r6   rM   rK   rN   )r:   rM   r;   'Environment'rK   rL   )rB   rM   rK   zT.AnyrK   bool)r   r    r!   r"   r#   TTYPE_CHECKINGr.   r2   r7   r<   rC   rG   r$   r   r%   r&   r(   r(   *   s.    9
 					8
r%   r(   c                  L    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrg)DependencyMethodsF   autoz
pkg-configcmakebuiltinsystemextraframework	sysconfigzconfig-tool	sdlconfigzcups-configzpcap-configzlibwmf-configqmakedubr   N)r   r    r!   r"   AUTO	PKGCONFIGCMAKEBUILTINSYSTEMEXTRAFRAMEWORK	SYSCONFIGCONFIG_TOOL	SDLCONFIG
CUPSCONFIG
PCAPCONFIGLIBWMFCONFIGQMAKEDUBr$   r   r%   r&   rU   rU   F   sH    DIEGF%NIKIJJ"LE
Cr%   rU   DependencyTypeNamec                  r   \ rS rSr\S!S j5       rS"S jrS#S jrS$S jrS%S jr	S&S jr
S&S jrS'S	 jrS(S
 jrS(S jrS)S*S jjrS(S jrS&S jrS+S jrS,S jrS%S jrS%S jrS-S jrS%S jrS.S jrSSSSSS.         S/S jjrS0S jrSSSSSSSS.           S1S jjrS2S jrS3S jrS3S jrS rg)4
Dependencyb   c                    SU;  a  g[        US   [        5      (       d  [        S5      eUS   S;  a  [        S5      eUS   $ )Ninclude_typepreservez,The include_type kwarg must be a string type)rt   rZ   
non-systemzDinclude_type may only be one of ['preserve', 'system', 'non-system'])
isinstancerM   r   )clskwargss     r&   _process_include_type_kw#Dependency._process_include_type_kwd   sP    '&0#66%&TUU.!)MM%&lmmn%%r%   c                   [         R                  " 5       R                  U l        SU R                   3U l        S U l        S U l        SU l        Xl        / U l	        / U l
        S U l        / U l        / U l        U R                  U5      U l        / U l        ["        R$                  " [&        5      U l        / U l        S U l        g )NdepF)uuiduuid4int_idnameversionlanguageis_found	type_namecompile_args	link_argsraw_link_argssourcesextra_filesry   rs   ext_depscollectionsdefaultdictlist
d_featuresfeaturechecksfeature_since)r-   r   rx   s      r&   r.   Dependency.__init__n   s     ::<##$(($	)-)-")+)+ 7;\^24 99&A,.=H=T=TUY=Z9;<@r%   c                j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ r+   )rv   rp   NotImplementedr   )r-   others     r&   __eq__Dependency.__eq__   s(    %,,!!xx599$$r%   c                    U R                   $ r+   )r   r,   s    r&   __hash__Dependency.__hash__   s    xxr%   c                j    SU R                   R                   SU R                   SU R                   S3$ )N< z: >)	__class__r   r   r   r,   s    r&   __repr__Dependency.__repr__   s0    4>>**+1TYYKr$--JJr%   c                    grF   r   r,   s    r&   is_builtDependency.is_built   rI   r%   c                V    U R                   c  gU R                   SU R                   3:g  $ )NFr|   )r   r   r,   s    r&   is_namedDependency.is_named   s)    99yyc$((,,,r%   c                :   U R                  5       (       d  [        R                  " S5      $ U R                  (       d  [        R                  " S5      $ [        R
                  " [        R                  " S5      S[        R                  " U R                  5      5      $ )NNOYESr   )foundr   redr   greenAnsiTextcyanr,   s    r&   summary_valueDependency.summary_value   sZ    zz||88D>!||::e$$}}TZZ.TYYt||5LMMr%   c                   U R                   S:X  aV  / nU R                   HB  nUR                  S5      (       d  UR                  S5      (       a  USUSS  -   /-  nM=  X/-  nMD     U$ U R                   S:X  a@  / nU R                   H,  nUR                  S5      (       a  USUSS  -   /-  nM'  X/-  nM.     U$ U R                  $ )NrZ   -Iz/Iz-isystemr   ru      )rs   r   r@   )r-   	convertedis      r&   get_compile_argsDependency.get_compile_args   s    (I&&<<%%d););*qu"4!55I$I	 '
 ,I&&<<
++$12,/I$I	 '
    r%   c                    [        [        R                  " U R                  5       /S U R                   5       Q76 5      $ )zHGet the compile arguments from this dependency and its sub dependencies.c              3  @   #    U  H  oR                  5       v   M     g 7fr+   )get_all_compile_args.0ds     r&   	<genexpr>2Dependency.get_all_compile_args.<locals>.<genexpr>   s     %V1&<&<&>&>   )r   	itertoolschainr   r   r,   s    r&   r   Dependency.get_all_compile_args   s:    IOOD$9$9$; X%V%VX Y 	Yr%   NFc                Z    U(       a  U R                   b  U R                   $ U R                  $ r+   )r   r   )r-   r   raws      r&   get_link_argsDependency.get_link_args   s&    4%%1%%%~~r%   c                    [        [        R                  " U R                  5       /S U R                   5       Q76 5      $ )zEGet the link arguments from this dependency and its sub dependencies.c              3  @   #    U  H  oR                  5       v   M     g 7fr+   )get_all_link_argsr   s     r&   r   /Dependency.get_all_link_args.<locals>.<genexpr>   s     %S]&9&9&;&;]r   )r   r   r   r   r   r,   s    r&   r   Dependency.get_all_link_args   s:    IOOD$6$6$8 U%ST]]%SU V 	Vr%   c                    U R                   $ r+   )r   r,   s    r&   r   Dependency.found   s    }}r%   c                    U R                   $ )z_Source files that need to be added to the target.
As an example, gtest-all.cc when using GTest.)r   r,   s    r&   get_sourcesDependency.get_sources   s     ||r%   c                    U R                   $ )z!Mostly for introspection and IDEs)r   r,   s    r&   get_extra_filesDependency.get_extra_files   s    r%   c                    U R                   $ r+   r   r,   s    r&   get_nameDependency.get_name   s    yyr%   c                >    U R                   (       a  U R                   $ g)Nunknown)r   r,   s    r&   get_versionDependency.get_version   s    <<<<r%   c                    / $ r+   r   r,   s    r&   get_include_dirsDependency.get_include_dirs       	r%   c                    U R                   $ r+   )rs   r,   s    r&   get_include_typeDependency.get_include_type   s       r%   c                    / $ r+   r   )r-   compilers     r&   get_exe_argsDependency.get_exe_args   r   r%   r   r   linksincludesr   c                   [        S5      e)a  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_dependency!Dependency.get_partial_dependency   s      JKKr%   c                    U H8  nU" 5       nUR                   (       d  M  U R                  R                  U5          g   g)zAdd 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)r   r   append)r-   deplistr   r|   s       r&   _add_sub_dependencyDependency._add_sub_dependency   s8     A#C|||$$S)	 
 r%   rX   	pkgconfig
configtoolinternalrZ   default_valuepkgconfig_definec               ,    Ub  U$ [        SU < S35      e)Nz#No default provided for dependency z7, which is not pkg-config, cmake, or config-tool based.)r   )r-   rX   r   r   r   rZ   r   r   s           r&   get_variableDependency.get_variable   s3     $  !$Gx  PG  #H  I  	Ir%   c                b    [         R                  " U 5      nU R                  SU05      Ul        U$ )Nrs   )copydeepcopyry   rs   )r-   rs   new_deps      r&   generate_system_dependency%Dependency.generate_system_dependency  s-    --%#<<nl=[\r%   c                    U $ z)Used as base case for internal_dependencyr   r-   	recursives     r&   get_as_staticDependency.get_as_static      r%   c                    U $ r  r   r  s     r&   get_as_sharedDependency.get_as_shared  r
  r%   )r   r   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   )rx   T.Dict[str, T.Any]rK   rM   )r   rn   rx   r  rK   rL   )r   objectrK   rQ   )rK   r   rK   rM   rP   )rK   z/T.Union[str, mlog.AnsiDecorator, mlog.AnsiText])rK   rN   rF   r   T.Optional[str]r   rQ   rK   rN   )rK   zCT.List[T.Union[mesonlib.File, GeneratedTypes, 'StructuredSources']])rK   zT.List[mesonlib.File]rK   T.List['IncludeDirs'])r   z
'Compiler'rK   rN   )r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   rK   'Dependency')r   z(T.Iterable[T.Callable[[], 'Dependency']]rK   rQ   rX   r  r   r  r   r  r   r  rZ   r  r   r  r   r   rK   rM   )rs   rM   rK   r  )r  rQ   rK   rp   ) r   r    r!   r"   classmethodry   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&   rp   rp   b   s(   & &A,%
K-
N!&Y

V

 ! >C16e05uL*.L?CL)-L@DLQ]L$  8<Z^37UY/3VZ=AI!0ICRI,IDSI (;I GJI
r%   rp   c                    ^  \ rS rSr S                     SU 4S jjjrSS jrSS jrSS jrSSSSSSS.           SS	 jjrSS
 jr	SSSSSSSS.           SS jjr
SS jrSS jrSS jrSrU =r$ )InternalDependencyi  Nc                b  > [         TU ]  [        S5      0 5        Xl        SU l        X l        X0l        X@l        XPl        X`l	        [        U5      U l        [        U5      U l        Xl        Xl        Xl        U(       a  XR                   S'   U(       a  XR                   S'   U(       a  Xl        g g )Nr   Tversionsimport_dirs)superr.   rn   r   r   include_directoriesr   r   	librarieswhole_librariesr   r   r   r   	variablesobjectsr   r   )r-   r   incdirsr   r   r  r   r   r   r   r!  d_module_versionsd_import_dirsr"  r   r   s                  r&   r.   InternalDependency.__init__  s     	+J7<#* ("".G}, "*;OOJ'-:OOM*I r%   c           	     n   U R                   R                  U R                   5      n[        U[        5      (       d   eX![	        U 5      '   U R
                  R                  5        HM  u  p4US;   a"  [        X#[        R                  " U5      5        M-  [        X#[        R                  " XA5      5        MO     U$ )N>   r  r   )
r   __new__rv   r  id__dict__itemssetattrr   r   )r-   memoresultkvs        r&   __deepcopy__InternalDependency.__deepcopy__4  s    ''7&"45555RXMM'')DA44499Q<04==#9:	 *
 r%   c                .    [         R                  " S5      $ )Nr   )r   r   r,   s    r&   r    InternalDependency.summary_value?  s     zz%  r%   c                    U R                   (       d"  U R                  (       d  U R                  (       a  g[        S U R                   5       5      $ )NTc              3  @   #    U  H  oR                  5       v   M     g 7fr+   )r   r   s     r&   r   .InternalDependency.is_built.<locals>.<genexpr>G  s     7A::<<r   )r   r  r   anyr   r,   s    r&   r   InternalDependency.is_builtD  s/    <<4>>T-A-A7777r%   F)r   r   r   r   r   r   c                  U(       a  U R                   R                  5       O/ nU(       a  U R                  R                  5       O/ nU(       a  U R                  R                  5       O/ n	U(       a  U R                  R                  5       O/ n
U(       a  U R
                  R                  5       O/ nU(       a  U R                  R                  5       O/ nU(       a  U R                  R                  5       O/ nU R                   Vs/ s H  nUR                  XUXES9PM     nn[        U R                  XXU
XXR                  / / / U R                  5      $ s  snf )Nr   )r   r   r   r  r   r   r   r  r   r   r  r   r!  r   )r-   r   r   r   r   r   r   final_compile_argsfinal_link_argsfinal_librariesfinal_whole_librariesfinal_sourcesfinal_extra_filesfinal_includesr   
final_depss                   r&   r   )InternalDependency.get_partial_dependencyI  s)    :FT..33523<$..--/"38$..--/b?D 4 4 9 9 ;"/6))+B7BD,,113<D11668" :>H9FA ..%% / 09F 	 H "LL..Cj.."bRTVZV_V_a 	aHs   Ec                    U R                   $ r+   )r  r,   s    r&   r   #InternalDependency.get_include_dirs\  s    '''r%   r   c               `    U R                   R                  XF5      nUb  U$ [        SU < 35      e)Nz?Could not get an internal variable and no default provided for )r!  getr   )	r-   rX   r   r   r   rZ   r   r   vals	            r&   r   InternalDependency.get_variable_  s7     nn  9?J!$cdhck"lmmr%   c                   SSK JnJnJn  [        R
                  " U 5      nUR                   HR  n[        XQ5      (       a  [        S5      e[        XRU45      (       d  M2  UR                  5       (       d  MI  [        S5      e   U=R                  [        R                  " SUR                  5      -  sl
        / Ul        U$ )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 library?T.List[T.Union[StaticLibrary, CustomTarget, CustomTargetIndex]])buildrK  r   r   r   r   r  rv   r   links_dynamicallyr   rR   cast)r-   rK  r   r   r  xs         r&   generate_link_whole_dependency1InternalDependency.generate_link_whole_dependencyh  s    JJ--%""A!++$ &5 6 6A.?@AAaFYFYF[F[$ &c d d # 	166*k*1*;*;$= 	=r%   c                   [         R                   " U 5      nU R                   Vs/ s H  o3R                  SU5      PM     snUl        U(       a0  U R                   Vs/ s H  oDR	                  S5      PM     snUl        U$ s  snf s  snf )NstaticT)r   r  rG  r   r  r-   r  r  libr|   s        r&   r   InternalDependency.get_as_staticy  h    ))D/EI^^T^cWWXy9^TCG==Q=C 1 1$ 7=QG UQ   BBc                   [         R                   " U 5      nU R                   Vs/ s H  o3R                  SU5      PM     snUl        U(       a0  U R                   Vs/ s H  oDR	                  S5      PM     snUl        U$ s  snf s  snf )NsharedT)r   r  rG  r   r  rU  s        r&   r   InternalDependency.get_as_shared  rX  rY  )r   r   r   r  r   r  r   r   r"  r   r!  r   r   r+   )r   rM   r#  r  r   rN   r   rN   r  zT.List[LibTypes]r   rL  r   zET.Sequence[T.Union[mesonlib.File, GeneratedTypes, StructuredSources]]r   zT.Sequence[mesonlib.File]r   T.List[Dependency]r!  zT.Dict[str, str]r$  zT.List[T.Union[str, int]]r%  r  r"  zT.List['ExtractedObjects']r   r  )r-  z!T.Dict[int, 'InternalDependency']rK   z'InternalDependency')rK   zmlog.AnsiDecoratorrP   )r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   rK   r  r  r  )rK   rp   )r  rQ   rK   r  )r   r    r!   r"   r.   r1  r   r   r   r   r   rQ  r  r  r$   __classcell__r   s   @r&   r  r    sV    *.', #b `	
 8 . ;K %> Od 5 ' <	!
8
 >C16e05u38a*.a?Ca)-a@Da -1a >Pa&( 8<Z^37UY/3VZ=An!0nCRn,nDSn (;n GJn" r%   r  c                  (    \ rS rSrSS jrSS jrSrg)HasNativeKwargi  c                0    U R                  U5      U l        g r+   )get_for_machine_from_kwargsfor_machiner-   rx   s     r&   r.   HasNativeKwarg.__init__  s    ;;FCr%   c                p    UR                  SS5      (       a  [        R                  $ [        R                  $ )NnativeF)rG  r
   BUILDHOSTre  s     r&   rc  *HasNativeKwarg.get_for_machine_from_kwargs  s)    &,jj5&A&A}""Y}GYGYYr%   )rd  N)rx   r  )rx   r  rK   r
   )r   r    r!   r"   r.   rc  r$   r   r%   r&   ra  ra    s    DZr%   ra  c                      \ rS rSrSSS jjrSS jrSSSSSS.         SS jjrSS jrSS	 jr\	SS
 j5       r
SS jrSrg)ExternalDependencyi  Nc                   [         R                  XU5        X l        Xl        SU l        X@l        UR                  SS 5      n[        U[        5      (       a  U/nXPl	        UR                  SS5      U l
        UR                  SS5      U l        UR                  SU R                  R                  R                  R                  [        S5      5      5      U l        U R                   (       a  ["        R$                  O["        R&                  U l        [        U R                   [*        5      (       d  [-        S5      e[.        R                  X5        [1        U R                  X R2                  U R
                  5      U l        g )	NFr   requiredTsilentrT  prefer_staticzStatic keyword must be boolean)rp   r.   envr   r   r   rG  rv   rM   version_reqsro  rp  coredataoptstoreget_value_forr   rT  r	   STATICPREFER_SHAREDlibtyperQ   r   ra  detect_compilerrd  clib_compiler)r-   r   r;   rx   r   rs  s         r&   r.   ExternalDependency.__init__  s   DV4	 zz)T2lC(((>L5A

:t4jj51jj488+<+<+E+E+S+ST]^mTn+op)-w~~':O:O$++t,,%&FGG-,TYYEUEUW[WdWder%   c                    U R                   $ r+   )r{  r,   s    r&   get_compilerExternalDependency.get_compiler  s    !!!r%   Fr   c                   [         R                   " U 5      n[        R                  " 5       R                  Ul        U(       d  / Ul        U(       d  / Ul        U(       d  / Ul        U(       d   U(       d  / Ul        U$ r+   )r   r}   r~   r   r   r   r   r   r-   r   r   r   r   r   news          r&   r   )ExternalDependency.get_partial_dependency  sX     iio**,""!CCMCKCK
r%   c                    gN r   r,   s    r&   log_detailsExternalDependency.log_details      r%   c                    gr  r   r,   s    r&   log_infoExternalDependency.log_info  r  r%   c                     gr  r   r   r%   r&   	log_triedExternalDependency.log_tried  s    r%   c                   U R                   (       d  g U R                  (       Ga  U R                  (       d  SU l         / nUS[        R                  " U R
                  5      S/-  nU[        [        R                  " S5      5      S-   SU R                  /-  n[        R                  " U6   U R                  (       a  SU R                  < S3n[        U5      eg [        U R                  U R                  5      u  U l         p4U R                   (       Gd+  S[        R                  " U R
                  5      S/nU[        [        R                  " S5      5      S-   S[        R                  " U R                  5      S	[        R                  " S
R                  U Vs/ s H	  nSU S3PM     sn5      5      /-  nU(       a+  USS
R                  U Vs/ s H	  nSU S3PM     sn5      /-  n[        R                  " U6   U R                  (       a1  Sn[        UR                  U R
                  X0R                  5      5      eg g g s  snf s  snf )NFrp   found:r   .zUnknown version, but need:zUnknown version, but need Foundz	but need:z, 'z
; matched:z+Invalid version, need {!r} {!r} found {!r}.)r   rs  r   r   boldr   rM   r   logro  r   r   normal_cyanjoinformat)r-   	found_msgm	not_foundr   es         r&   _check_version!ExternalDependency._check_version  s   }}<< %24	lDIIdii,@(KK	c$((4.1C79UW[WhWhii	)$==4T5F5F4IKA-a00 ! )t7H7HI 2	}}}!-tyy/CX NI#dhhtn"5";")4+;+;DLL+I;"&))DII6SA1#Qx6S,T"U"W WI !l&*ii50I5a1QCq50I&J&L L	HHi(}}I1!((499iQ]Q]2^__ %! ( 7T 1Js   H?I)
r{  rr  r   r   ry  r   ro  rp  rT  rs  r+   )r   rn   r;   rO   rx   r  r   r  )rK   &T.Union['MissingCompiler', 'Compiler'])r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   rK   rp   r  rJ   )r   r    r!   r"   r.   r~  r   r  r  staticmethodr  r  r$   r   r%   r&   rm  rm    sm    f(" >C16e05u*.?C)-@DQ[$  !r%   rm  c                  X   ^  \ rS rSrSU 4S jjrSSSSSS.         SS jjrSrU =r$ )	NotFoundDependencyi  c                ^   > [         TU ]  [        S5      0 5        X l        Xl        SU l        g )Nz	not-foundF)r  r.   rn   rr  r   r   )r-   r   r;   r   s      r&   r.   NotFoundDependency.__init__  s)    +K8"=	r%   Fr   c               z    [         R                   " U 5      n[        R                  " 5       R                  Ul        U$ r+   )r   r}   r~   r   r   r  s          r&   r   )NotFoundDependency.get_partial_dependency  s)     iio**,""
r%   )rr  r   r   )r   rM   r;   rO   rK   rL   )r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   rK   z'NotFoundDependency')r   r    r!   r"   r.   r   r$   r^  r_  s   @r&   r  r    sJ     >C16e05u*.?C)-@DQe r%   r  c                  |   ^  \ rS rSr S     S	U 4S jjjrS
SU 4S jjjrSSSSSS.         SS jjrSrU =r$ )ExternalLibraryi  Fc                  > [         TU ]  [        S5      U0 US9  Xl        X@l        SU l        U(       a  SU l        X l        U(       d  U R
                  (       aB  [        R                  " S[        R                  " U5      S[        R                  " S5      5        g [        R                  " S[        R                  " U5      S[        R                  " S5      5        g g )	Nlibraryr   FTLibraryr  r   r   )r  r.   rn   r   r   r   r   r   r  r  r   r   )r-   r   r   r;   r   rp  r   s         r&   r.   ExternalLibrary.__init__  s    +I6RRZ[	  DM&N}}DIIdOXtzz%?PQDIIdOXtxx~N	 r%   c                z   > U R                   S:X  a  US:w  d  US:X  a  U R                   S:w  a  / $ [        TU ]	  XS9$ )a4  
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)r   r   )r   r  r   )r-   r   r   r   s      r&   r   ExternalLibrary.get_link_args  sC     MMV#F(:4==F#:Iw$h$@@r%   r   c                   [         R                   " U 5      n[        R                  " 5       R                  Ul        U(       d  / Ul        U$ r+   )r   r}   r~   r   r   r   r  s          r&   r   &ExternalLibrary.get_partial_dependency  s3    
 iio**,""CM
r%   )r   r   r   r   )F)r   rM   r   rN   r;   rO   r   rM   rp  rQ   rK   rL   rF   r  )r   rQ   r   rQ   r   rQ   r   rQ   r   rQ   rK   z'ExternalLibrary')	r   r    r!   r"   r.   r   r   r$   r^  r_  s   @r&   r  r    s{    /4OO(,O9=O OA A >C16e05u	*.	?C	)-	@D	Qb	 	r%   r  c                \   U (       d  U R                  5       $ / nU (       a  / n[        R                  " U 5       Hd  n[        U[        5      (       a  UR                  5       (       a  [        S5      eUR                  U5        UR                  UR                  5        Mf     Un U (       a  M  U$ )Nz*Dependencies must be external dependencies)
r   r   listifyrv   rp   r   r   r   extendr   )depsrB  	next_depsr   s       r&   get_leaf_external_dependenciesr  !  s    yy{J
	!!$'Aa,,

)*VWWa QZZ(	 (
  $ r%   c                Z   ^ [        T5      S:X  a  [        U 5      $ SU4S jjn[        XS9$ )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   c                  > / nT H>  n [         R                  R                  X/5      nUR	                  [        U5      5        M@     [        U5      nUR                  U5      n[        TU   5      U-
  nXV4$ ! [         a    Sn N\f = fr  )ospath
commonpath
ValueErrorr   lenmaxindex)libpathcommon_lengthsrefpathcommon_path
max_length	max_indexreversed_max_lengthrefpathss          r&   key_funcsort_libpaths.<locals>.key_func:  s    &(G!#%77#5#5w6H#I !!#k"23   (
"((4	!(9"56C//  ! !s    A88BB)key)r  rM   rK   zT.Tuple[int, int])r  r   sorted)libpathsr  r  s    ` r&   sort_libpathsr  1  s-     8}H~0 ())r%   c                    U R                  U5       Vs1 s H  nSU 3iM
     nnU Vs/ s H  oUU;  d  M
  UPM     sn$ s  snf s  snf )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.
z-L)get_compiler_system_lib_dirs)r;   rd  r   pexcludels         r&   strip_system_libdirsr  H  sN     "-!I!I+!VW!VAA3x!VGW 5y!W$4Ay55 X5   ?	AAc                    U R                  U5       Vs1 s H  nSU 3iM
     nnU Vs/ s H  oUU;  d  M
  UPM     sn$ s  snf s  snf )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.
r   ) get_compiler_system_include_dirs)r;   rd  include_argsr  r  r   s         r&   strip_system_includedirsr  R  sN     "-!M!Mk!Z[!ZAA3x!ZG[#8|!'7A|88 \8r  c                ,   UR                  SS5      n[        U[        5      (       a  U/$ U[         Vs/ s H  o3R                  PM     sn;  a  [	        SU< S35      e[        U5      nU[        R
                  L a   U[        R                  [        R                  [        R                  [        R                  4;   a  [        R
                  nU[        R                  L a  [        R
                  nU[        R                  :X  a  [        U 5      nU$ X ;   a  U/nU$ [	        SR                  UR                  [        R                  " [        R                  /[        U 5      -    Vs/ s H  oUR                  PM     sn5      5      5      es  snf s  snf )NmethodrW   zmethod z is invalidz8Unsupported detection method: {}, allowed methods are {})rG  rv   rU   valuer   rg   rh   ri   rj   rk   rl   r`   r   r  r   format_list)possiblerx   r  r  methodsrP  s         r&   process_method_kwr  ]  ss   .4jj6.JF&+,,x'89'8!gg'899!GF:["ABBv&F "... 	 #--/@/K/K#..0A0N0NP P #.."((( #.. "'''x. N 
	( N "FMM  4E4J4J3KdS[n3\!]3\a''3\!]^`a 	a9 :> "^s   F(Fc                $   UR                   R                  U   nU(       aD  X4;  a;  U R                  5       S-   n[        UR	                  UR                  5       5      5      eXC   $ [
         H  n XF   s  $    [        5       $ ! [         a     M#  f = f)z8Given a language and environment find the compiler used.zI requires a {0} compiler, but {0} is not in the list of project languages)rt  	compilers
capitalizer   r  r   KeyErrorr(   )r   rr  rd  r   r  r  langs          r&   rz  rz    s     &&{3I $! %> >A%ahhx/B/B/D&EFF""D & 
   s   /B
BBc                  P   ^  \ rS rSrSr S   SU 4S jjjr\SS j5       rSrU =r	$ )	SystemDependencyi  z-Dependency base for System type dependencies.c                B   > [         TU ]  [        S5      X#US9  Xl        g )NrZ   r  r  r.   rn   r   r-   r   rr  rx   r   r   s        r&   r.   SystemDependency.__init__  s"    +H5sXV	r%   c                     g)NrZ   r   r   r%   r&   r  SystemDependency.log_tried  s    r%   r   r+   
r   rM   rr  rO   rx   r  r   r  rK   rL   r  
r   r    r!   r"   r#   r.   r  r  r$   r^  r_  s   @r&   r  r    s9    7 .2*6: 
  r%   r  c                  P   ^  \ rS rSrSr S   SU 4S jjjr\SS j5       rSrU =r	$ )	BuiltinDependencyi  z.Dependency base for Builtin type dependencies.c                B   > [         TU ]  [        S5      X#US9  Xl        g )NrY   r  r  r  s        r&   r.   BuiltinDependency.__init__  s"    +I6hW	r%   c                     g)NrY   r   r   r%   r&   r  BuiltinDependency.log_tried  s    r%   r   r+   r  r  r  r_  s   @r&   r  r    s9    8 .2*6: 
  r%   r  )r  r]  rK   r]  )r  rN   r  rN   rK   rN   )r;   rO   rd  r
   r   rN   rK   rN   )r;   rO   rd  r
   r  rN   rK   rN   )r  zT.Iterable[DependencyMethods]rx   r  rK   zT.List[DependencyMethods])
r   rM   rr  rO   rd  r
   r   r  rK   r  )?
__future__r   r   r  r   r   typingrR   r}   enumr   r  r   r   r  r   r	   r
   r   r   r   optionsr   rS   compilers.compilersr   r;   r   interpreterbaser   rM  r   r   r   r   r   r   r   r   interpreter.type_checkingr   _MissingCompilerBaser  r   r(   rU   NewTyperM   rn   rp   r  ra  rm  r  r  r  r  r  r  r  rz  r  r  r   r%   r&   <module>r     s8   #  	       " c c  ??.)2   @#!>. >* 8 2 YY3S9 q qfp pdZ ZV^ Vr (( (V *.6	9&P-2X,) * r%   