zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
U
G=®dõvã@sNdZddlZddlZddlZddlZddlmZmZmZm    Z    m
Z
ddl m Z m Z ddlmZddlmZddlZejZejZejZejZejejejejfZej dko®ej!dkZ"e"rÂd    Z#d
Z$d Z%n d Z#d Z$dZ%dddœZ&Gdd„dƒZ'Gdd„dƒZ(dd„Z)dd„Z*dd„Z+dd„Z,d$dd„Z-e)ƒZ.e.d kr:ed!e.ƒ‚Gd"d#„d#e ƒZ/dS)%a distutils.msvc9compiler
 
Contains MSVCCompiler, an implementation of the abstract CCompiler class
for the Microsoft Visual Studio 2008.
 
The module is compatible with VS 2005 and VS 2008. You can find legacy support
for older versions of VS in distutils.msvccompiler.
éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ    LinkError)Ú    CCompilerÚgen_lib_options)Úlog)Ú get_platformÚwin32lz1Software\Wow6432Node\Microsoft\VisualStudio\%0.1fz5Software\Wow6432Node\Microsoft\Microsoft SDKs\Windowsz,Software\Wow6432Node\Microsoft\.NETFrameworkz%Software\Microsoft\VisualStudio\%0.1fz)Software\Microsoft\Microsoft SDKs\Windowsz Software\Microsoft\.NETFrameworkÚx86Úamd64©r z    win-amd64c@sPeZdZdZdd„ZeeƒZdd„ZeeƒZdd„ZeeƒZdd    „Ze    eƒZd
S) ÚRegz2Helper class to read values from the registry
    cCs:tD](}| ||¡}|r||kr||Sqt|ƒ‚dS©N)ÚHKEYSÚ read_valuesÚKeyError)ÚclsÚpathÚkeyÚbaseÚd©rúZD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\setuptools/_distutils/msvc9compiler.pyÚ    get_value?s
  z Reg.get_valuecCsnzt||ƒ}Wntk
