§
    ƒnócª  ã                  ó¬   — 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 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  G d„ de¦  «        ZdS )é    )Úannotationsé   )ÚExternalDependencyÚDependencyExceptionÚDependencyTypeNameé   )ÚlistifyÚ
Popen_safeÚ
split_argsÚversion_compareÚversion_compare_many)Úfind_external_program)ÚmlogN)Úmesonlib)ÚEnvironmentc                  óÐ   ‡ — e Zd ZU dZdZded<   dZded<   dZdZded<    e	j
        d	¦  «        Zd-d.ˆ fd„Zd/d„Zd0d1d„Zd2d„Zd3d!„Zd4d#„Zed5d$„¦   «         Zddddddd%œd6d,„Zˆ xZS )7ÚConfigToolDependencyaZ  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 it's 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_versionz^[0-9][0-9.]+ÚnameÚstrÚenvironmentú'Environment'ÚkwargsúT.Dict[str, T.Any]Úlanguagec                óR  •— 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)ÚsuperÚ__init__r   r   r	   Úgetr   r   r"   r   ÚstringlistifyÚfind_configÚconfigÚreport_configÚis_foundr#   )
Úselfr   r   r   r   Úreq_version_rawÚreq_versionÚtoolr#   Ú	__class__s
            €úD/usr/lib/python3/dist-packages/mesonbuild/dependencies/configtool.pyr&   zConfigToolDependency.__init__0   s  ø€ Ý‰Œ×ÒÕ+¨MÑ:Ô:¸KÈÐZbÐÑcÔcÐcØˆŒ	å˜VŸZšZ¨°´Ñ<Ô<Ñ=Ô=ˆŒ
ØŒ~ð 	+Ø!œZ¨œ]ˆDŒNØ˜FÐ"Ð"Ø% mÔ4ˆDÔà Ÿ*š* Y°Ñ5Ô5ˆØÐ&Ý"Ô0°ÑAÔAˆKˆKàˆKØ×(Ò(¨°f·j²jÐASÐUVÑ6WÔ6WÑXÔX‰ˆˆgØˆŒØ×*Ò*¨7°KÑ@Ô@ˆŒØŒ}ð 	ØˆDŒKØˆFØˆŒˆˆó    r#   Úreturnc                óŽ   — | j                              |¦  «        }|r(|                     d¦  «                             d¦  «        S |S )z3Remove any non-numeric, non-point version suffixes.r   ú.)Ú$_ConfigToolDependency__strip_versionÚmatchÚgroupÚrstrip)r-   r#   Úms      r2   Ú_sanitize_versionz&ConfigToolDependency._sanitize_versionG   sE   € àÔ ×&Ò& wÑ/Ô/ˆØð 	*ð —7’7˜1‘:”:×$Ò$ SÑ)Ô)Ð)Øˆr3   r   ÚversionsúT.List[str]Ú
returncodeÚintú1T.Tuple[T.Optional[T.List[str]], T.Optional[str]]c                óÂ  — d}t          | j        | j        | j        | j        | j        d¬¦  «        D �],}|                     ¦   «         sŒ|                     ¦   «         }	 t          || j        gz   ¦  «        dd…         \  }}n# t          t          f$ r Y Œdw xY w|j        |k    r3| j        r+t          || j        gz   ¦  «        d         }|j        |k    rŒ¤nŒ¦|                      |                     ¦   «         ¦  «        }|s|dfc S |rt          ||¦  «        d         }|sd}|d         r/t!          |d                     |d         ¦  «        ¦  «        r||f}�Œ(||f}�Œ.|S )	z“Helper method that searches for config tool binaries in PATH and
        returns the one that best matches the given version requirements.
        )NNF)Úallow_default_for_crossNr   r   r   z> {})r   ÚenvÚfor_machiner   r   ÚfoundÚget_commandr
   r"   ÚFileNotFoundErrorÚPermissionErrorr?   r   r<   Ústripr   r   Úformat)	r-   r=   r?   Ú
best_matchÚpotential_binr0   ÚpÚoutr,   s	            r2   r)   z ConfigToolDependency.find_configP   s¸  € ð
 IUˆ
