
    :eL                        d dl mZ ddlmZ ddlmZ 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 dd
lmZmZmZ ddlmZmZmZmZ d dlZej4                  rddlmZ ddlmZmZ ddlmZ  G d de      Z y)    )annotations   )extract_required_kwarg   )mlog)dependencies)build)WrapMode)	OptionKeyextract_as_liststringlistifyversion_compare_manylistify)
DependencyDependencyExceptionNotFoundDependency)MesonInterpreterObject
FeatureNewInterpreterExceptionInvalidArgumentsN)Interpreter)TYPE_nkwargs	TYPE_nvar)SubprojectHolderc                       e Zd Z	 	 d	 	 	 d 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dZedd       ZddZd d!dZ xZS )"DependencyFallbacksHolderc                   t         |   |j                         || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  j                  | _        || _        d | _	        d | _
        d|xs i i| _        g | _        d| _        d| _        |D ]^  }|st        d      d|v sd|v sd|v rt!        d      || j                  v rt        d	|d
      | j                  j#                  |       ` | j                  r| j                  d   | _        y d| _        y )N)
subprojectdefault_optionsFz1dependency_fallbacks empty name '' is not allowed<>=zCharacters <, > and = are forbidden in dependency names. To specifyversion
 requirements use the 'version' keyword argument instead.zdependency_fallbacks name z is duplicatedr   z(anonymous))super__init__r   interpretercoredatar	   environmentwrap_resolverallow_fallbacksubproject_namesubproject_varnamesubproject_kwargsnamesforcefallback
nofallbackr   r   append_display_name)selfr%   r-   r)   r   name	__class__s         L/usr/lib/python3/dist-packages/mesonbuild/interpreter/dependencyfallbacks.pyr$   z"DependencyFallbacksHolder.__init__   sB   K$:$:;&%00#,, &&
&22(44BB,0437"3_5J!K"$
#( % 	$D*+`aad{cTkSD[& (n o otzz!*-Gx~+^__JJd#	$ /3jjTZZ]m    c                J   |y | j                   t        d      t        |      }t        |      dk(  rd| _         y t        |      dk(  r)t	        j
                  dd| j                         |d   d }}nt        |      dk(  r|\  }}nt        d      | j                  ||       y )	Nz@"fallback" and "allow_fallback" arguments are mutually exclusiver   Fr   zFallback without variable namez0.53.0r   z)Fallback info must have one or two items.)	r)   r   r   lenr   
single_user   r   _subproject_impl)r2   fbinfo	subp_namevarnames       r5   set_fallbackz&DependencyFallbacksHolder.set_fallback0   s    >*"#effv&v;!"'Dv;!!!"BHdoo^!'DwI[A!'Iw&'RSSi1r6   c                <    | j                   J || _         || _        y N)r*   r+   )r2   r<   r=   s      r5   r:   z*DependencyFallbacksHolder._subproject_implD   s$    ##+++(")r6   c                Z    |d   }| j                  ||      }|r| j                  |       |S Nr   )_get_cached_dep_verify_fallback_consistency)r2   kwargs	func_argsfunc_kwargsr3   
cached_deps         r5   _do_dependency_cachez.DependencyFallbacksHolder._do_dependency_cacheI   s4    |))$7
--j9r6   c                J   |d   }| j                  |       t        j                  || j                  |      }|j	                         r\| j
                  j                  |      }t        j                  ||      }| j                  j                  |   j                  ||       |S y rB   )_handle_featurenew_dependenciesr   find_external_dependencyr'   foundr%   machine_from_native_kwargget_dep_identifierr&   depsput)r2   rE   rF   rG   r3   depfor_machine
identifiers           r5   _do_dependencyz(DependencyFallbacksHolder._do_dependencyP   s    
 |,,T233D$:J:JFS99;**DDVLK%88vFJMM{+//
C@Jr6   c                r    |d   }| j                   }|r$| j                  |      r| j                  |||      S y rB   )r+   _get_subproject_get_subproject_dep)r2   rE   rF   rG   r<   r=   s         r5   _do_existing_subprojectz1DependencyFallbacksHolder._do_existing_subproject_   s>    aL	))--i8++IwGGr6   c                "   | j                   r5t        j                  dt        j                  | j                        d       nt| j
                  r5t        j                  dt        j                  | j                        d       y t        j                  dt        j                  | j                               |j                  d      }|j                  di       }|5d|vr1|rdnd}t        j                  d	|        ||t        d      <   ||d<   | j                  }| j                  }|j                  d
