§
    Á³g  ã            
       ó¼  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZ de
e         dedeedf         fd„Zde
e         dee         fd	„Z G d
„ de¦  «        Zdedee         fd„Z ej        ¦   «         dedee         fd„¦   «         Zdedee         fd„Zedk    rªddlZ ej        ¦   «         Ze                     d¦  «        s
J d¦   «         ‚ ede¦  «          ed eej        ¦  «        ¦  «          edd¬¦  «          e ej         dde !                    dd¦  «        d         ¦  «        ¦  «        D ]Z" ee"d¬¦  «         ŒdS dS ) z�PEP 656 support.

This module implements logic to detect if the currently running Python is
linked against musl, and what musl version is used.
é    N)ÚIOÚIteratorÚ
NamedTupleÚOptionalÚTupleÚfÚfmtÚreturn.c                 óv   — t          j        ||                      t          j        |¦  «        ¦  «        ¦  «        S ©N)ÚstructÚunpackÚreadÚcalcsize)r   r	   s     úe/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_musllinux.pyÚ_read_unpackedr      s*   € ÝŒ=˜˜aŸfšf¥V¤_°SÑ%9Ô%9Ñ:Ô:Ñ;Ô;Ð;ó    c                 ób  — |                       d¦  «         	 t          | d¦  «        }n# t          j        $ r Y dS w xY w|dd…         t	          d¦  «        k    rdS |                       t          j        d¦  «        d¦  «         	 dd	d
œ|d                  \  }}}t          j        |Ž }n# t          $ r Y dS w xY w	 t          | |¦  «        \  }}}}}}}	n# t          j        $ r Y dS w xY wt          |	dz   ¦  «        D ]³}
|                       |||
z  z   ¦  «         	  |t          | |¦  «        ¦  «        \  }}}n# t          j        $ r Y  dS w xY w|dk    rŒZ|                       |¦  «         t          j        |                      |¦  «        ¦  «                             d¦  «        }d|vr dS |c S dS )záDetect musl libc location by parsing the Python executable.

    Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
    ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
    r   Ú16BNé   s   ELFÚHHIé   )ÚIIIIHHHÚIIIIIIII)r   r   r   )ÚQQQIHHHÚIIQQQQQQ)r   é   é   )r   r   é   ú Úmusl)Úseekr   r   ÚerrorÚtupler   ÚoperatorÚ
