U ʗRe,@szUddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z GdddZe edddZeddd Zedd d Zeed d dZeddZe eefed<Gddde Ze edddZe edddZe edddZee eefdddZee eefdddZeeeedd d!Z d"d#d$d%Z!eee ed&d'd(Z"dS))N)IODictIterator NamedTupleOptionalTuplec@s`eZdZGdddeZdZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zeed dddZd S)_ELFFileHeaderc@seZdZdZdS)z$_ELFFileHeader._InvalidELFFileHeaderz7 An invalid ELF file header was found. N)__name__ __module__ __qualname____doc__r r /builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/packaging/_manylinux.py_InvalidELFFileHeadersriFLE(>l~iiN)filereturncszttdfdd }|d|_|j|jkr2t|d|_|j|j|jhkrVt|d|_ |j |j |j hkrzt|d|_ |d|_ |d|_d|_|j |j krdnd}|j |j krd nd}|j |j krd nd }|j|jkr|n|}|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_dS) N)fmtrcsHz t|}t||}Wntjk r>tYnX|dS)Nr)readstructcalcsizeunpackerrorrr)rdataresultrr rr$s z'_ELFFileHeader.__init__..unpackz>IBzHzQ)strint e_ident_magicELF_MAGIC_NUMBERrr e_ident_class ELFCLASS32 ELFCLASS64 e_ident_data ELFDATA2LSB ELFDATA2MSBe_ident_version e_ident_osabie_ident_abiversionr e_ident_pade_type e_machine e_versione_entrye_phoffe_shoffe_flagse_ehsize e_phentsizee_phnum e_shentsizee_shnum e_shstrndx)selfrrformat_hformat_iformat_qformat_pr r r__init__#s>                    z_ELFFileHeader.__init__)r r r ValueErrorrr&r(r)r+r,EM_386EM_S390EM_ARM EM_X86_64EF_ARM_ABIMASKEF_ARM_ABI_VER5EF_ARM_ABI_FLOAT_HARDrbytesrCr r r rrsr)rc CsHz$ttjd}t|}W5QRXWntttjfk rBYdSX|S)Nrb)opensys executablerOSError TypeErrorr)f elf_headerr r r_get_elf_headerLs rUcCsnt}|dkrdS|j|jk}||j|jkM}||j|jkM}||j|j@|j kM}||j|j @|j kM}|SNF) rUr'r(r*r+r2rGr7rIrJrKrTrr r r_is_linux_armhfUs   rXcCsBt}|dkrdS|j|jk}||j|jkM}||j|jkM}|SrV)rUr'r(r*r+r2rErWr r r_is_linux_i686hs rY)archrcCs$|dkrtS|dkrtS|dkS)Narmv7li686>ppc64x86_64s390xppc64leaarch64)rXrY)rZr r r_have_compatible_abirs rbcCsdS)N2r r r r rrd_LAST_GLIBC_MINORc@seZdZUeed<eed<dS) _GLibCVersionmajorminorN)r r r r$__annotations__r r r rrgs rgc CsJz&td}|dk st|\}}Wnttttfk rDYdSX|S)zJ Primary implementation of glibc_version_string using os.confstr. CS_GNU_LIBC_VERSIONN)osconfstrAssertionErrorsplitAttributeErrorrQrD)version_string_versionr r r_glibc_version_string_confstrs  rtcCsz ddl}Wntk r"YdSXz|d}Wntk rHYdSXz |j}Wntk rjYdSX|j|_|}t|t s| d}|S)zG Fallback implementation of glibc_version_string using ctypes. rNascii) ctypes ImportErrorCDLLrQgnu_get_libc_versionrpc_char_prestype isinstancer#decode)rvprocess_namespacery version_strr r r_glibc_version_string_ctypess"    rcCs tp tS)z9Returns glibc version string, or None if not using glibc.)rtrr r r r_glibc_version_stringsr)rrcCs@td|}|s$td|tdSt|dt|dfS)a3Parse 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[0-9]+)\.(?P[0-9]+)z=Expected glibc version with 2 components major.minor, got: %srrhri)rematchwarningswarnRuntimeWarningr$group)rmr r r_parse_glibc_versions rcCst}|dkrdSt|S)Nr)rr)rr r r_get_glibc_versionsr)namerZrsrcCst}||krdSz ddl}Wntk r4YdSXt|drj||d|d|}|dk rft|SdS|tddkrt|drt|jS|tdd krt|d rt|jS|tdd krt|d rt|j SdS) NFrTmanylinux_compatiblerrmanylinux1_compatible manylinux2010_compatiblemanylinux2014_compatible) r _manylinuxrwhasattrrboolrgrrr)rrZrs sys_glibcrrr r r_is_compatibles,        r manylinux2014 manylinux2010 manylinux1))rr)rr)rr)linuxrZrc cst|s dStdd}|dkr(tdd}tt}|g}t|jdddD]}t|}|t||qJ|D]}|j|jkr|j}nd}t|j|dD]^}t|j|} dj| } t | || r| d| V| t krt | } t | || r| d| VqqldS) Nr>r^r\rrzmanylinux_{}_{}r) rbrgrrangerhrfappendriformatrreplace_LEGACY_MANYLINUX_MAP) rrZtoo_old_glibc2 current_glibcglibc_max_list glibc_major glibc_minor glibc_max min_minor glibc_versiontag legacy_tagr r r platform_tags s.        r)# collections functoolsrlrrrOrtypingrrrrrrrrUrrXrYr#rb defaultdictrfr$rjrgrtrrr lru_cacherrrrr r r rs6 =   ,