g        d|v r$t        |d   t              rt        |d         |d<   | j                  j                  ||       | j!                  |||      S )Nz4Looking for a fallback subproject for the dependencyz0because:
Use of fallback dependencies is forced.z8Not looking for a fallback subproject for the dependencyz2because:
Use of fallback dependencies is disabled.staticr   default_librarysharedz2Building fallback subproject with default_library=version)r.   r   logboldr1   r/   getr   r*   r+   
setdefault
isinstancestrr   r%   do_subprojectrX   )	r2   rE   rF   rG   r[   r   r\   r<   r=   s	            r5   _do_subprojectz(DependencyFallbacksHolder._do_subprojectf   si   HHKYYt1124gi__HHOYYt1124ikHHKYYt1124
 H%%//*;R@"3?"J*0hhOHHI/IZ[\<KOI&789-<K)* ((	))y"-&:f=N6OQT+U-4V<M5N-OK)*&&y+>''	7FCCr6   c                v    | j                   j                  j                  |      }|r|j                         r|S y r@   )r%   subprojectsra   rM   )r2   r<   subs      r5   rW   z)DependencyFallbacksHolder._get_subproject   s1    **..y9399;Jr6   c                |   | j                  |      }|srt        j                  dt        j                  | j                        dt        j                  |      dt        j
                  d      t        j                  d             y d }| j                  D ]  }| j                  ||      }|s n |r| j                  |       |S |s1| j                  D ]"  }| j                  j                  ||      }|s" n |st        j                  d|d| j                  d       t        j                  dt        j                  | j                        dt        j                  |j                        dt        j
                  d             | j                         S | j                  ||      xs | j                         }|j!                         sit        j                  dt        j                  | j                        dt        j                  |j                        dt        j
                  d             |S t#        |j%                  d	g             }|j'                         }	| j)                  ||	      st        j                  dt        j                  | j                        dt        j                  |j                        dt        j
                  d      d
t        j*                  |	      dt        j                  dj-                  |D 
cg c]  }
d|
 d
 c}
            
       | j                         S t        j                  dt        j                  | j                        dt        j                  |j                        dt        j.                  d      |	rt        j*                  |	             |S d        |S c c}
w )Nr   zfrom subprojectfound:NOz (subproject failed to configure)zSubproject z did not override z* dependency and no variable name specifiedr^   rM   	but need:, 'YES)rW   r   r_   r`   r1   redbluer-   rC   rD   r(   get_varnamewarningsubdir_notfound_dependency_get_subproject_variablerM   r   ra   get_version_check_versionnormal_cyanjoingreen)r2   r<   r=   rE   r   rH   r3   var_depwantedrM   es              r5   rX   z-DependencyFallbacksHolder._get_subproject_dep   s   )))4
HH\499T-?-?#@BSYYy)8TXXd^YYABD  
JJ 	D--dF;J	 --j9  

 ,,88DI LL;ym3EdFXFXE[  \F  G  HHH\499T-?-?#@BSYYz0018TXXd^M,,..//
GDcHaHaHc}}HH\499T-?-?#@BSYYz0018TXXd^MNvzz)R89##%""651HH\499T-?-?#@BSYYz0018TXXd^d..u5{YYtyyF)CqAaS()CDEG ,,..tyy););<>O:,,-xE9J,1!!%(	=  8<	=  *Ds   N9"c                   | j                   j                  |      }t        j                  ||      }t	        |j                  dg             }| j                  j                  |   j                  |      }|rt        j                  |j                  rdnd      g}|j                  }|j                         st        j                  dt        j                  | j                        dt        j                   d      g|  |S | j"                  r| j$                  rd }n>t        j                  d      g}| j&                  j(                  |   j                  |      }|r$|j+                         }	| j-                  ||	      s|sy t        j                  dt        j                  |      dt        j                   d      dt        j.                  |	      dt        j                  d	j1                  |D 
cg c]  }
d
|
 d

 c}
            g  | j3                         S |	rt        j.                  |	      g}t        j                  dt        j                  | j                        dt        j4                  d      g  |S y c c}
