
    lc,                    P   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  G d d          Zd&dZd'd
Zd'dZd(dZ ej        d           Zded<    G d de          Zd)dZd)dZd)dZd*dZ ej                    d+d            Zd,dZdd d!d"Zd-d%ZdS ).    )annotationsN)IOIterator
NamedTuplec                  b    e Zd Z G d de          ZdZdZdZdZdZ	dZ
dZdZd	Zd
ZdZdZddZdS )_ELFFileHeaderc                      e Zd ZdZdS )$_ELFFileHeader._InvalidELFFileHeaderz7
        An invalid ELF file header was found.
        N)__name__
__module____qualname____doc__     E/usr/lib/python3/dist-packages/wheel/vendored/packaging/_manylinux.py_InvalidELFFileHeaderr
      s        	 	 	 	r   r   iFLE            (   >   l      ~ i   i   file	IO[bytes]returnNonec                R   dfd} |d          | _         | j         | j        k    rt                                           |d          | _        | j        | j        | j        hvrt                                           |d          | _        | j        | j        | j	        hvrt                                           |d          | _
         |d          | _         |d          | _                            d          | _        | j        | j        k    rd	nd
}| j        | j        k    rdnd}| j        | j        k    rdnd}| j        | j        k    r|n|} ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _         ||          | _        d S )Nfmtstrr   intc                    	                      t          j        |                     }t          j        | |          }n,# t          j        $ r t
                                          w xY w|d         S )Nr   )readstructcalcsizeunpackerrorr   r   )r   dataresultr   s      r   r%   z'_ELFFileHeader.__init__.<locals>.unpack&   so    =yy!5!566*0-T*B*B< = = =$::<<<=!9s   <A   )A)z>IB   z<Hz>Hz<Iz<Qz>Q)r   r   r   r    )e_ident_magicELF_MAGIC_NUMBERr   r   e_ident_class
ELFCLASS32
ELFCLASS64e_ident_dataELFDATA2LSBELFDATA2MSBe_ident_versione_ident_osabie_ident_abiversionr"   e_ident_pade_type	e_machine	e_versione_entrye_phoffe_shoffe_flagse_ehsizee_phentsizee_phnume_shentsizee_shnum
e_shstrndx)selfr   r%   format_hformat_iformat_qformat_ps    `     r   __init__z_ELFFileHeader.__init__%   sR   	 	 	 	 	 	 $VD\\!666 66888#VC[[dot%GGG 66888"F3KKT%5t7G$HHH 66888%vc{{#VC[["(&++99Q<<,0@@@44d,0@@@44d,0@@@44d#1T_DD88(fX&&))))vh''vh''vh''vh''x((!6(++vh''!6(++vh'' &**r   N)r   r   r   r   )r   r   r   
ValueErrorr   r,   r.   r/   r1   r2   EM_386EM_S390EM_ARM	EM_X86_64EF_ARM_ABIMASKEF_ARM_ABI_VER5EF_ARM_ABI_FLOAT_HARDrI   r   r   r   r   r      s            
   
 "JJKKFGFIN O&&+ &+ &+ &+ &+ &+r   r   r   _ELFFileHeader | Nonec                     	 t          t          j        d          5 } t          |           }d d d            n# 1 swxY w Y   n## t          t
          t          j        f$ r Y d S w xY w|S )Nrb)opensys
executabler   OSError	TypeErrorr   )f
elf_headers     r   _get_elf_headerr\   N   s    #.$'' 	+1'**J	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+Y DE   tts-   A 8A <A < A A$#A$boolc                    t                      } | dS | j        | j        k    }|| j        | j        k    z  }|| j        | j        k    z  }|| j        | j        z  | j	        k    z  }|| j        | j
        z  | j
        k    z  }|S NF)r\   r-   r.   r0   r1   r8   rM   r=   rO   rP   rQ   r[   r(   s     r   _is_linux_armhfra   W   s     !""Ju%)>>F
j%)???F
j"j&777F
Z66		#$ $F Z==		)* *F Mr   c                     t                      } | dS | j        | j        k    }|| j        | j        k    z  }|| j        | j        k    z  }|S r_   )r\   r-   r.   r0   r1   r8   rK   r`   s     r   _is_linux_i686rc   j   sW     ""Ju%)>>F
j%)???F
j"j&777FMr   archr   c                Z    | dk    rt                      S | dk    rt                      S | dv S )Narmv7li686>   ppc64s390xx86_64aarch64ppc64le)ra   rc   )rd   s    r   _have_compatible_abirm   t   s:    x   v~~EEEr   c                     dS )N2   r   r   r   r   <lambda>rp      s    B r   zdict[int, int]_LAST_GLIBC_MINORc                  $    e Zd ZU ded<   ded<   dS )_GLibCVersionr    majorminorN)r   r   r   __annotations__r   r   r   rs   rs      s"         JJJJJJJJr   rs   
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splitAssertionErrorAttributeErrorrX   rJ   )version_string_versions      r   _glibc_version_string_confstrr      sl    $9::)))#))++
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CDLLrX   gnu_get_libc_versionr~   c_char_prestype
isinstancer   decode)r   process_namespacer   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.)r   r   r   r   r   _glibc_version_stringr      s    (**L.J.L.LLr   r   tuple[int, int]c                    t          j        d|           }|st          j        d| z  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: %sr   rt   ru   )rematchwarningswarnRuntimeWarningr    group)r   ms     r   _parse_glibc_versionr      s|     	8+FFA $%	
 	
 	

 vqwww  #aggg&6&6"7"777r   c                 D    t                      } | dS t          |           S )Nr   )r   r   )r   s    r   _get_glibc_versionr      s&    '))Kx,,,r   namer   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   r      manylinux1_compatible   manylinux2010_compatible   manylinux2014_compatible)
r   
_manylinuxr   hasattrr   r]   rs   r   r   r   )r   rd   r   	sys_glibcr   r(   s         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))r   r   )r   r   )r   r   linuxIterator[str]c              #    K   t          |          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 )	Nr      >   rg   rj      r   r   zmanylinux_{}_{}r   )rm   rs   r   rangert   rq   appendru   formatr   replace_LEGACY_MANYLINUX_MAP)r   rd   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     %% "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 =--<<<<<		== =r   )r   rR   )r   r]   )rd   r   r   r]   )r   rw   )r   r   r   r   )r   r   )r   r   rd   r   r   rs   r   r]   )r   r   rd   r   r   r   )
__future__r   collections	functoolsrz   r   r#   rV   r   typingr   r   r   r   r\   ra   rc   rm   defaultdictrq   rv   rs   r   r   r   r   	lru_cacher   r   r   r   r   r   r   <module>r      s   " " " " " " "         				 				  



  + + + + + + + + + +:+ :+ :+ :+ :+ :+ :+ :+z      &   F F F F %<K$;JJ$G$G  G G G G    J   
   &) ) ) )XM M M M
8 8 8 8& - - - -   8   "= "= "= "= "= "=r   