
    {cm"                     J   U 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mZ ddlmZmZmZmZ dZdZdZej        ded	e	ee         ddf         fd
            Zded	efdZded	efdZdeded	efdZ e j        d           Zeeef         e d<    G d de          Z!d	ee         fdZ"d	ee         fdZ#d	ee         fdZ$ded	eeef         fdZ% ej&                    d	eeef         fd            Z'dedede!d	efdZ(dddd Z)d!eded	e
e         fd"Z*dS )#    N)Dict	GeneratorIterator
NamedTupleOptionalTuple   )EIClassEIDataELFFileEMachinel      ~ i   i   pathreturnc              #      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     6/usr/lib/python3/dist-packages/packaging/_manylinux.py
_parse_elfr      s      $ 	!**	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Y
+   





s,   A  3A  7A  7A   AA
executablec                 <   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_armhfr'      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_i686r*   )   s    	J		 
1TM +
gk)+
fj(+ 	X]*		

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA!!A%(A%archc                 ^    |dk    rt          |           S |dk    rt          |           S |dv S )Narmv7li686>   ppc64s390xx86_64aarch64ppc64le)r'   r*   )r   r+   s     r   _have_compatible_abir4   3   s>    xz***v~~j)))EEE    c                      dS )N2    r8   r5   r   <lambda>r9   @   s    B r5   _LAST_GLIBC_MINORc                   $    e Zd ZU eed<   eed<   dS )_GLibCVersionmajorminorN)__name__
__module____qualname__int__annotations__r8   r5   r   r<   r<   C   s"         JJJJJJJJr5   r<   c                      	  t          t          d          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.
    confstrCS_GNU_LIBC_VERSIONN)getattrosrsplitAssertionErrorAttributeErrorr   r   )version_string_versions      r   _glibc_version_string_confstrrO   H   sv    4gb)445JKK)))#**,,
77NGZ@   tt Ns   9< 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_versionrK   c_char_prestype
isinstancestrdecode)rR   process_namespacerU   version_strs       r   _glibc_version_string_ctypesr]   [   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.)rO   r]   r8   r5   r   _glibc_version_stringr_      s    (**L.J.L.LLr5   r\   c                     t          j        d|           }|st          j        d|  t                     dS t          |                    d                    t          |                    d                    f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: rb   r=   r>   )rematchwarningswarnRuntimeWarningrB   group)r\   ms     r   _parse_glibc_versionrj      s     	8+FFA # # #	
 	
 	

 vqwww  #aggg&6&6"7"777r5   c                  D    t                      } | dS t          |           S )Nra   )r_   rj   )r\   s    r   _get_glibc_versionrl      s&    '))Kx,,,r5   namerN   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	         manylinux1_compatible   manylinux2010_compatible   manylinux2014_compatible)
rl   
_manylinuxrS   hasattrro   boolr<   rr   rt   rv   )rm   r+   rN   	sys_glibcrw   results         r   _is_compatibler|      sL   "$$I7u   ttz122 00WQZNN<<t-1%%%%:677 	:
8999-2&&&&:9:: 	=
;<<<-2&&&&:9:: 	=
;<<<4s    
++manylinux2014manylinux2010
manylinux1))rp   ru   )rp   rs   )rp   rq   linuxc              #     K   t          t          j        |          sd S t          dd          }|dv rt          dd          }t          t	                       }|g}t          |j        dz
  dd          D ]2}t          |         }|                    t          ||                     3|D ]}|j        |j        k    r|j	        }nd}t          |j	        |d          D ]}t          |j        |          }	 dj
        |	 }
t          |
||	          r|                     d|
          V  |	t          v r6t          |	         }t          |||	          r|                     d|          V  d S )	Nrp      >   r.   r1      r	   rb   zmanylinux_{}_{}r   )r4   sysr   r<   rl   ranger=   r:   appendr>   formatr|   replace_LEGACY_MANYLINUX_MAP)r   r+   too_old_glibc2current_glibcglibc_max_listglibc_majorglibc_minor	glibc_max	min_minorglibc_versiontag
legacy_tags               r   platform_tagsr      s     55 "1b))N!!!&q!,,!#5#7#78M#_N ]014a<< G G'4mKEEFFFF# = =	?n222&,II I )R@@ 		= 		=K))/;GGM*#*M:Cc477 2mmGS11111 5552=A
!*dMBB =--<<<<<		== =r5   )+collections
contextlib	functoolsrH   rc   r   re   typingr   r   r   r   r   r   _elffiler
   r   r   r   r#   r$   r%   contextmanagerrY   r   ry   r'   r*   r4   defaultdictr:   rB   rC   r<   rO   r]   r_   rj   	lru_cacherl   r|   r   r   r8   r5   r   <module>r      s                				 				 



  I I I I I I I I I I I I I I I I 8 8 8 8 8 8 8 8 8 8 8 8"  S Yx'8$'DE    
 
 
 
 
 

s 
t 
 
 
 
FS F F F F F F %<K$;JJ$G$G 4S> G G G    J   
x}    &)hsm ) ) ) )XMx} M M M M
8c 8eCHo 8 8 8 8& -E#s(O - - - - C - D    8   "= "=C "=HSM "= "= "= "= "= "=r5   