a  zev@sJddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z ddl mZddlmZddlZejZejZejZejZejejejejfZejdkoej dkZ!e!rdZ"d Z#d Z$n d Z"d Z#d Z$dddZ%GdddZ&GdddZ'ddZ(ddZ)ddZ*ddZ+d#ddZ,e(Z-e-dkr6ed e-Gd!d"d"e Z.dS)$N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)log) get_platformwin32lz1Software\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\.NETFrameworkx86Zamd64r z win-amd64c@sLeZdZddZeeZddZeeZddZeeZddZeeZd S) RegcCs:tD](}|||}|r||vr||Sqt|dSN)HKEYS read_valuesKeyError)clspathkeybasedrK/opt/bitninja-python-dojo/embedded/lib/python3.9/distutils/msvc9compiler.py get_value?s   z Reg.get_valuecCsjzt||}Wnty"YdS0g}d}zt||}WntyPYqfYn0|||d7}q,|SNr) RegOpenKeyExRegError RegEnumKeyappend)rrrhandleLikrrr read_keysGs     z Reg.read_keysc Cszt||}Wnty"YdS0i}d}zt||\}}}WntyVYq~Yn0|}|||||<|d7}q,|Sr)rr RegEnumValuelower convert_mbcs) rrrr!rr#namevaluetyperrrrYs    zReg.read_valuescCs8t|dd}|dur4z |d}Wnty2Yn0|S)Ndecodembcs)getattr UnicodeError)sZdecrrrr(os   zReg.convert_mbcsN) __name__ __module__ __qualname__r classmethodr%rr( staticmethodrrrrr;src@s,eZdZddZddZddZddZd S) MacroExpandercCsi|_t||_||dSr)macrosVS_BASEvsbase load_macros)selfversionrrr__init__{s zMacroExpander.__init__cCst|||jd|<dS)Nz$(%s))rrr7)r;Zmacrorrrrr set_macroszMacroExpander.set_macroc Cs|d|jdd|d|jdd|dtdz$|dkrP|d td ntd Wntyttd Yn0|d kr|d |jd|dtdn`d}tD]V}zt||}WntyYqYn0t |d}t |d||f}|d|j d<qdS)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>r9NET_BASErr WINSDK_BASErrrrrrr7)r;r<prhrrrrrr:s2      zMacroExpander.load_macroscCs$|jD]\}}|||}q |Sr)r7itemsreplace)r;r0r$vrrrsubszMacroExpander.subN)r1r2r3r=r>r:rHrrrrr6ysr6cCsd}tj|}|dkrdS|t|}tj|ddd\}}t|ddd}|dkrf|d7}t|dd d }|dkrd }|dkr||SdS) NzMSC v. r g$@r)sysr<findlensplitint)prefixr#r0restZ majorVersionZ minorVersionrrrget_build_versions  rWcCs0g}|D]"}tj|}||vr||q|Sr)osrnormpathr )pathsZ reduced_pathsrCZnprrrnormalize_and_reduce_pathss   r[cCs<|tj}g}|D]}||vr||qtj|}|Sr)rSrXpathsepr join)variableZoldListZnewListr#Z newVariablerrrremoveDuplicatess   r_cCst|}ztd|d}Wn ty<tdd}Yn0|rNtj|sd|}tj |d}|rtj|rtj |tj tj d}tj |}tj|std|dSntd||stddStj |d }tj|r|Std dS) Nz %s\Setup\VCr?z%Unable to find productdir in registryzVS%0.f0COMNTOOLSZVCz%s is not a valid directoryz Env var %s is not set or invalidzNo productdir foundz vcvarsall.batUnable to find vcvarsall.bat)r8rrrr debugrXrisdirenvirongetr]pardirabspathisfile)r<r9r?ZtoolskeyZtoolsdir vcvarsallrrrfind_vcvarsalls4         ric CsHt|}hd}i}|dur$tdtd||tjd||ftjtjd}z|\}}|dkrvt| d| d}| dD]d}t |}d |vrq| }| d d \} } | } | |vr| tjr| dd } t| || <qW|j|jn|j|j0t|t|krDttt||S) N>rZlibpathincludelibr`z'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)stdoutstderrrr- =rrI)rirr ra subprocessPopenPIPE communicatewaitr,rSrr(stripr'endswithrXr\r_rlclosermrR ValueErrorstrlistkeys) r<ZarchrhZ interestingresultpopenrlrmlinerr*rrrquery_vcvarsallsB         rr@z(VC %0.1f is not supported by this modulec @seZdZdZiZdgZgdZdgZdgZeeeeZ dZ dZ dZ d Z d ZZd Zd+d dZd,ddZd-ddZd.ddZd/ddZd0ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd1d'd(Zd)d*ZdS)2 MSVCCompilerZmsvcz.c)z.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;verbosedry_runforcerrrr=HszMSVCCompiler.__init__NcCs|durt}d}||vr(td|fdtjvrfdtjvrf|drfd|_d|_d|_d|_d |_ n|tksx|d krt |}nt td t |}t t |}|d  tj|_|d tjd <|dtjd<t|jdkrtd|j|d|_|d|_|d|_|d|_|d |_ z(tjd  dD]}|j|q:WntydYn0t|j|_d|jtjd <d|_|jdkrgd|_gd|_ngd|_gd|_gd|_|jdkrgd|_dg|_d|_dS)Nr z--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer _rrkrjrzxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.;r )/nologo/Ox/MD/W3/DNDEBUG)r/Od/MDdr/Z7/D_DEBUG)rrrr/GS-r)rrrrrrr)/DLLrz/INCREMENTAL:NO)rrz/INCREMENTAL:noz/DEBUGrT)r rrXrcfind_execclinkerrkrcmcPLAT_TO_VCVARSrrrSr\rrRZ_MSVCCompiler__productr rr[r]Zpreprocess_optionsrcompile_optionscompile_options_debugldflags_sharedrldflags_shared_debugZldflags_staticr)r;rZok_platsZ plat_specZvc_envrCrrr initializeSsb                 zMSVCCompiler.initializecCs|dur d}g}|D]}tj|\}}tj|d}|tj|d}||jvrbtd||rrtj|}||jvr| tj |||j q||j vr| tj |||j q| tj |||j q|S)NrrzDon't know how to compile %s)rXrsplitext splitdriveisabssrc_extensionsrbasename_rc_extensionsr r] res_extension_mc_extensions obj_extension)r;Zsource_filenamesZ strip_dir output_dirZ obj_namesZsrc_namerextrrrobject_filenamess,         zMSVCCompiler.object_filenamesc  Cst|js||||||||} | \}} }} } |p6g} | d|rT| |jn | |j| D]}z| |\}}WntyYqdYn0|rtj |}||j vrd|}nX||j vrd|}nB||j vr<|}d|}z"||jg| |g|gWqdty6}zt|WYd}~qdd}~00qdn||jvrtj |}tj |}zl||jgd|d|g|gtj tj |\}}tj ||d}||jgd|g|gWqdty}zt|WYd}~qdd}~00qdntd||fd |}z&||jg| | ||g|Wqdtyl}zt|WYd}~qdd}~00qd| S) Nz/cz/Tcz/Tpz/foz-hz-rrz"Don't know how to compile %s to %sz/Fo)rrZ_setup_compiler extendrrrrXrrf _c_extensions_cpp_extensionsrspawnrrrrdirnamerrrr]r)r;Zsourcesrr7Z include_dirsra extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsobjsrcrZ input_optZ output_optmsgZh_dirZrc_dirrrZrc_filerrrcompiles                     zMSVCCompiler.compilec Cs|js||||\}}|j||d}|||r|d|g}|rJz||jg|Wqty}zt|WYd}~qd}~00n t d|dS)N)r/OUT:skipping %s (up-to-date)) rr_fix_object_argslibrary_filename _need_linkrrkrrr ra) r;rZoutput_libnamerra target_langoutput_filenameZlib_argsrrrrcreate_static_libs  zMSVCCompiler.create_static_libc CsX|js||||\}}||||}|\}}}|rL|dt|t||||}|durptj ||}| ||rH|t j kr| r|j dd}q|jdd}n| r|j }n|j}g}|pgD]}|d|q||||d|g}tj|d} |durLtjtj|\}}tj | ||}|d|||| || rl| |dd<| r||| |tj|z||jg|Wn.ty}zt|WYd}~n d}~00|||}|durT|\}}d||f}z|dd d ||gWn.tyD}zt|WYd}~n d}~00n td |dS) Nz5I don't know what to do with 'runtime_library_dirs': rz/EXPORT:rrz/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz -manifestr)rrrZ _fix_lib_argswarnryrrXrr]rr EXECUTABLErrr rrrrmanifest_setup_ldargsrZmkpathrrrrmanifest_get_embed_infor ra)r; target_descrrrZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrarr build_temprZ fixed_argsZlib_optsZldflagsZ export_optsZsymld_argsZdll_nameZdll_extZ implib_filerZmfinfoZ mffilenamemfidZout_argrrrlink5s              zMSVCCompiler.linkcCs,tj|tj|d}|d|dS)Nz .manifest/MANIFESTFILE:)rXrr]rr )r;rrr temp_manifestrrrrs z"MSVCCompiler.manifest_setup_ldargscCs^|D]"}|dr|ddd}q,qdS|tjkr|)rz*\s*zI|)w) openreadrwrerDOTALLrHsearchwriteOSError)r;Z manifest_fileZ manifest_fZ manifest_bufpatternrrrrs6     z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz /LIBPATH:rr;dirrrrlibrary_dir_optionszMSVCCompiler.library_dir_optioncCs tddS)NzsN  >. # )