hyb
2025-12-23 10f3a1daddfbc7fa3dd2069197d83e8b6ef19176
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Ë
?ñúh¼@ã ó†—dZddlmZddlZddlZddlZddlmZddlm    Z    e    rddlm
Z
e
e eje fZ     dZdZd    Zd
Zd Zd Zd ZdZdZdZdZdej2fdej4fdej4fdej2fdej2fdej2fdej2fgZ    edej2fgzZ    dej2fdej2fgZ    dej4fdej4fdej2fdej2fdej2fgZ    dej4fdej4fdej>fdej>fdej2fdej2fgZ     dej2fdej2fgZ!    dej2fdej2fd ejDd!zfd"ej2fd#ej2fd$ej2fd%ej2fd&ej4fd'ej4fd(ej2fdej2fg Z#    dej2fdej2fd ejDd!zfd"ej>fd#ej>fd$ej>fd%ej>fd&ej4fd'ej4fd(ej2fdej2fg Z$    e!d)ej2fd*ej2fgzZ%    e!d+ej2fd,ej2fd*ej2fd-ej2fgzZ&    d5d.„Z'    d6                    d7d/„Z(d8d0„Z)d9d1„Z*    d6                    d:d2„Z+d;d3„Z,d<d4„Z-y)=a½
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.
é)Ú annotationsN)ÚBufferedIOBase)Ú TYPE_CHECKING)ÚUnionl¾:ý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 úGH:\Change_password\venv_build\Lib\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_filer2Ú magic_numberÚ    BaseClasss    r,Úget_base_class_and_magic_numberrEs¶€ð €|؏}‰}‹‰à ‰ 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)r5r6r3r7)Ú struct_classrBs  r,Ú    read_datarIs%€Ø × (Ñ (¨¯©´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.<locals>.FatHeaderN)Ú__name__Ú
__module__Ú __qualname__Úfat_header_fieldsÚ_fields_r*r.r,Ú    FatHeaderrM(s„Ø,‘r.rScó—eZdZeZy©ú2extract_macosx_min_system_version.<locals>.FatArchN)rNrOrPÚfat_arch_fieldsrRr*r.r,ÚFatArchrV.s„Ø.‘Hr.rXcó—eZdZeZyrU)rNrOrPÚfat_arch_64_fieldsrRr*r.r,rXz2extract_macosx_min_system_version.<locals>.FatArch3s„Ø1‘Hr.é)é rr)ÚopenrEÚ    FAT_MAGICÚ FAT_MAGIC_64ÚMH_MAGICÚ MH_MAGIC_64r:rIÚrangerÚread_mach_headerrr
ÚCPU_TYPE_ARM64ÚlenÚappendÚ
ValueErrorÚmax) Ú path_to_librBrDrCrSÚ
fat_headerrXÚ_Ú fat_arch_listÚ versions_listÚelr s             r,Ú!extract_macosx_min_system_versionro s´€Ü     ˆk˜4Ó     ð6 HÜ"AÀ(ÈAÓ"Nш    <Ø ¤    ¬<¼Ä;ÐOÑ OØ ÷6ð6ð
œI¤|Ð4Ñ 4ô -˜Iô -ô# 9¨hÓ7ˆJØœyÒ(ô/˜iõ/ô
2˜iô2ô7<¸J×<PÑ<PÓ6QöØ12”    ˜' 8Õ,ðˆMðð9;ˆMØ#ò ðÜ.¨x¸¿¹ÓCGØÐ*ØŸ:™:¬Ò7¼CÀ Ó<NÐRSÒ<Sð '¨*Ò4Ø (Ø%×,Ñ,¨WÔ5øð ô$=Ó! AÒ%ܘ=Ó)÷[6ñ6ð^÷_6ð6ðd Ü'¨°!Ó4÷g6ñ6ùò*øô("òÙðûôò Ø?Ø÷m6ð6ðh ú÷i6ð6úsw)E8¿AE8ÂE Â.    E8Â8>EÃ6E8Ã7EÄE8Ä,E8Ä7 E Å E8Å    EÅE8ÅEÅE8Å 
E5Å*E8Å4E5Å5E8Å8Fcóp—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 function parses a Mach-O header and extracts
    information about the minimal macOS version.
 
    :param lib_file: reference to opened library file with pointer
    Ú32Ú64có—eZdZeZy)ú%read_mach_header.<locals>.SegmentBaseN)rNrOrPÚsegment_base_fieldsrRr*r.r,Ú SegmentBasertgs„Ø&‰r.rvcó—eZdZeZy©ú$read_mach_header.<locals>.MachHeaderN)rNrOrPÚmach_header_fieldsrRr*r.r,Ú