r$YdSXg}d}zt||ƒ}Wntk
rTYqjYnX| |¡|d7}q.|S)zReturn list of registry keys.Nré)Ú RegOpenKeyExÚRegErrorÚ
RegEnumKeyÚappend)rrrÚhandleÚLÚiÚkrrrÚ    read_keysGs
 
 
z Reg.read_keysc    Cs†zt||ƒ}Wntk
r$YdSXi}d}zt||ƒ\}}}Wntk
rZYq‚YnX| ¡}| |¡|| |¡<|d7}q.|S)z`Return dict of registry keys and values.
 
        All names are converted to lowercase.
        Nrr)rrÚ RegEnumValueÚlowerÚ convert_mbcs)    rrrr!rr#ÚnameÚvalueÚtyperrrrYs
 
zReg.read_valuescCs:t|ddƒ}|dk    r6z |dƒ}Wntk
r4YnX|S)NÚdecodeÚmbcs)ÚgetattrÚ UnicodeError)ÚsÚdecrrrr(os  zReg.convert_mbcsN)
Ú__name__Ú
__module__Ú __qualname__Ú__doc__rÚ classmethodr%rr(Ú staticmethodrrrrr;src@s,eZdZdd„Zdd„Zdd„Zdd„Zd    S)
Ú MacroExpandercCsi|_t||_| |¡dSr)ÚmacrosÚVS_BASEÚvsbaseÚ load_macros)ÚselfÚversionrrrÚ__init__{s
zMacroExpander.__init__cCst ||¡|jd|<dS)Nz$(%s))rrr9)r=ZmacrorrrrrÚ    set_macro€szMacroExpander.set_macroc    Cs| d|jdd¡| d|jdd¡| dtd¡z$|dkrP| d    td
¡ntd
ƒ‚Wntk
rvtd ƒ‚YnX|d kr | d |jd¡| dtd¡nbd}tD]X}zt||ƒ}Wntk
rÒYq¨YnXt    |dƒ}t
  |d||f¡}|d|j d<q¨dS)NZ VCInstallDirz    \Setup\VCÚ
productdirZ VSInstallDirz    \Setup\VSZ FrameworkDirZ installrootç @ZFrameworkSDKDirzsdkinstallrootv2.0aPython was built with Visual Studio 2008;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2008 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.g"@ZFrameworkVersionz clr versionZ WindowsSdkDirZcurrentinstallfolderz.Software\Microsoft\NET Framework Setup\Productrz%s\%sr>z$(FrameworkVersion)) r@r;ÚNET_BASErrÚ WINSDK_BASErrrrrrr9)r=r>ÚprÚhrrrrrr<ƒs2ÿ ÿ
 
 
zMacroExpander.load_macroscCs$|j ¡D]\}}| ||¡}q
|Sr)r9ÚitemsÚreplace)r=r0r$ÚvrrrÚsub¢szMacroExpander.subN)r2r3r4r?r@r<rJrrrrr8ysr8cCsšd}tj |¡}|dkrdS|t|ƒ}tj|d… dd¡\}}t|dd…ƒd}|dkrf|d7}t|d    d
…ƒd }|dkr†d }|dkr–||SdS) zÃReturn the version of MSVC that was used to build Python.
 
    For Python 2.3 and up, the version number is included in
    sys.version.  For earlier versions, assume the compiler is MSVC 6.
    zMSC v.éÿÿÿÿéNú réþÿÿÿé éég$@r)Úsysr>ÚfindÚlenÚsplitÚint)Úprefixr#r0ÚrestZ majorVersionZ minorVersionrrrÚget_build_version§s  rYcCs0g}|D]"}tj |¡}||kr| |¡q|S)znReturn a list of normalized paths with duplicates removed.
 
    The current order of paths is maintained.
    )ÚosrÚnormpathr )ÚpathsZ reduced_pathsrEÚnprrrÚnormalize_and_reduce_pathsÀs   r^cCs<| tj¡}g}|D]}||kr| |¡qtj |¡}|S)z8Remove duplicate values of an environment variable.
    )rUrZÚpathsepr Újoin)ÚvariableZoldListZnewListr#Z newVariablerrrÚremoveDuplicatesÎs   rbcCst|}zt d|d¡}Wn"tk
r>t d¡d}YnX|rPtj |¡sÆd|}tj     
|d¡}|r¸tj |¡r¸tj  |tj tj d¡}tj  |¡}tj |¡sÆt d|¡dSnt d|¡|sØt d    ¡dStj  |d
¡}tj |¡rö|St d ¡dS) z¨Find the vcvarsall.bat file
 
    At first it tries to find the productdir of VS 2008 in the registry. If
    that fails it falls back to the VS90COMNTOOLS env var.
    z %s\Setup\VCrAz%Unable to find productdir in registryNzVS%0.f0COMNTOOLSZVCz%s is not a valid directoryz Env var %s is not set or invalidzNo productdir foundz vcvarsall.batúUnable to find vcvarsall.bat)r:rrrr    ÚdebugrZrÚisdirÚenvironÚgetr`ÚpardirÚabspathÚisfile)r>r;rAZtoolskeyZtoolsdirÚ    vcvarsallrrrÚfind_vcvarsallÙs4
ÿ
 
 
 
rlc Cs8t|ƒ}ddddh}i}|dkr(tdƒ‚t d||¡tjd||ftjtjd    }z¤| 
¡\}}|  ¡d
krzt|  d ¡ƒ‚|  d ¡}|  d ¡D]d}t |¡}d |kr¦qŽ| ¡}|  d d¡\}    }
|     ¡}    |    |krŽ|
 tj¡ræ|