w )Nr^   z(overridden)z(cached)r   rk   rl   rM   rm   rn   ro   rp   )r%   rN   r   rO   r   ra   r	   dependency_overridesr   rr   explicitrR   rM   r_   r`   r1   rq   r.   r*   r&   rP   rx   ry   rz   r{   rv   r|   )r2   r3   rE   rS   rT   wanted_versoverrideinforH   
found_versr   s              r5   rC   z)DependencyFallbacksHolder._get_cached_dep   s   
 &&@@H!44T6B
#FJJy"$=>::22;?CCJOII0A0AnzRSD!J ##%tyy1C1C'D!488D>:48:!!D$8$8JIIj)*D++K8<<ZHJ#//1J&&{J?  tyy!488D> $"2"2:">499-L1!Ah-L#MN  	 
 0022((4<t<HH\499T-?-?#@tzz%09379 .Ms   0Jc                    	 |j                  |gi       }t        |t              s1t	        j
                  d|d|j                  d|d       y d       y |S # t        $ r d }Y Pw xY w)Nz	Variable z in the subproject z isz	not foundznot a dependency object)get_variable_methodr   rc   r   r   rt   ru   )r2   r   r=   r}   s       r5   rw   z2DependencyFallbacksHolder._get_subproject_variable   s    	 44gYCG ':.LL9WK/B:CTCTBWWZ[(/X >WX   	G	s   A A&%A&c                    | j                   }| j                  }| j                  |      }|rH|rE| j                  ||      }|r0|j	                         r||k7  rt        j                  d|       y y y y y y )NzSInconsistency: Subproject has overridden the dependency with another variable than )r*   r+   rW   rw   rM   r   rt   )r2   rH   r<   r=   r   r}   s         r5   rD   z6DependencyFallbacksHolder._verify_fallback_consistency  s|    ((	)))))4
'33JHG:++-'Z2Grszr}~ 3H-w ":r6   c                   |dk(  r"t        j                  dd| j                         y|dk(  r"t        j                  dd| j                         y|dk(  r"t        j                  dd| j                         y|dk(  r"t        j                  d	d
| j                         y|dk(  r"t        j                  dd| j                         yy)z:Do a feature check on dependencies used by this subprojectmpizMPI Dependencyz0.42.0pcapzPcap DependencyvulkanzVulkan DependencylibwmfzLibWMF Dependencyz0.44.0openmpzOpenMP Dependencyz0.46.0N)r   r9   r   )r2   r3   s     r5   rK   z9DependencyFallbacksHolder._handle_featurenew_dependencies  s    5=!!"2HdooNV^!!"3XtOX!!"5xQX!!"5xQX!!"5xQ r6   c                    t        | j                  r| j                  d   | j                        S d| j                        S )Nr    )r   r-   r'   )r2   s    r5   rv   z.DependencyFallbacksHolder._notfound_dependency  s3    !4::$**Q-tGWGWXX2tGWGWXXr6   c                8    | sy|dk(  xs t        ||       d     S )NT	undefinedr   )r   )r~   rM   s     r5   ry   z(DependencyFallbacksHolder._check_version  s,    [(V0DUF0STU0V,VWWr6   c                   g }| j                   D ]!  }|j                  | j                  |gi f       # | j                  r3|j                  | j                  | j                  g| j
                  f       | j                  r| j                  s0| j                   D ]!  }|j                  | j                  |gi f       # | j                  r3|j                  | j                  | j                  g| j
                  f       |S r@   )	r-   r0   rI   r*   rY   r,   r.   rU   rf   )r2   
candidatesr3   s      r5   _get_candidatesz)DependencyFallbacksHolder._get_candidates"  s    
JJ 	GDt884&"EF	G t;;d>R>R=SUYUkUklm!!)=)=

 E!!4#6#6"CDE t22T5I5I4JDLbLbcdr6   c                0   t        |d      }|r:| xj                  dj                  dj                  d |D                    z  c_        t	        || j
                        \  }}}|rYt        j                  dt        j                  | j                        dt        j                  |      d       | j                         S | j                  j                  t        d            }t        |t              sJ d	       | j                  j                  t        d
            t        t              sJ d	       |t        j                   k(  | _        |xsC |t        j"                  k(  xs. t%        fd| j&                  D              xs | j(                  v | _        | j(                  s| j*                  dur| j&                  D ]z  }| j,                  j/                  |      \  }	}
|	s$| xj"                  |	v z  c_        | j"                  s!| j*                  du s|s| j1                  |	      r| j3                  |	|
        n | j5                         }|s|rt7        d      t9        |      dz
  }t;        |      D ]  \  }}|\  }}}|xr ||k(  |d<   |xr ||k(  |d<    ||||      }|r|j=                         r| j&                  D ]  }| j>                  jA                  |      }tC        jD                  ||      }|| jF                  jH                  |   vsPtG        jJ                  || j>                  jL                  d      | jF                  jH                  |   |<    |c S |r |s||k(  rtO        d| j                  d      |s|c S  | j                         S )Nmodulesz (modules: {})rn   c              3  2   K   | ]  }t        |        y wr@   )rd   ).0is     r5   	<genexpr>z3DependencyFallbacksHolder.lookup.<locals>.<genexpr>6  s     CYqCFCYs   r   zskipped: featuredisabled	wrap_modezfor mypyforce_fallback_forc              3  &   K   | ]  }|v  
 y wr@    )r   r3   r   s     r5   r   z3DependencyFallbacksHolder.lookup.<locals>.<genexpr>E  s     !T$*<"<!Ts   FTz-Dependency is required but has no candidates.r   required)r   zDependency z is required but not found.)(r   r1   formatr{   r   r   r   r_   r`   rv   r&   
