Ë L·ÂÛ÷¹zã ó—dZddlmZddlZddlZddlZ dZdZdZdZ dZ d Z d Z d Z d Zd ZdZdej"fdej$fdej$fdej"fdej"fdej"fdej"fgZ edej"fgzZ dej"fdej"fgZ dej$fdej$fdej"fdej"fdej"fgZ dej$fdej$fdej.fdej.fdej"fdej"fgZ dej"fdej"fgZ dej"fdej"fdej4dzfdej"fd ej"fd!ej"fd"ej"fd#ej$fd$ej$fd%ej"fdej"fg Z dej"fdej"fdej4dzfdej.fd ej.fd!ej.fd"ej.fd#ej$fd$ej$fd%ej"fdej"fg Z ed&ej"fd'ej"fgzZ ed(ej"fd)ej"fd'ej"fd*ej"fgzZ d+„Zd2d,„Z d-„Z!d.„Z"d2d/„Z#d0„Z$d1„Z%y)3a½ This module contains function to analyse dynamic library headers to extract system information Currently only for MacOSX Library file on macosx system starts with Mach-O or Fat field. This can be distinguish by first 32 bites and it is called magic number. Proper value of magic number is with suffix _MAGIC. Suffix _CIGAM means reversed bytes order. Both fields can occur in two types: 32 and 64 bytes. FAT field inform that this library contains few version of library (typically for different types version). It contains information where Mach-O headers starts. Each section started with Mach-O header contains one library (So if file starts with this field it contains only one version). After filed Mach-O there are section fields. Each of them starts with two fields: cmd - magic number for this command cmdsize - total size occupied by this section information. In this case only sections LC_VERSION_MIN_MACOSX (for macosx 10.13 and earlier) and LC_BUILD_VERSION (for macosx 10.14 and newer) are interesting, because them contains information about minimal system version. Important remarks: - For fat files this implementation looks for maximum number version. It not check if it is 32 or 64 and do not compare it with currently built package. So it is possible to false report higher version that needed. - All structures signatures are taken form macosx header files. - I think that binary format will be more stable than `otool` output. and if apple introduce some changes both implementation will need to be updated. - The system compile will set the deployment target no lower than 11.0 for arm64 builds. For "Universal 2" builds use the x86_64 deployment target when the arm64 target is 11.0. é)Ú annotationsNl¾:ýlÊ~u}l¿:ýlÊ~ulÎzÛ}lþmõlÏzÛ}lþmõé$é2i ÚmagicÚcputypeÚ cpusubtypeÚfiletypeÚncmdsÚ sizeofcmdsÚflagsÚreservedÚ nfat_archÚoffsetÚsizeÚalignÚcmdÚcmdsizeÚsegnameéÚvmaddrÚvmsizeÚfileoffÚfilesizeÚmaxprotÚinitprotÚnsectsÚversionÚsdkÚplatformÚminosÚntoolscóH—|dzdz|dzdzz|dz dzz|dz dzzS)Nél~éiÿéÿéÿ©)Úxs ú9/usr/lib/python3.12/site-packages/wheel/macosx_libfile.pyÚswap32r*ñsH€à ˆr‰'�ZÑ Ø �‰F�jÑ ñ "à �‰F�jÑ ñ "ð �‰G�zÑ !ñ #ðócóö—|€|j«}n|j|«tjj |j tj tj«««j}|ttttfvr@tjdk(rtj}ntj}t!|«}ntj"}|j|«||fS)NÚlittle)ÚtellÚseekÚctypesÚc_uint32Úfrom_buffer_copyÚreadÚsizeofÚvalueÚ FAT_CIGAMÚ FAT_CIGAM_64ÚMH_CIGAMÚ MH_CIGAM_64ÚsysÚ byteorderÚBigEndianStructureÚLittleEndianStructurer*Ú Structure)Úlib_filer/Ú magic_numberÚ BaseClasss r)Úget_base_class_and_magic_numberrBús´€Ø €|Ø�}‰}‹‰à� ‰ �dÔÜ—?‘?×3Ñ3Ø� ‰ ”f—m‘m¤F§O¡OÓ4Ó5óç �eðð œ ¤<´¼;ÐGÑGÜ �=‰=˜HÒ $Ü×1Ñ1‰Iä×4Ñ4ˆIä˜lÓ+‰ ä×$Ñ$ˆ à ‡M�M�$ÔØ �lÐ "Ð"r+cóh—|j|jtj|«««S©N)r2r3r0r4)Ú struct_classr?s r)Ú read_datarFs%€Ø × (Ñ (¨¯©´v·}±}À\Ó7RÓ)SÓ TÐTr+có—t|d«5}t|d«\}}|tttt fvr ddd«y|tt fvréGd„d|«}t||«}|tk(r Gd„d|«}n Gd„d|«}t|j«D�cgc]}t||«‘Œ}}g} |D]S} t|| j«} | �8| jtk(rt|«dk7r| d k(rŒC| j| «ŒUt| «dkDrt#| «cddd«S ddd«y t|d«cddd«Scc}w#t $rYŒ¨wxYw#t $r  Yddd«ywxYw#1swYyxYw) NÚrbrcó—eZdZeZy)ú4extract_macosx_min_system_version..FatHeaderN)Ú__name__Ú __module__Ú __qualname__Úfat_header_fieldsÚ_fields_r'r+r)Ú FatHeaderrJs„Ø,‘r+rPcó—eZdZeZy©ú2extract_macosx_min_system_version..FatArchN)rKrLrMÚfat_arch_fieldsrOr'r+r)ÚFatArchrS$s„Ø.‘Hr+rUcó—eZdZeZyrR)rKrLrMÚfat_arch_64_fieldsrOr'r+r)rUz2extract_macosx_min_system_version..FatArch)s„Ø1‘Hr+é)é rr)ÚopenrBÚ FAT_MAGICÚ FAT_MAGIC_64ÚMH_MAGICÚ MH_MAGIC_64r7rFÚrangerÚread_mach_headerrrÚCPU_TYPE_ARM64ÚlenÚappendÚ ValueErrorÚmax) Ú path_to_libr?rAr@rPÚ fat_headerrUÚ_Ú fat_arch_listÚ versions_listÚelrs r)Ú!extract_macosx_min_system_versionrls¡€Ü ˆk˜4Ô  HÜ"AÀ(ÈAÓ"Nш �<Ø ¤ ¬<¼Ä;ÐOÑ OØ ÷ !Ð ð œI¤|Ð4Ñ 4ô -˜Iô -ô# 9¨hÓ7ˆJØœyÒ(ô/˜iõ/ô 2˜iô2ô7<¸J×EÃ6E8Ã7EÄE8Ä,E8Ä7 E Å E8Å EÅE8ÅEÅE8Å E5Å*E8Å4E5Å5E8Å8Fcó”—|�|j|«t|«\}}|tk(rdnd}Gd„d|«}|dk(r Gd„d|«}n Gd„d|«}t||«}t |j «D]Ï}|j «} t||«} |j| «| jtk(r.Gd „d |«} t| |«} t| j«cS| jtk(r.Gd „d |«} t| |«} t| j«cS|j| | jz«ŒÑy) z© This funcition parse mach-O header and extract information about minimal system version :param lib_file: reference to opened library file with pointer NÚ32Ú64có—eZdZeZy)ú%read_mach_header..SegmentBaseN)rKrLrMÚsegment_base_fieldsrOr'r+r)Ú SegmentBaserq\s„Ø&‰r+rscó—eZdZeZy©ú$read_mach_header..MachHeaderN)rKrLrMÚmach_header_fieldsrOr'r+r)Ú MachHeaderrvas„Ø)‰Hr+rxcó—eZdZeZyru)rKrLrMÚmach_header_fields_64rOr'r+r)rxz$read_mach_header..MachHeaderfs„Ø,‰Hr+có—eZdZeZy)ú+read_mach_header..VersionMinCommandN)rKrLrMÚversion_min_command_fieldsrOr'r+r)ÚVersionMinCommandr|ps„Ø5‘r+r~có—eZdZeZy)ú&read_mach_header..VersionBuildN)rKrLrMÚbuild_version_command_fieldsrOr'r+r)Ú VersionBuildr€ws„Ø7‘r+r‚)r/rBr]rFr_r r.rÚLC_VERSION_MIN_MACOSXÚ parse_versionrÚLC_BUILD_VERSIONr r)r?r/Ú base_classr@ÚarchrsrxÚ mach_headerÚ_iÚposÚ segment_baser~Ú version_infor‚s r)r`r`Ps5€ð ÐØ� ‰ �dÔÜ>¸xÓHÑ€J� ؤ8Ò+‰4°€Dô'�jô'ð ˆt‚|ô *˜õ *ô  -˜ô -ô˜J¨Ó1€KÜ�K×%Ñ%Ö&ˆØ�m‰m‹oˆÜ  ¨hÓ7ˆ Ø� ‰ �cÔØ × Ñ Ô4Ò 4ô 6 Jô 6ô%Ð%6¸ÓAˆLÜ  ×!5Ñ!5Ó6Ò 6Ø × Ñ Ô!1Ò 1ô 8˜zô 8ô% \°8Ó<ˆLÜ  ×!3Ñ!3Ó4Ò 4à �M‰M˜#  × 4Ñ 4Ñ4Ô 5Ø ñ)'r+có6—|dzdz }|dzdz }|dz}|||fS)Nlþrr%r$r&r')rr(ÚyÚzs r)r„r„�s5€Ø �:Ñ  "Ñ$€AØ �:Ñ  !Ñ#€AØ�*Ñ€AØ ˆa�ˆ7€Nr+c óÆ—|jd«\}}}td„|jd«D««}|dd}|ddkDr|ddf}t|«dk(sJ‚dtjvr©td „tjdjd«D««}|dd}|ddkDr|ddf}||kr\t j jd jdjd „|D««djd „|D««««n|}t|«dk(sJ‚|}i}tj|«D]w\}} } | D]l} | jd «s| jd«sŒ&tjj|| «} t| «} | €ŒT| dd} | ddkDr| ddf} | || <ŒnŒyt|«dkDr#t|t|j«««}dj|D�cgc] }t!|«‘Œc}«}||kr±|j#«D��cgc] \}}||kDsŒ |‘Œ}}}dj|«}t|«dk(rd}nd}d|zdz|zdz|z}dtjvr|jd«}n|jd«}t j j|«|dz|zdz|z}|Scc}wcc}}w)zŠ Calculate proper macosx platform tag basing on files which are included to wheel Example platform tag `macosx-10.14-x86_64` Ú-c3ó2K—|]}t|«–—Œy­wrD©Úint©Ú.0r(s r)Ú z0calculate_macosx_platform_tag..�sèø€ÐAÑ)@ Aœ˜QŸÑ)@ùó‚Ú.Néré ÚMACOSX_DEPLOYMENT_TARGETc3ó2K—|]}t|«–—Œy­wrDr“r•s r)r—z0calculate_macosx_platform_tag..•sèø€ð ÙM�qŒC��FÑMùr˜z™[WARNING] MACOSX_DEPLOYMENT_TARGET is set to a lower value ({}) than the version on which the Python interpreter was compiled ({}), and will be ignored. c3ó2K—|]}t|«–—Œy­wrD©Ústrr•s r)r—z0calculate_macosx_platform_tag.. sèø€Ð;©]¨œS ŸV©]ùr˜c3ó2K—|]}t|«–—Œy­wrDrŸr•s r)r—z0calculate_macosx_platform_tag..¡sèø€Ð:©\¨œS ŸV©\ùr˜z.dylibz.sorhÚ rXz this filez these filesz}[WARNING] This wheel needs a higher macOS version than {} To silence this warning, set MACOSX_DEPLOYMENT_TARGET to at least z or recreate z( with lower MACOSX_DEPLOYMENT_TARGET: z,is set in MACOSX_DEPLOYMENT_TARGET variable.z8the version your Python interpreter is compiled against.)ÚsplitÚtuplerbÚosÚenvironr:ÚstderrÚwriteÚformatÚjoinÚwalkÚendswithÚpathrlreÚvaluesr Úitems)Ú archive_rootÚ platform_tagÚprefixÚ base_versionÚsuffixÚ deploy_targetÚ start_versionÚ versions_dictÚdirpathÚ _dirnamesÚ filenamesÚfilenameÚlib_pathÚmin_verr(Úfin_base_versionÚkÚvÚproblematic_filesÚ files_formÚ error_messages r)Úcalculate_macosx_platform_tagrĈs(€ð $0×#5Ñ#5°cÓ#:Ñ €FˆL˜&ÜÑA¨×);Ñ);¸CÔ)@ÓAÓA€LØ  Ð#€LØ�A�˜ÒØ$ Q™¨Ð+ˆ Ü ˆ|Ó  Ò !Ð!Ð !Ø!¤R§Z¡ZÑ/Üñ ÜŸJ™JÐ'AÑB×HÑHÈÔMó ó ˆ ð& b qÐ)ˆ Ø ˜Ñ ˜bÒ Ø*¨1Ñ-¨qÐ1ˆMØ ˜<Ò 'Ü �J‰J× Ñ ð%ç%+¡VØ—H‘HÑ;©]Ó;Ó;Ø—H‘HÑ:©\Ó:Ó:ó&õ ð)ˆLä ˆ|Ó  Ò !Ð!Ð !Ø €MØ€MÜ)+¯©°Ö)>Ñ%ˆ�˜IÛ!ˆHØ× Ñ  Ô*¨h×.?Ñ.?ÀÕ.FÜŸ7™7Ÿ<™<¨°Ó:�Ü;¸HÓE�ØÑ&Ø% a¨˜l�Gؘq‘z B’Ø#*¨1¡:¨q /˜Ø.5�M (Ò+ñ"ð*?ô ˆ=Ó˜AÒܘ<¬¨]×-AÑ-AÓ-CÓ)DÓEˆ ð—x‘x±Ó >±¨A¤ Q¥°Ñ >Ó?ÐØ�|Ò#Ø+8×+>Ñ+>Ô+@ÔVÑ+@¡4 1 aÀAÈ ÓDUšQÐ+@ÐÑVØ ŸI™IÐ&7Ó8ÐÜ Ð Ó ! QÒ &Ø$‰Jà&ˆJð Qàñ ðñ ðñ  ð ,ñ  ,ð /@ñ  @ð ð &¬¯©Ñ 3Ø)×0Ñ0Ø>ó‰Mð*×0Ñ0ØJóˆMô � ‰ ×јÔ'à˜C‘<Ð"2Ñ2°SÑ8¸6ÑA€LØ Ðùò=!?ùãVsÇ9KÈ* KÈ8KrD)&Ú__doc__Ú __future__rr0r¥r:r[r6r\r7r]r8r^r9rƒr…rar1Úc_intrwrzrNrTÚc_uint64rWrrÚc_charÚsegment_command_fieldsÚsegment_command_fields_64r}r�r*rBrFrlr`r„rÄr'r+r)ÚrÌsŠðñ&õP#ã Û Û à?à € Ø € Ø€ Ø€ Ø €Ø €Ø€ Ø€ àÐØÐà€ð ˆf�o‰oÐØ�— ‘ ÐØ�6—<‘<Ð Ø�—‘Ð!Ø ˆf�o‰oÐØ�6—?‘?Ð#Ø ˆf�o‰oÐðÐð ð+¨z¸6¿?¹?Ð.KÐ-LÑLÐð ð˜vŸ™Ð/°+¸v¿¹Ð1OÐPÐðð�— ‘ ÐØ�6—<‘<Ð Ø ˆv�‰ÐØ ˆV�_‰_ÐØ ˆf�o‰oÐð €ðð�— ‘ ÐØ�6—<‘<Ð Ø ˆv�‰ÐØ ˆV�_‰_ÐØ ˆf�o‰oÐØ�—‘Ð!ð Ðð ð˜vŸ™Ð/°)¸V¿_¹_Ð1MÐNÐØ#ð ˆF�O‰OÐØ�—‘Ð Ø�— ‘  Ñ"Ð#Ø ˆv�‰ÐØ ˆv�‰ÐØ�—‘Ð Ø�—‘Ð!Ø�— ‘ ÐØ�—‘ÐØ ˆv�‰ÐØ ˆf�o‰oÐð Ððð$ ˆF�O‰OÐØ�—‘Ð Ø�— ‘  Ñ"Ð#Ø ˆv�‰ÐØ ˆv�‰ÐØ�—‘Ð Ø�—‘Ð!Ø�— ‘ ÐØ�—‘ÐØ ˆv�‰ÐØ ˆf�o‰oÐð Ððð 1Ø�—‘Ð Ø ˆF�O‰OÐð4ñÐð ð 3Ø�—‘Ð!Ø ˆf�o‰oÐØ ˆF�O‰OÐØ ˆv�‰Ðð 6ñ Ðð òó#ò0Uò7ót.òbóOr+