dd…}
t|
ƒ||    <qŽW5|j ¡|j     ¡Xt|ƒt|ƒkr4ttt| ¡ƒƒƒ‚|S)zDLaunch vcvarsall.bat and read the settings from its environment
    ÚincludeÚlibZlibpathrNrcz'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)ÚstdoutÚstderrrr-Ú
ú=rrK)rlrr    rdÚ
subprocessÚPopenÚPIPEroÚcloserpÚ communicateÚwaitr,rUrr(Ústripr'ÚendswithrZr_rbrTÚ
ValueErrorÚstrÚlistÚkeys) r>ÚarchrkÚ interestingÚresultÚpopenrorpÚlinerr*rrrÚquery_vcvarsallüs> þ  
 
 
 r„rBz(VC %0.1f is not supported by this modulec
@sÞeZdZdZdZiZdgZdddgZdgZdgZ    eeee    Z
d    Z d
Z d Z d Zd ZZdZd.dd„Zd/dd„Zd0dd„Zd1dd„Zd2dd„Zd3dd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd4d*d+„Zd,d-„ZdS)5Ú MSVCCompilerzwConcrete class that implements an interface to Microsoft Visual C++,
       as defined by the CCompiler abstract class.Zmsvcz.cz.ccz.cppz.cxxú.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs8t ||||¡t|_d|_g|_d|_d|_d|_dS)NzSoftware\Microsoft\VisualStudioF)    rr?ÚVERSIONÚ_MSVCCompiler__versionZ_MSVCCompiler__rootÚ_MSVCCompiler__pathsÚ    plat_nameÚ_MSVCCompiler__archÚ initialized)r=ÚverboseÚdry_runÚforcerrrr?HszMSVCCompiler.__init__NcCs(|jrtdƒ‚|dkrtƒ}d}||kr6td|fƒ‚dtjkrtdtjkrt| d¡rtd|_d|_d|_    d    |_
d
|_ nÂ|tƒks†|d krt |}nt tƒd t |}t t|ƒ}|d  tj¡|_|dtjd<|dtjd<t|jƒdkrútd|jƒ‚| d¡|_| d¡|_| d¡|_    | d    ¡|_
| d
¡|_ z(tjd  d¡D]}|j |¡qHWntk
rtYnXt|jƒ|_d |j¡tjd <d|_|jdkrÊdddddg|_ddddddg|_n&ddddddg|_dddddddg|_dddg|_|jd krddd!d"g|_dg|_d#|_dS)$Nzdon't init multiple timesrz--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer Ú_rrnrmrzxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.ú;r z/nologoz/Oxz/MDz/W3z/DNDEBUGz/Odz/MDdz/Z7z/D_DEBUGz/GS-z/DLLz/INCREMENTAL:NOéz/INCREMENTAL:noz/DEBUGT) rŒÚAssertionErrorr
rrZrfÚfind_exeÚccÚlinkerrnÚrcÚmcÚPLAT_TO_VCVARSr„r‡rUr_r‰rTZ_MSVCCompiler__productr rr^r`Zpreprocess_optionsr‹Úcompile_optionsÚcompile_options_debugÚldflags_sharedrˆÚldflags_shared_debugZldflags_static)r=rŠZok_platsZ    plat_specZvc_envrErrrÚ
initializeSs€ÿ
 ÿ
ý       ÿÿ
ÿ
ÿ  ÿzMSVCCompiler.initializeÚcCsÞ|dkr d}g}|D]Ä}tj |¡\}}tj |¡d}|tj |¡d…}||jkrbtd|ƒ‚|rrtj |¡}||jkr˜|     tj 
|||j ¡¡q||j kr¾|     tj 
|||j ¡¡q|     tj 
|||j ¡¡q|S)NrŸrzDon't know how to compile %s)rZrÚsplitextÚ
splitdriveÚisabsÚsrc_extensionsrÚbasenameÚ_rc_extensionsr r`Ú res_extensionÚ_mc_extensionsÚ obj_extension)r=Zsource_filenamesZ    strip_dirÚ
output_dirZ    obj_namesÚsrc_namerÚextrrrÚobject_filenames¨s.
 
 ÿ
 ÿ ÿzMSVCCompiler.object_filenamesc     Csp|js| ¡| ||||||¡}    |    \}}
}} } |p6g} |  d¡|rT|  |j¡n |  |j¡|
D]}z| |\}}Wntk
r’YqdYnX|r¤tj     
|¡}||j krºd|}nT||j krÐd|}n>||j kr<|}d|}z"| |jg| |g|g¡Wqdtk
r6}z t|ƒ‚W5d}~XYqdXqdnÒ||jkrþtj     |¡}tj     |¡}zl| |jgd|d|g|g¡tj     tj     |¡¡\}}tj     ||d¡}| |jgd|g|g¡Wqdtk
rø}z t|ƒ‚W5d}~XYqdXqdntd||fƒ‚d    |}z&| |jg| | ||g|¡Wqdtk
rh}z t|ƒ‚W5d}~XYqdXqd|
S)
Nz/cz/Tcz/Tpz/foz-hz-rr†z"Don't know how to compile %s to %sz/Fo)rŒržZ_setup_compiler Úextendr›ršrrZrriÚ _c_extensionsÚ_cpp_extensionsr¥Úspawnr—rrr§Údirnamer˜r r¤r`r•)r=Úsourcesr©r9Ú include_dirsrdÚ extra_preargsÚextra_postargsÚdependsZ compile_infoÚobjectsZpp_optsÚbuildZ compile_optsÚobjÚsrcr«Z    input_optZ
output_optÚmsgZh_dirZrc_dirrrZrc_filerrrÚcompileÇsˆ
ÿ
 
 
 
 
  ÿÿ
 
 