Ý2Ø”˜$Ô*¨D¬NØ” ¤
ÀEðKñ Kô Kð $	)ñ $	)ˆMð !×&Ò&Ñ(Ô(ð ØØ ×,Ò,Ñ.Ô.ˆDðÝ# D¨DÔ,<Ð+=Ñ$=Ñ>Ô>¸rÀ¸rÔB‘��3�3øÝ%¥Ð7ð ð ð Ø�ðøøøàŒ|˜zÒ)Ð)ØÔ$ð å" 4¨4Ô+<Ð*=Ñ#=Ñ>Ô>¸qÔA�AØ”| zÒ1Ð1Ø ð 2ð à×(Ò(¨¯ª©¬Ñ5Ô5ˆCð ð $Ø˜d�|Ð#Ð#Ð#Øð  Ý/°°XÑ>Ô>¸qÔA�ð  ð  Ø�DØ˜!Œ}ð )Ý" 3¨¯ª°jÀ´mÑ(DÔ(DÑEÔEð -Ø"&¨ �Jùà" C˜[�
‘
àÐs   Á#BÂBÂBr/   Ú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ÚgreenrK   ÚjoinÚlog)r-   r#   r/   Ú	found_msgs       r2   r+   z"ConfigToolDependency.report_config~   sê   € õ @D¼yÈÌÑ?XÔ?XÐZbÐ>cˆ	àŒ;ÐØ×Ò�TœX d™^œ^Ñ,Ô,Ð,ØÐ" {Ð"Ø× Ò Ð!N¨'Ð!NÐ!N¸{Ð!NÐ!NÑOÔOÐOÐOØð :Ø× Ò Ð!8¨Ð!8Ð!8Ñ9Ô9Ð9øà�$œ* UÑ+Ô+¨V¯]ª]¸3¿8º8ÀDÄKÑ;PÔ;PÑ-QÔ-QÐSZÐ[Ñ[ˆIåŒ�)ÐÐàŒ{ $Ð&Ð&r3   Ú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*   r?   Úrequiredr   r   r   )r-   r\   r]   rN   rO   Úerrs         r2   Úget_config_valuez%ConfigToolDependency.get_config_value�   so   € Ý  ¤¨tÑ!3Ñ4Ô4‰ˆˆ3�ØŒ<˜1ÒÐØŒ}ð aÝ)Ð*_ÀÐ*_Ð*_ÈDÌIÐ*_Ð*_ÐZ]Ð*_Ð*_Ñ`Ô`Ð`ØˆIÝ˜#‰ŒÐr3   Úvariable_namec                ó  — t          | j        d|› �gz   ¦  «        \  }}}|j        dk    r/| j        r(t	          d                     || j        ¦  «        ¦  «        ‚|                     ¦   «         }t          j	        d|› d|› �¦  «         |S )Nz--r   z-Could not get variable "{}" for dependency {}zGot config-tool variable z : )
r
   r*   r?   r_   r   rK   r   rJ   r   Údebug)r-   rb   rN   rO   Ú_Úvariables         r2   Úget_configtool_variablez,ConfigToolDependency.get_configtool_variable˜   s    € Ý˜tœ{Ð.B°=Ð.BÐ.BÐ-CÑCÑDÔD‰	ˆˆ3�ØŒ<˜1ÒÐØŒ}ð 3Ý)ØC×JÒJØ% t¤yñ2ô 2ñ3ô 3ð 3ð —9’9‘;”;ˆÝŒ
ÐK¨}ÐKÐKÀÐKÐKÑLÔLÐLØˆr3   c                 ó   — dS )Nr!   © ri   r3   r2   Ú	log_triedzConfigToolDependency.log_tried£   s   € àˆ}r3   )ÚcmakeÚ	pkgconfigÚ
configtoolÚinternalÚdefault_valueÚpkgconfig_definerk   rl   rm   rn   ro   rp   c               óÒ   — |rP| j         }d| _         	 |                      |¦  «        || _         S # t          $ r Y nw xY w	 || _         n# || _         w xY w|�|S t          d| ›�¦  «        ‚)NTz?Could not get config-tool variable and no default provided for )r_   rg   r   )r-   rk   rl   rm   rn   ro   rp   Úrestores           r2   Úget_variablez!ConfigToolDependency.get_variable§   s¢   € ð ð 	(ð
 ”mˆGØ ˆDŒMð(Ø×3Ò3°JÑ?Ô?ð !(�”�øõ 'ð ð ð Ø�ðøøøØà '�”�ø �”Ð'Ð'Ð'Ð'ØÐ$Ø Ð Ý!Ð"lÐdhÐ"lÐ"lÑmÔmÐms   ’. ®
;¸A º;»A Á	A)N)r   r   r   r   r   r   r   r   )r#   r   r4   r   )r   )r=   r>   r?   r@   r4   rA   )r#   r   r/   r>   r4   rP   )r\   r>   r]   r   r4   r>   )rb   r   r4   r   )r4   r   )rk   r   rl   r   rm   r   rn   r   ro   r   rp   r   r4   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r"   r   ÚreÚcompiler7   r&   r<   r)   r+   ra   rg   Ústaticmethodrj   rs   Ú__classcell__)r1   s   @r2   r   r      s`  ø€ € € € € € ð
ð 
ð &*€EÐ)Ð)Ð)Ñ)Ø!%€IÐ%Ð%Ð%Ñ%Ø€KØ$(€LÐ(Ð(Ð(Ñ(Ø �b”jÐ!1Ñ2Ô2€Oðð ð ð ð ð ð ð.ð ð ð ð,ð ,ð ,ð ,ð ,ð\'ð 'ð 'ð 'ð$ð ð ð ð	ð 	ð 	ð 	ð ðð ð ñ „\ðð 8<ÐZ^Ø37ÐUYØ6:ØAEðnð nð nð nð nð nð nð nð nð nr3   r   )Ú
__future__r   Úbaser   r   r   r   r	   r
   r   r   r   Úprogramsr   Ú r   ry   ÚtypingÚTÚ
mesonbuildÚTYPE_CHECKINGr   r   r   ri   r3   r2   ú<module>r…      s  ðð #Ð "Ð "Ð "Ð "Ð "à MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð à Ð Ð Ð Ð Ð à„?ð *Ø)Ð)Ð)Ð)Ð)Ð)ð^nð ^nð ^nð ^nð ^nÐ-ñ ^nô ^nð ^nð ^nð ^nr3   