
    -Ph                        d dl mZ ddlmZmZmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ d dlZd dlZd d	lmZ ej        rdd
lmZ ddlmZ  G d de          ZdS )    )annotations   )ExternalDependencyDependencyExceptionDependencyTypeName   )listify
Popen_safePopen_safe_logged
split_argsversion_compareversion_compare_many)find_external_program)mlogN)mesonlib)Environment)PkgConfigDefineTypec                       e Zd ZU dZdZded<   dZded<   dZdZded<   d	Z	 e
j        d
          Zd4d5 fdZd6dZd7dZd8d9d Zd:d#Zd;d&Zd<d(Zed=d)            Zdddddddd*d>d3Z xZS )?ConfigToolDependencyaY  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.]+namestrenvironment'Environment'kwargsT.Dict[str, T.Any]languageexclude_pathsc                V   t                                          t          d          |||           || _        t	          |                    d| j                            | _        | j        s| j        d         | _        d|v r|d         | _        |                    dd           }|t          j
        |          }ng }|                     ||                    dd          |          \  }}	|| _        |                     |	|          | _        | j        s	d | _        d S |	| _        d S )	Nconfig-tool)r!   r   r   version_argversionreturncode_value)r"   )super__init__r   r   r	   getr   r   r%   r   stringlistifyfind_configconfigreport_configis_foundr&   )selfr   r   r   r!   r"   req_version_rawreq_versiontoolr&   	__class__s             b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/configtool.pyr)   zConfigToolDependency.__init__(   s!   +M::KZbccc	VZZ<<==
~ 	+!Z]DNF""%m4D **Y55&"0AAKKK((fjjASUV6W6Wgt(uug**7K@@} 	DKF    r&   returnc                    | j                             |          }|r(|                    d                              d          S |S )z3Remove any non-numeric, non-point version suffixes.r   .)$_ConfigToolDependency__strip_versionmatchgrouprstrip)r0   r&   ms      r5   _sanitize_versionz&ConfigToolDependency._sanitize_version?   sE     &&w// 	* 771::$$S)))r6   r3   T.List[str]
returncodeint!T.Tuple[bool, T.Union[str, None]]c                "   t          || j        gz             dd         \  }}d}|j        |k    r5| j        r,t          || j        gz             d         }|j        |k    rd}nd}|                     |                                          }||fS )z4Check whether a command is valid and get its versionNr   Tr   F)r
   r%   rA   r   r?   strip)r0   r3   rA   poutvalidr&   s          r5   _check_and_get_versionz+ConfigToolDependency._check_and_get_versionH   s    DD$4#5566rr:3<:%%  tt'8&99::1=<:--!E((55g~r6   r   versions1T.Tuple[T.Optional[T.List[str]], T.Optional[str]]c           	        |g n|}d}t          | j        | j        | j        | j        | j        || j                  D ]}|                                s|                                }	 |                     ||          \  }}n# t          t          f$ r Y Yw xY w|s`|s|dfc S |rt          ||          d         }	|	sd}|d         r.t          |d                    |d                             r||f}||f}|S )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   rN   foundget_commandrI   FileNotFoundErrorPermissionErrorr   r   format)
r0   rJ   rA   r"   
best_matchpotential_binr3   rH   r&   r/   s
             r5   r,   z ConfigToolDependency.find_configW   s_   
 ,3HT
2$*DN
-(,(DF F F 	- 	-M !&&((  ,,..D!%!<!<T:!N!Nww%7    
  $d|###  /BB1E    D!} -"7FMM*Q-,H,HII 1"&J"G_

s   )BBBr2   boolc                   t          j        | j                  dg}| j        b|                    t          j        d                     ||r|                    d|d|           n`|r|                    d|           nE|t          j        d          d                    d	                    | j                            |gz  }t          j	        |  | j        duS )
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greenrU   joinlog)r0   r&   r2   	found_msgs       r5   r.   z"ConfigToolDependency.report_config   s     @Dy?X?XZb>c	;TXd^^,,,"{"  !N'!N!N{!N!NOOOO :  !8!8!8999$*U++V]]388DK;P;P-Q-QSZ[[I){$&&r6   argsstagec                    t          | j        |z             \  }}}|j        dk    r&| j        rt	          d| d| j         d|           g S t          |          S )Nr   zCould not generate z for z.
)r   r-   rA   requiredr   r   r   )r0   rd   re   rF   rG   errs         r5   get_config_valuez%ConfigToolDependency.get_config_value   so    'd(:;;3<1} a)*_*_*_DI*_*_Z]*_*_```I#r6   variable_namec                    d| gS )Nz-- )r0   rj   s     r5   get_variable_argsz&ConfigToolDependency.get_variable_args   s    $]$$%%r6   c                     dS )Nr$   rl   rl   r6   r5   	log_triedzConfigToolDependency.log_tried   s    }r6   )cmake	pkgconfig
configtoolinternalsystemdefault_valuepkgconfig_definerp   rq   rr   rs   rt   ru   rv   r   c                  |rit          | j        |                     |          z             \  }}	}
|j        dk    r0|	                                }t          j        d| d|            |S ||S t          d|           )Nr   zGot config-tool variable z : z?Could not get config-tool variable and no default provided for )r
   r-   rm   rA   rE   r   debugr   )r0   rp   rq   rr   rs   rt   ru   rv   rF   rG   _variables               r5   get_variablez!ConfigToolDependency.get_variable   s      	 "4;1G1G
1S1S#STTIAsA|q  99;;
PzPPhPPQQQ$  !"ldh"l"lmmmr6   rM   )
r   r   r   r   r   r    r!   r   r"   r   )r&   r   r7   r   )r3   r@   rA   rB   r7   rC   )r   N)rJ   r@   rA   rB   r"   r   r7   rK   )r&   r   r2   r@   r7   rX   )rd   r@   re   r   r7   r@   )rj   r   r7   r@   )r7   r   )rp   r   rq   r   rr   r   rs   r   rt   r   ru   r   rv   r   r7   r   )__name__
__module____qualname____doc__r   __annotations__r   r%   r   rN   recompiler:   r)   r?   rI   r,   r.   ri   rm   staticmethodro   r{   __classcell__)r4   s   @r5   r   r      s}        
 
 &*E))))!%I%%%%K$(L((((# bj!122O      .      ' ' ' ' 'R' ' ' '$   & & & &    \ 8<Z^37UY/3VZ=An n n n n n n n n nr6   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   rl   r6   r5   <module>r      s*   # " " " " " M M M M M M M M M M p p p p p p p p p p p p p p p p , , , , , ,       				          ? @))))))??????Zn Zn Zn Zn Zn- Zn Zn Zn Zn Znr6   