ÿÿ
ÿÿ
ÿÿþ
zMSVCCompiler.compilec    
Csž|js| ¡| ||¡\}}|j||d}| ||¡rŽ|d|g}|rJz| |jg|¡Wqštk
rŠ}z t|ƒ‚W5d}~XYqšXn t     
d|¡dS)N)r©ú/OUT:úskipping %s (up-to-date)) rŒržÚ_fix_object_argsÚlibrary_filenameÚ
_need_linkr°rnrrr    rd)    r=r·Zoutput_libnamer©rdÚ target_langÚoutput_filenameZlib_argsr»rrrÚcreate_static_libsÿ zMSVCCompiler.create_static_libc
CsT|js| ¡| ||¡\}}| |||¡}|\}}}|rL| dt|ƒ¡t||||ƒ}|dk    rptj     ||¡}| 
||¡rD|t j kr¬|    rœ|j dd…}q¾|jdd…}n|    r¸|j }n|j}g}|pÈgD]}| d|¡qÊ||||d|g}tj |d¡} |dk    rLtj tj |¡¡\}}tj     | | |¡¡}| d|¡| || |¡|
rl|
|dd…<| r|| | ¡| tj |¡¡z| |jg|¡Wn,tk
rÐ}z t|ƒ‚W5d}~XYnX| ||¡}|dk    rP|\}}d||f}z| dd    d
||g¡Wn,tk
r@}z t|ƒ‚W5d}~XYnXn t d |¡dS) Nz5I don't know what to do with 'runtime_library_dirs': rz/EXPORT:r½rz/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz    -manifestr¾)rŒržr¿Z _fix_lib_argsÚwarnr|rrZrr`rÁrÚ
EXECUTABLErrœr r±r r¤rÀÚmanifest_setup_ldargsr­Úmkpathr°r–rrÚmanifest_get_embed_infor    rd)r=Ú target_descr·rÃr©Ú    librariesÚ library_dirsÚruntime_library_dirsÚexport_symbolsrdr´rµÚ
build_temprÂZ
fixed_argsZlib_optsZldflagsZ export_optsÚsymÚld_argsZdll_nameZdll_extZ implib_filer»ZmfinfoZ
mffilenameÚmfidZout_argrrrÚlink5s„ÿ
ÿþ
 
