Ë
    äØjj  ã            
       óZ  — 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j6                  «       Zej;                  d«      sJ d«       ‚ ede«        ed eej>                  «      «        edd¬«        e ej@                  ddejC                  dd«      d   «      «      D ]  Z" ee"d¬«       Œ yy) 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                 ór   — t        j                  || j                  t        j                  |«      «      «      S ©N)ÚstructÚunpackÚreadÚcalcsize)r   r	   s     úb/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.pyÚ_read_unpackedr      s%   € Ü�=‰=˜˜aŸf™f¤V§_¡_°SÓ%9Ó:Ó;Ð;ó    c                 óú  — | j                  d«       	 t        | d«      }|dd t	        d«      k7  ry| j                  t        j
                  d«      d«       	 dd	d
œ|d      \  }}}t        j                  |Ž }	 t        | |«      \  }}}}}}}	t        |	dz   «      D ]ƒ  }
| j                  |||
z  z   «       	  |t        | |«      «      \  }}}|dk7  rŒ7| j                  |«       t        j                  | j                  |«      «      j                  d«      }d|vr y|c S  y# t        j                  $ r Y yw xY w# t        $ r Y yw xY w# t        j                  $ r Y yw xY w# t        j                  $ r Y  yw xY w)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ðÜ˜q %Ó(ˆð ˆRˆa€y”E˜*Ó%Ò%ØØ‡F�FŒ6�?‰?˜5Ó! 1Ô%ð,ð
 2Ø1ñ
ð �‰(ñÑˆˆu�eô ×#Ñ# UÐ+ˆðÜ4BÀ1ÀeÓ4LÑ1ˆˆ7�A�q˜!˜[¨'ô �7˜Q‘;Óò ˆØ	�‰ˆw˜ q™Ñ(Ô)ð	Ù).¬~¸aÀÓ/GÓ)HÑ&ˆF�H˜hð �QŠ;ØØ	�‰ˆxÔÜ—k‘k !§&¡&¨Ó"2Ó3×9Ñ9¸$Ó?ˆØ˜Ñ$ÙØÒðð øôK �<‰<ò Ùðûô ò Ùðûô �<‰<ò Ùðûô �|‰|ò 	Úð	úsG   “D" ÁD; Á9E
 Â6E#Ä"D8Ä7D8Ä;	EÅEÅ
E ÅE Å#E:Å9E:c                   ó"   — e Zd ZU eed<   eed<   y)Ú_MuslVersionÚmajorÚminorN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__© r   r   r<   r<   G   s   … ØƒJØ„Jr   r<   Úoutputc                 ó@  — d„ | j                  «       D «       D �cg c]  }|sŒ|‘Œ	 }}t        |«      dk  s|d   d d dk7  ry t        j                  d|d   «      }|sy t	        t        |j                  d«      «      t        |j                  d«      «      ¬«      S c c}w )	Nc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   )r+   )Ú.0Úns     r   ú	<genexpr>z&_parse_musl_version.<locals>.<genexpr>M   s   è ø€ Ò@ q˜Ÿ™ŸÑ@ùs   ‚r   r   r   r!   zVersion (\d+)\.(\d+)r   )r=   r>   )Ú
splitlinesÚlenÚreÚmatchr<   rB   Úgroup)rE   rI   ÚlinesÚms       r   Ú_parse_musl_versionrR   L   sŠ   € Ù@¨F×,=Ñ,=Ó,?Ô@ÖF�1ÂAŠQÐF€EÐFÜ
ˆ5ƒz�A‚~˜˜q™ " 1˜¨Ò/ØÜ
�‰Ð(¨%°©(Ó3€AÙØÜœc !§'¡'¨!£*›o´S¸¿¹À»³_ÔEÐEùò Gs
   šB¢BÚ
executablec                 óN  — t        j                  «       5 }	 |j                  t        | d«      «      }t        |«      }ddd«       syt        j                  |gt        j                  d¬«      }t        |j                  «      S # t        $ r Y ddd«       yw xY w# 1 sw Y   Œ_xY w)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ÚPIPErR   rV   )rS   Ústackr   ÚldÚprocs        r   Ú_get_musl_versionrc   V   sœ   € ô 
×	Ñ	Ó	ð ( 5ð	Ø×#Ñ#¤D¨°TÓ$:Ó;ˆAô % QÓ'ˆ÷(ñ ØÜ�>‰>˜2˜$¤z§¡È4ÔP€DÜ˜tŸ{™{Ó+Ð+øô ò 	Ø÷	(ð (ð	ú÷(ð (ús-   •B—B²BÂ	BÂBÂBÂBÂB$Úarchc              #   óª   K  — t        t        j                  «      }|€yt        |j                  dd«      D ]  }d|j
                  › d|› d| › �–— Œ y­w)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   )rc   ÚsysrS   r(   r>   r=   )rd   Úsys_muslr>   s      r   Úplatform_tagsrj   n   sY   è ø€ ô !¤§¡Ó0€HØÐØÜ�x—~‘~ r¨2Ó.ò ;ˆØ˜8Ÿ>™>Ð*¨!¨E¨7°!°D°6Ð:Ó:ñ;ùs   ‚AAÚ__main__zlinux-z	not linuxzplat:zmusl:ztags:ú )Úendz[.-]r1   ú-r   rf   z
      )#Ú__doc__rX   Ú	functoolsr%   r)   rM   r   r]   rh   Útypingr   r   r   r   r   ÚbytesÚstrrB   r   r:   r<   rR   Ú	lru_cacherc   rj   r?   Ú	sysconfigÚget_platformÚplatÚ
startswithÚprintrS   ÚsubÚsplitÚtrD   r   r   ú<module>r}      sz  ðñó Û Û Û 	Û 	Û Û Û 
ß <Õ <ð<�b˜‘ið < cð <¨e°C¸°H©oó <ð.˜r %™yð .¨X°c©]ó .ôb�:ô ð
F ð F¨°Ñ(>ó Fð €×ÑÓð, #ð ,¨(°<Ñ*@ò ,ó ð,ð.;˜ð ; ¨¡ó ;ð  ˆzÒÛà!ˆ9×!Ñ!Ó#€DØ�?‰?˜8Ô$Ð1 kÓ1Ð$á	ˆ'�4ÔÙ	ˆ'Ñ$ S§^¡^Ó4Ô5Ù	ˆ'�sÕÙ˜6˜2Ÿ6™6 '¨3°·
±
¸3ÀÓ0BÀ2Ñ0FÓGÓHò !ˆÙˆa�ZÖ ñ!ð r   