
    RiW%                       U d dl m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 ddlmZmZmZmZ dZdZdZh d	Zej        d0d            Zd1dZd1dZd2dZ ej        d           Zded<    G d de          Zd3dZ d3dZ!d3dZ"d4d Z#ej$        d5d!            Z%d6d$Z& ed%d&          d' ed%d(          d) ed%d*          d+iZ'd,ed-<   d7d/Z(dS )8    )annotationsN)	GeneratorIterator
NamedTupleSequence   )EIClassEIDataELFFileEMachinel      ~ i   i   >   ppc64s390xx86_64aarch64ppc64leriscv64loongarch64pathstrreturn%Generator[ELFFile | None, None, None]c              #     K   	 t          | d          5 }t          |          V  d d d            d S # 1 swxY w Y   d S # t          t          t          f$ r d V  Y d S w xY w)Nrb)openr   OSError	TypeError
ValueError)r   fs     g/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_manylinux.py
_parse_elfr       s      $ 	!**	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Y
+   





s,   A  3A  7A  7A   AA
executableboolc                <   t          |           5 }|d uon|j        t          j        k    oY|j        t
          j        k    oD|j        t          j	        k    o/|j
        t          z  t          k    o|j
        t          z  t          k    	 cd d d            S # 1 swxY w Y   d S N)r    capacityr	   C32encodingr
   Lsbmachiner   ArmflagsEF_ARM_ABIMASKEF_ARM_ABI_VER5EF_ARM_ABI_FLOAT_HARDr!   r   s     r   _is_linux_armhfr0   (   s     
J		 
1TM I
gk)I
fj(I 	X\)I .(O;	I
 //3HH	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A4BBBc                    t          |           5 }|d uo>|j        t          j        k    o)|j        t
          j        k    o|j        t          j	        k    	 cd d d            S # 1 swxY w Y   d S r$   )
r    r%   r	   r&   r'   r
   r(   r)   r   I386r/   s     r   _is_linux_i686r3   7   s    	J		 
1TM +
gk)+
fj(+ 	X]*		

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA!!A%(A%archsSequence[str]c                    d|v rt          |           S d|v rt          |           S t          d |D                       S )Narmv7li686c              3  (   K   | ]}|t           v V  d S r$   )_ALLOWED_ARCHS).0archs     r   	<genexpr>z'_have_compatible_abi.<locals>.<genexpr>F   s'      88$t~%888888    )r0   r3   any)r!   r4   s     r   _have_compatible_abir@   A   sO    5z***j)))88%888888r>   c                     dS )N2    rC   r>   r   <lambda>rD   N   s    B r>   zdict[int, int]_LAST_GLIBC_MINORc                  $    e Zd ZU ded<   ded<   dS )_GLibCVersionintmajorminorN)__name__
__module____qualname____annotations__rC   r>   r   rG   rG   Q   s"         JJJJJJJJr>   rG   
str | Nonec                     	 t          j        d          } | J |                                 \  }}n$# t          t          t
          t          f$ r Y dS w xY w|S )zJ
    Primary implementation of glibc_version_string using os.confstr.
    CS_GNU_LIBC_VERSIONN)osconfstrrsplitAssertionErrorAttributeErrorr   r   )version_string_versions      r   _glibc_version_string_confstrrZ   V   sl    %'Z0E%F%F)))#**,,
77NGZ@   tt Ns   /2 AAc                 8   	 ddl } n# t          $ r Y dS w xY w	 |                     d          }n# t          $ r Y dS w xY w	 |j        }n# t
          $ r Y dS w xY w| j        |_         |            }t          |t                    s|
                    d          }|S )zG
    Fallback implementation of glibc_version_string using ctypes.
    r   Nascii)ctypesImportErrorCDLLr   gnu_get_libc_versionrV   c_char_prestype
