
    <h                        S SK Jr  SSKJrJrJr  SSKJrJrJ	r	J
r
JrJr  SSKJr  SSKJr  S SKrS SKrS S	KJr  \R*                  (       a  SS
KJr  SSKJr   " S S\5      rg)    )annotations   )ExternalDependencyDependencyExceptionDependencyTypeName   )listify
Popen_safePopen_safe_logged
split_argsversion_compareversion_compare_many)find_external_program)mlogN)mesonlib)Environment)PkgConfigDefineTypec                    ^  \ rS rSr% SrSrS\S'   SrS\S'   SrSr	S\S	'   S
r
\R                  " S5      rSSU 4S jj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5       rSSSSSSSS.           S!S jjrSrU =r$ )"ConfigToolDependency   a5  Class representing dependencies found using a config tool.

Takes the following extra keys in kwargs that it uses internally:
:tools List[str]: A list of tool names to use
:version_arg str: The argument to pass to the tool to get its version
:skip_version str: The argument to pass to the tool to ignore its version
    (if ``version_arg`` fails, but it may start accepting it in the future)
    Because some tools are stupid and don't accept --version
:returncode_value int: The value of the correct returncode
    Because some tools are stupid and don't return 0
NT.Optional[T.List[str]]toolsT.Optional[str]	tool_namez	--versionskip_versionFz^[0-9][0-9.]+c                  > [         T
U ]  [        S5      X#US9  Xl        [	        UR                  SU R                  5      5      U l        U R                  (       d  U R                  S   U l        SU;   a
  US   U l        UR                  SS 5      nUb  [        R                  " U5      nO/ nU R                  XsR                  SS5      US9u  pXl        U R                  X5      U l        U R                  (       d  S U l        g Xl        g )	Nconfig-tool)languager   r   version_argversionreturncode_value)exclude_paths)super__init__r   namer	   getr   r   r   r   stringlistifyfind_configconfigreport_configis_foundr    )selfr%   environmentkwargsr   r"   req_version_rawreq_versiontoolr    	__class__s             ڃ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/dependencies/configtool.pyr$   ConfigToolDependency.__init__(   s    +M:KZbc	VZZ<=
~~!ZZ]DNF"%m4D **Y5&"00AKK((jjASUV6Wgt(u**7@}}DK    c                    U R                   R                  U5      nU(       a   UR                  S5      R                  S5      $ U$ )z3Remove any non-numeric, non-point version suffixes.r   .)$_ConfigToolDependency__strip_versionmatchgrouprstrip)r,   r    ms      r3   _sanitize_version&ConfigToolDependency._sanitize_version?   s;      &&w/ 771:$$S))r5   c                &   [        XR                  /-   5      SS u  p4SnUR                  U:w  aA  U R                  (       a.  [        XR                  /-   5      S   nUR                  U:w  a  SnOSnU R	                  UR                  5       5      nXV4$ )z4Check whether a command is valid and get its versionNr   Tr   F)r
   r   
returncoder   r=   strip)r,   r1   r@   poutvalidr    s          r3   _check_and_get_version+ConfigToolDependency._check_and_get_versionH   s    D$4$4#556r:<<:%  t'8'8&99:1=<<:-!E((5~r5   c           
     6   Uc  / OUnSn[        U R                  U R                  U R                  U R                  U R                  UU R
                  S9 H  nUR                  5       (       d  M  UR                  5       n U R                  Xb5      u  pxU(       d  MG  U(       d  US4s  $ U(       a  [        X5      S   n	U	(       d  SnUS   (       a*  [        USR                  US   5      5      (       a  Xh4nM  M  Xh4nM     U$ ! [        [        4 a     M  f = f)zHelper method that searches for config tool binaries in PATH and
returns the one that best matches the given version requirements.
NNN)r"   allow_default_for_crossr   r   z> {})r   envfor_machiner   r   rI   foundget_commandrE   FileNotFoundErrorPermissionErrorr   r   format)
r,   versionsr@   r"   
best_matchpotential_binr1   rD   r    r+   s
             r3   r(    ConfigToolDependency.find_configW   s   
 ,3HT
2$**DNN

-(,(D(DFM !&&(( ,,.D!%!<!<T!N 
 d|#/B1E  D!}"7FMM*Q-,HII"&J J #_
=F@ / &7 s    DDDc                   [         R                  " U R                  5      S/nU R                  cf  UR	                  [         R
                  " S5      5        Ub!  U(       a  UR	                  SU< SU< 35        OaU(       a  UR	                  SU< 35        ODU[         R                  " S5      SR                  S	R                  U R                  5      5      U/-  n[         R                  " U6   U R                  SL$ )
z/Helper method to print messages about the tool.zfound:NNOzfound z
 but need zneed YESz({}) )
r   boldr   r)   appendredgreenrP   joinlog)r,   r    r0   	found_msgs       r3   r*   "ConfigToolDependency.report_config   s     @Dyy?XZb>c	;;TXXd^,"{  6'J{o!NO  5!89$**U+V]]388DKK;P-QSZ[[I){{$&&r5   c                    [        U R                  U-   5      u  p4nUR                  S:w  a1  U R                  (       a  [	        SU SU R
                   SU 35      e/ $ [        U5      $ )Nr   zCould not generate z for z.
)r   r)   r@   requiredr   r%   r   )r,   argsstagerB   rC   errs         r3   get_config_value%ConfigToolDependency.get_config_value   sa    'd(:;<<1}}),?weDII;VYZ]Y^*_``I#r5   c                    SU 3/$ )Nz-- )r,   variable_names     r3   get_variable_args&ConfigToolDependency.get_variable_args   s    ]O$%%r5   c                     g)Nr   ri   ri   r5   r3   	log_triedConfigToolDependency.log_tried   s    r5   )cmake	pkgconfig
configtoolinternalsystemdefault_valuepkgconfig_definec                  U(       ah  [        U R                  U R                  U5      -   5      u  pn
UR                  S:X  a.  U	R	                  5       n[
        R                  " SU SU 35        U$ Ub  U$ [        SU < 35      e)Nr   zGot config-tool variable z : z?Could not get config-tool variable and no default provided for )r
   r)   rk   r@   rA   r   debugr   )r,   rp   rq   rr   rs   rt   ru   rv   rB   rC   _variables               r3   get_variable!ConfigToolDependency.get_variable   s     "4;;1G1G
1S#STIAA||q 99;

6zl#hZPQ$  !$cdhck"lmmr5   )r)   r+   r%   r   r   r    r   rH   )
r%   strr-   z'Environment'r.   zT.Dict[str, T.Any]r   r   r"   r   )r    r}   returnr}   )r1   T.List[str]r@   intr~   z!T.Tuple[bool, T.Union[str, None]])r   N)rQ   r   r@   r   r"   r   r~   z1T.Tuple[T.Optional[T.List[str]], T.Optional[str]])r    r   r0   r   r~   bool)rc   r   rd   r}   r~   r   )rj   r}   r~   r   )r~   r}   )rp   r   rq   r   rr   r   rs   r   rt   r   ru   r   rv   r   r~   r}   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   rI   recompiler8   r$   r=   rE   r(   r*   rf   rk   staticmethodrn   r{   __static_attributes____classcell__)r2   s   @r3   r   r      s    
 &*E")!%I%K$(L/(#jj!12O .'@'R'$&   8<Z^37UY/3VZ=An!0nCRn,nDSn (;n GJn nr5   r   )
__future__r   baser   r   r   r   r	   r
   r   r   r   r   programsr    r   r   typingT
mesonbuildTYPE_CHECKINGr-   r   interpreter.type_checkingr   r   ri   r5   r3   <module>r      sC    # M M p p ,  	  ??)?Zn- Znr5   