ÿÿ
 
ÿþ 
 
 
ÿ
zMSVCCompiler.linkcCs,tj |tj |¡d¡}| d|¡dS)Nz    .manifestú/MANIFESTFILE:)rZrr`r¤r )r=rÃrÏrÑÚ temp_manifestrrrrǔs
þz"MSVCCompiler.manifest_setup_ldargscCs^|D]"}| d¡r| dd¡d}q,qdS|tjkr<d}nd}| |¡}|dkrVdS||fS)NrÔú:rrP)Ú
startswithrUrrÆÚ_remove_visual_c_ref)r=rÊrÑÚargrÕrÒrrrrÉ s
 
 
z$MSVCCompiler.manifest_get_embed_infocCsºz t|ƒ}z | ¡}W5| ¡Xt dtj¡}t |d|¡}d}t |d|¡}t dtj¡}t ||¡dkrtWdSt|dƒ}z| |¡|W¢WS| ¡XWnt    k
r´YnXdS)NzU<assemblyIdentity.*?name=("|')Microsoft\.VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)rŸz*<dependentAssembly>\s*</dependentAssembly>zI<assemblyIdentity.*?name=(?:"|')(.+?)(?:"|').*?(?:/>|</assemblyIdentity>)Úw)
ÚopenrvÚreadÚrer¼ÚDOTALLrJÚsearchÚwriteÚOSError)r=Z manifest_fileZ
manifest_fZ manifest_bufÚpatternrrrrظs2     
ýþ
 
 
z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz    /LIBPATH:r©r=ÚdirrrrÚlibrary_dir_optionãszMSVCCompiler.library_dir_optioncCs tdƒ‚dS)Nz<don't know how to set runtime library search path for MSVC++)rrãrrrÚruntime_library_dir_optionæsÿz'MSVCCompiler.runtime_library_dir_optioncCs
| |¡Sr)rÀ)r=rnrrrÚlibrary_optionêszMSVCCompiler.library_optioncCs\|r|d|g}n|g}|D]:}|D]0}tj || |¡¡}tj |¡r$|Sq$qdS)NZ_d)rZrr`rÀÚexists)r=ÚdirsrnrdZ    try_namesrär)ZlibfilerrrÚfind_library_fileîs zMSVCCompiler.find_library_filecCsz|jD].}tj tj |¡|¡}tj |¡r|Sqtjd d¡D].}tj tj |¡|¡}tj |¡rF|SqF|S)aŒReturn path to an MSVC executable program.
 
        Tries to find the program in several places: first, one of the
        MSVC program search paths from the registry; next, the directories
        in the PATH environment variable.  If any of those work, return an
        absolute path that is known to exist.  If none of them work, just
        return the original program name, 'exe'.
        ÚPathr‘)r‰rZrr`rirjrfrU)r=ZexerEÚfnrrrr”s    
 
 
zMSVCCompiler.find_exe)rrr)N)rrŸ)NNNrNNN)NrN)
NNNNNrNNNN)r) r2r3r4r5Ú compiler_typeZ executablesr®r¯r¥r§r£r¦r¨Zstatic_lib_extensionÚshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr?ržr¬r¼rÄrÓrÇrÉrØrårærçrêr”rrrrr…*sl
ÿÿ
 
Wý
 þ
Xû
ó
_ +
r…)r )0r5rZrsrRrÝÚdistutils.errorsrrrrrÚdistutils.ccompilerrrÚ    distutilsr    Údistutils.utilr
ÚwinregÚ    OpenKeyExrÚEnumKeyrÚ    EnumValuer&ÚerrorrÚ
HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOTrÚplatformÚmaxsizeZ NATIVE_WIN64r:rDrCr™rr8rYr^rbrlr„r‡r…rrrrÚ<module>sP  ýþ>. #
)