isinstancer   decode)r]   process_namespacer`   version_strs       r   _glibc_version_string_ctypesrg   i   s       tt "KK--   tt0E    tt $*? ++--Kk3'' 2!((11s*    
/ 
==A	 	
AAc                 :    t                      pt                      S )z9Returns glibc version string, or None if not using glibc.)rZ   rg   rC   r>   r   _glibc_version_stringri      s    (**L.J.L.LLr>   rf   c                .   t          j        d|           }|s/t          j        d|  t          d           t          dd          S t          t          |                    d                    t          |                    d                              S )a3  Parse glibc version.

    We use a regexp instead of str.split because we want to discard any
    random junk that might come after the minor version -- this might happen
    in patched/forked versions of glibc (e.g. Linaro's version of glibc
    uses version strings like "2.20-2014.11"). See gh-3588.
    z$(?P<major>[0-9]+)\.(?P<minor>[0-9]+)z;Expected glibc version with 2 components major.minor, got:    )
stacklevelrI   rJ   )rematchwarningswarnRuntimeWarningrG   rH   group)rf   ms     r   _parse_glibc_versionru      s     	8+FFA %W+WW	
 	
 	
 	

 R$$$QWWW--..AGGG4D4D0E0EFFFr>   c                 `    t                      } | t          dd          S t          |           S )Nrm   )ri   rG   ru   )rf   s    r   _get_glibc_versionrw      s1    '))KR$$$,,,r>   r<   rY   c                <   t                      }||k     rdS 	 dd l}n# t          $ r Y dS w xY wt          |d          r6|                    |d         |d         |           }|t          |          S dS |t          dd          k    r$t          |d          rt          |j                  S |t          dd	          k    r$t          |d
          rt          |j                  S |t          dd          k    r$t          |d          rt          |j	                  S dS )NFr   Tmanylinux_compatibler   rk      manylinux1_compatible   manylinux2010_compatible   manylinux2014_compatible)
rw   
_manylinuxr^   hasattrry   r"   rG   r{   r}   r   )r<   rY   	sys_glibcr   results        r   _is_compatibler      sQ   "$$I7u   ttz122 00WQZNN<<t-1%%%%'*>U*V*V%J4555-2&&&&7., ,& J7888-2&&&&7., ,& J78884s    
++rk   r~   manylinux2014r|   manylinux2010rz   
manylinux1zdict[_GLibCVersion, str]_LEGACY_MANYLINUX_MAPIterator[str]c              #    K   t          t          j        |           sdS t          dd          }t	          |           ddhz  rt          dd          }t          t                       }|g}t          |j        dz
  dd          D ]2}t          |         }|	                    t          ||                     3| D ]}|D ]}|j        |j        k    r|j
        }nd}t          |j
        |d          D ]]}t          |j        |          }	t          ||	          r6 d	j        g |	|R  V  t                              |	          x}
r	|
 d
| V  ^dS )a  Generate manylinux tags compatible to the current platform.

    :param archs: Sequence of compatible architectures.
        The first one shall be the closest to the actual architecture and 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 manylinux-compatible.

    :returns: An iterator of compatible manylinux tags.
    Nrk      r   r8      r   rm   zmanylinux_{}_{}_{}rX   )r@   sysr!   rG   setrw   rangerI   rE   appendrJ   r   formatr   get)r4   too_old_glibc2current_glibcglibc_max_listglibc_majorglibc_minorr<   	glibc_max	min_minorglibc_version
legacy_tags              r   platform_tagsr      s       66 "1b))N
5zzXv&& -&q!,,!#5#7#78M#_N ]014a<< G G'4mKEEFFFF 5 5' 	5 	5I."666*0		 	$Y_iDD 5 5 -io{ K K!$66 55.5K}KdKKKKKK &;%>%>}%M%MMz 5!+44d444445	55 5r>   )r   r   r   r   )r!   r   r   r"   )r!   r   r4   r5   r   r"   )r   rO   )rf   r   r   rG   )r   rG   )r<   r   rY   rG   r   r"   )r4   r5   r   r   ))
__future__r   collections
contextlib	functoolsrR   rn   r   rp   typingr   r   r   r   _elffiler	   r
   r   r   r,   r-   r.   r:   contextmanagerr    r0   r3   r@   defaultdictrE   rN   rG   rZ   rg   ri   ru   	lru_cacherw   r   r   r   rC   r>   r   <module>r      sx   " " " " " " "             				 				 



  < < < < < < < < < < < < 8 8 8 8 8 8 8 8 8 8 8 8"       
 
 
 

 
 
 
9 9 9 9 %<K$;JJ$G$G  G G G G    J   
   &) ) ) )XM M M M
G G G G& - - - -   : M!R/M!R/M!Q3     +5 +5 +5 +5 +5 +5r>   