MachHeaderryls„Ø)‰Hr.r{có—eZdZeZyrx)rNrOrPÚmach_header_fields_64rRr*r.r,r{z$read_mach_header.<locals>.MachHeaderqs„Ø,‰Hr.có—eZdZeZy)ú+read_mach_header.<locals>.VersionMinCommandN)rNrOrPÚversion_min_command_fieldsrRr*r.r,ÚVersionMinCommandr{s„Ø5‘r.rcó—eZdZeZy)ú&read_mach_header.<locals>.VersionBuildN)rNrOrPÚbuild_version_command_fieldsrRr*r.r,Ú VersionBuildrƒ‚s„Ø7‘r.r…N)rEr`rIrbr r1r2rÚLC_VERSION_MIN_MACOSXÚ parse_versionr ÚLC_BUILD_VERSIONr#r)rBr2Ú
base_classrCÚarchrvr{Ú mach_headerÚ_iÚposÚ segment_baserÚ version_infor…s              r,rcrcZs*€ô ?¸xÈÓNÑ€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*)r r+Ú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­wrG©Úint©Ú.0r+s  r,ú    <genexpr>z0calculate_macosx_platform_tag.<locals>.<genexpr>šsèø€ÒA Aœ˜QŸÑAùó‚ú.Néré
ÚMACOSX_DEPLOYMENT_TARGETc3ó2K—|]}t|«–—Œy­wrGr–r˜s  r,ršz0calculate_macosx_platform_tag.<locals>.<genexpr> sèø€ò
ØŒCFñ
ù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­wrG©Ústrr˜s  r,ršz0calculate_macosx_platform_tag.<locals>.<genexpr>«sèø€Ò;¨œS ŸVÑ;ùr›c3ó2K—|]}t|«–—Œy­wrGr¢r˜s  r,ršz0calculate_macosx_platform_tag.<locals>.<genexpr>¬sèø€Ò:¨œS ŸVÑ:ùr›z.dylibz.sorkú
r[z    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ÚtuplereÚosÚenvironr=ÚstderrÚwriteÚformatÚjoinÚwalkÚendswithÚpathrorhÚ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Ø02€MÜ)+¯©°Ó)>ò    6Ñ%ˆ˜IØ!ò    6ˆHØ× Ñ  Ô*¨h×.?Ñ.?ÀÕ.FÜŸ7™7Ÿ<™<¨°Ó:Ü;¸HÓEØÑ&Ø% a¨˜lGؘq‘z B’Ø#*¨1¡:¨q /˜Ø.5M (Ò+ñ    6ð    6ô ˆ=Ó˜AÒܘ<¬¨]×-AÑ-AÓ-CÓ)DÓEˆ ð—x‘x°Ö >¨A¤ Q¥Ò >Ó?ÐØ|Ò#Ø+8×+>Ñ+>Ó+@×V¡4 1 aÀAÈ ÓDUšQÐVÐÑ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È8K)r+r—Úreturnr—rG)rBrr2ú
int | NonerÈz"tuple[type[ctypes.Structure], int])rHztype[ctypes.Structure]rBr)rir£)rBrr2rÉrÈztuple[int, int, int] | None)r r—rÈztuple[int, int, int])r³ÚStrPathr´r£rÈr£).Ú__doc__Ú
__future__rr3r¨r=ÚiorÚtypingrrr£ÚPathLikerÊr^r9r_r:r`r;rar<r†rˆrdr4Úc_intrzr}rQrWÚc_uint64rZruÚc_charÚsegment_command_fieldsÚsegment_command_fields_64r€r„r-rErIrorcr‡rÇr*r.r,ú<module>rÕsìðñ&õP#ã Û    Û
ÝÝ áÝàC˜Ÿ™ SÑ)Ð)Ñ*€Gà?à €    Ø €    Ø€ Ø€ Ø €Ø €Ø€ Ø€ àÐØÐà€ð ˆ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ñ Ðð
óðð#Øð#à
ð#ð(ó#ó6Uó7ðxð/Øð/à
ð/ð!ó/ódôOr.