get_optionr   rc   r
   listr/   r.   anyr-   r*   r)   r(   find_dep_providerrW   r:   r   r   r8   	enumeraterM   r%   rN   r   rO   r	   r   DependencyOverridecurrent_noder   )r2   rE   force_fallbackmodsr   r   featurer   r3   r<   r=   r   lastr   itemfuncrF   rG   rR   rS   rT   r   s                        @r5   lookupz DependencyFallbacksHolder.lookup3  sb   vy1"2"9"9$))CYTXCY:Y"ZZ&<VT__&U#(GHH\499T-?-?#@BTVZV_V_`gVhjtu,,.. MM,,Y{-CD	)X.:
:.!]]55i@T6UV,d3?Z?3#x':'::, I'8+A+AAI!!T!TTI #226HH 	 ##(;(;5(H

 %)%7%7%I%I$%O"	7&&)7I*II&))T-@-@D-HHX\XlXlmvXw--iA ))+
 h"#RSS :" , 	GAt+/(D)[&.&>AIK
#!)!9qDyF:vy+6Csyy{ !JJ iD"&"2"2"L"LV"TK!-!@!@v!NJ!)H)H)UU!44S$:J:J:W:Wbgh 

77DZP	i 
sa4i *K8J8J7MMh*ijj
-	. ((**r6   )NN)
r%   z'Interpreter'r-   T.List[str]r)   zT.Optional[bool]r   z"T.Optional[T.Dict[OptionKey, str]]returnNone)r;   z%T.Optional[T.Union[T.List[str], str]]r   r   )r<   rd   r=   rd   r   r   )rE   r   rF   r   rG   r   r   T.Optional[Dependency])r<   rd   r   zT.Optional[SubprojectHolder])r<   rd   r=   rd   rE   r   r   r   )r3   rd   rE   r   r   r   )r   r   r=   rd   r   r   )rH   r   r   r   )r3   rd   r   r   )r   r   )r~   r   rM   rd   r   bool)r   zuT.List[T.Tuple[T.Callable[[TYPE_nkwargs, TYPE_nvar, TYPE_nkwargs], T.Optional[Dependency]], TYPE_nvar, TYPE_nkwargs]])F)rE   r   r   r   r   r   )__name__
__module____qualname__r$   r>   r:   rI   rU   rY   rf   rW   rX   rC   rw   rD   rK   rv   staticmethodry   r   r   __classcell__)r4   s   @r5   r   r      s    jnGKL"DLPTL62(*
D>=~,\	@RY X X
"C+ C+r6   r   )!
__future__r   interpreterobjectsr   r   r   r   r	   wrapr
   mesonlibr   r   r   r   r   r   r   r   interpreterbaser   r   r   r   typingTTYPE_CHECKINGr%   r   r   r   r   r   r   r6   r5   <module>r      sS    " 6     _ _ N NG G ??(94b+ 6 b+r6   