itemgetterÚKeyErrorÚrangeÚosÚfsdecoder   Ústrip)r   ÚidentÚe_fmtÚp_fmtÚp_idxÚp_getÚ_Úe_phoffÚe_phentsizeÚe_phnumÚiÚp_typeÚp_offsetÚp_fileszÚinterpreters                  r   Ú_parse_ld_musl_from_elfr:      s$  € ð ‡F‚Fˆ1�I„I€IðÝ˜q %Ñ(Ô(ˆˆøÝŒ<ð ð ð ØˆtˆtðøøøàˆRˆaˆR„y•E˜*Ñ%Ô%Ò%Ð%ØˆtØ‡F‚F�6Œ?˜5Ñ!Ô! 1Ñ%Ô%Ð%ð,ð
 2Ø1ð
ð 
ð �Œ(ôÑˆˆu�eõ Ô# UÐ+ˆˆøõ ð ð ð ØˆtˆtðøøøðÝ4BÀ1ÀeÑ4LÔ4LÑ1ˆˆ7�A�q˜!˜[¨'¨'øÝŒ<ð ð ð Øˆtˆtðøøøå�7˜Q‘;ÑÔð ð ˆØ	�Šˆw˜ q™Ñ(Ñ)Ô)Ð)ð	Ø).¨­~¸aÀÑ/GÔ/GÑ)HÔ)HÑ&ˆF�H˜h˜høÝŒ|ð 	ð 	ð 	Ø�4�4�4ð	øøøà�QŠ;ˆ;ØØ	�ŠˆxÑÔÐÝ”k !§&¢&¨Ñ"2Ô"2Ñ3Ô3×9Ò9¸$Ñ?Ô?ˆØ˜Ð$Ð$Ø�4�4ØÐÐÐØˆ4sB   —( ¨;º;ÂB( Â(
B6Â5B6Â:C ÃC&Ã%C&ÄD7Ä7EÅ
Ec                   ó$   — e Zd ZU eed<   eed<   dS )Ú_MuslVersionÚmajorÚminorN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__© r   r   r<   r<   G   s"   € € € € € € Ø€J€J�JØ€J€J�J€J€Jr   r<   Úoutputc                 ó„  — d„ d„ |                       ¦   «         D ¦   «         D ¦   «         }t          |¦  «        dk     s|d         d d…         dk    rd S t          j        d|d         ¦  «        }|sd S t	          t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        ¬	¦  «        S )
Nc                 ó   — g | ]}|¯|‘ŒS rD   rD   ©Ú.0Úns     r   ú
<listcomp>z'_parse_musl_version.<locals>.<listcomp>M   s   € ÐFÐFÐF�1ÀAÐFˆQÐFÐFÐFr   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r   )r+   rH   s     r   ú	<genexpr>z&_parse_musl_version.<locals>.<genexpr>M   s*   è è € Ð@Ð@ q˜Ÿš™œÐ@Ð@Ð@Ð@Ð@Ð@r   r   r   r   r!   zVersion (\d+)\.(\d+)r   )r=   r>   )Ú
splitlinesÚlenÚreÚmatchr<   rB   Úgroup)rE   ÚlinesÚms      r   Ú_parse_musl_versionrU   L   s°   € ØFÐFÐ@Ð@¨F×,=Ò,=Ñ,?Ô,?Ð@Ñ@Ô@ÐFÑFÔF€EÝ
ˆ5�z„z�A‚~€~˜˜qœ " 1 "œ¨Ò/Ð/ØˆtÝ
ŒÐ(¨%°¬(Ñ3Ô3€AØð ØˆtÝ�c !§'¢'¨!¡*¤*™oœoµS¸¿ºÀ¹¼±_´_ÐEÑEÔEÐEr   Ú
executablec                 ól  — t          j        ¦   «         5 }	 |                     t          | d¦  «        ¦  «        }n# t          $ r Y ddd¦  «         dS w xY wt          |¦  «        }ddd¦  «         n# 1 swxY w Y   |sdS t          j        |gt          j        d¬¦  «        }t          |j
        ¦  «        S )a`  Detect currently-running musl runtime version.

    This is done by checking the specified executable's dynamic linking
    information, and invoking the loader to parse its output for a version
    string. If the loader is musl, the output would be something like::

        musl libc (x86_64)
        Version 1.2.2
        Dynamic Program Loader
    ÚrbNT)ÚstderrÚuniversal_newlines)Ú
contextlibÚ	ExitStackÚenter_contextÚopenÚOSErrorr:   Ú
subprocessÚrunÚPIPErU   rY   )rV   Ústackr   ÚldÚprocs        r   Ú_get_musl_versionrf   V   s  € õ 
Ô	Ñ	Ô	ð ( 5ð	Ø×#Ò#¥D¨°TÑ$:Ô$:Ñ;Ô;ˆAˆAøÝð 	ð 	ð 	Øð	(ð (ð (ñ (ô (ð (ð (ð (ð	øøøå$ QÑ'Ô'ˆð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð ð ØˆtÝŒ>˜2˜$¥z¤È4ÐPÑPÔP€DÝ˜tœ{Ñ+Ô+Ð+s1   ”A1–#:¹A1º
AÁA1ÁAÁA1Á1A5Á8A5Úarchc              #   óš   K  — t          t          j        ¦  «        }|€dS t          |j        dd¦  «        D ]}d|j        › d|› d| › �V — ŒdS )aT  Generate musllinux tags compatible to the current platform.

    :param arch: Should be the part of platform tag after the ``linux_``
        prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a
        prerequisite for the current platform to be musllinux-compatible.

    :returns: An iterator of compatible musllinux tags.
    NéÿÿÿÿÚ
musllinux_r1   )rf   ÚsysrV   r(   r>   r=   )rg   Úsys_muslr>   s      r   Úplatform_tagsrm   n   sr   è è € õ !¥¤Ñ0Ô0€HØÐØˆÝ�x”~ r¨2Ñ.Ô.ð ;ð ;ˆØ:˜8œ>Ð:Ð:¨EÐ:Ð:°DÐ:Ð:Ð:Ð:Ð:Ð:ð;ð ;r   Ú__main__zlinux-z	not linuxzplat:zmusl:ztags:ú )Úendz[.-]r1   ú-r   ri   z
      )#Ú__doc__r[   Ú	functoolsr%   r)   rP   r   r`   rk   Útypingr   r   r   r   r   ÚbytesÚstrrB   r   r:   r<   rU   Ú	lru_cacherf   rm   r?   Ú	sysconfigÚget_platformÚplatÚ
startswithÚprintrV   ÚsubÚsplitÚtrD   r   r   ú<module>r€      sž  ððð ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ð<�b˜”ið < cð <¨e°C¸°H¬oð <ð <ð <ð <ð.˜r %œyð .¨X°c¬]ð .ð .ð .ð .ðbð ð ð ð �:ñ ô ð ð
F ð F¨°Ô(>ð Fð Fð Fð Fð €ÔÑÔð, #ð ,¨(°<Ô*@ð ,ð ,ð ,ñ Ôð,ð.;˜ð ; ¨¤ð ;ð ;ð ;ð ;ð  ˆzÒÐØÐÐÐà!ˆ9Ô!Ñ#Ô#€DØ�?Š?˜8Ñ$Ô$Ð1Ð1 kÑ1Ô1Ð1à	€Eˆ'�4ÑÔÐØ	€Eˆ'Ð$Ð$ S¤^Ñ4Ô4Ñ5Ô5Ð5Ø	€Eˆ'�sÐÑÔÐØˆ]˜6˜2œ6 '¨3°·
²
¸3ÀÑ0BÔ0BÀ2Ô0FÑGÔGÑHÔHð !ð !ˆØˆˆa�ZÐ Ñ Ô Ð Ð ð Ðð!ð !r   