a  ze'N@sddlZddlZddlZddlmZmZmZmZmZddl m Z m Z ddl m Z ddlmZddlmZddZd d Zd d d ddZddZddZdddZd ddddZGddde ZdS)N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)log) get_platform)countc CsztjtjdtjtjBd}Wnty<tdYdS0d}d}|tD]}zt ||\}}}WntyYqYn0|rR|tj krRt j |rRztt|}WnttfyYqRYn0|dkrR||krR||}}qRWdn1s0Y||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)accesszVisual C++ is not registeredNNr)winregZ OpenKeyExHKEY_LOCAL_MACHINEZKEY_READZKEY_WOW64_32KEYOSErrorr debugr Z EnumValueZREG_SZospathisdirintfloat ValueError TypeError)key best_versionbest_dirivZvc_dirZvtversionr K/opt/bitninja-python-dojo/embedded/lib/python3.9/distutils/_msvccompiler.py _find_vc2015s2       ,r"c Cstjdptjd}|s dSz8tjtj|dddddd d d d d dg ddd}Wntjt t fytYdS0tj|ddd}tj |rd|fSdS)NzProgramFiles(x86)Z ProgramFilesr zMicrosoft Visual StudioZ Installerz vswhere.exez-latestz -prereleasez -requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z -propertyZinstallationPathz -products*mbcsstrict)encodingerrorsZVCZ AuxiliaryZBuild) renvironget subprocess check_outputrjoinstripCalledProcessErrorrUnicodeDecodeErrorr)rootrr r r! _find_vc20178s(  r2x86Zx64ZarmZarm64)r3 x86_amd64x86_arm x86_arm64cCs\t\}}|st\}}|s*tddStj|d}tj|sTtd|dS|dfS)Nz$No suitable Visual C++ version foundr z vcvarsall.batz%s cannot be found)r2r"r rrrr-isfile) plat_spec_rr vcvarsallr r r!_find_vcvarsall_s     r;c CstdrddtjDSt|\}}|s6tdz&tjd||tj dj ddd }WnBtj y}z(t |jtd |jWYd}~n d}~00d dd d |DD}|S)NZDISTUTILS_USE_SDKcSsi|]\}}||qSr lower).0rvaluer r r! ssz_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r'zError executing {}cSs$i|]\}}}|r|r||qSr r<)r>rr9r?r r r!r@scss|]}|dVqdS)=N) partition)r>liner r r! z_get_vc_env..)rgetenvr)itemsr;rr+r,formatSTDOUTdecoder/r erroroutputcmd splitlines)r8r:r9outexcenvr r r! _get_vc_envqs.     rTcCsN|stdtj}|D].}tjtj||}tj|r|Sq|SNr)rrHsplitpathseprr-abspathr7)Zexepathspfnr r r! _find_exes   r\r4r5r6)win32z win-amd64z win-arm32z win-arm64c seZdZdZiZdgZgdZdgZdgZeeeeZ dZ dZ dZ d Z d ZZd Zd%d dZd&ddZd'ddZd(ddZd)ddZd*ddZfddZddZdd Zd!d"Zd+d#d$ZZS), MSVCCompilerZmsvcz.c)z.ccz.cppz.cxx.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs t||||d|_d|_dS)NF)r__init__ plat_name initialized)selfverbosedry_runforcer r r!r`szMSVCCompiler.__init__NcCs |durt}|tvr(tdttt|}t|}|sDtd|dd|_|jt j }t d||_ t d||_ t d||_t d||_t d ||_t d ||_|d dt j D]}|r||t jq|d dt j D]}|r||t jqd|_gd |_gd|_gd}gd}g|d|_g|d|_g|ddd|_g|ddd|_g||_g||_tj df|jtj df|jtj df|jtj!df|jtj!df|jtj!df|jtj"df|jtj"df|jtj"df|ji |_#d|_$dS)Nz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.rzcl.exezlink.exezlib.exezrc.exezmc.exezmt.exeZincludelib)/nologoz/Ox/W3z/GLz/DNDEBUGz/MD)riz/Odz/MDdz/Zirjz/D_DEBUG)ri/INCREMENTAL:NO/LTCG)rirkrlz /DEBUG:FULLz/MANIFEST:EMBED,ID=1z/DLLz/MANIFEST:EMBED,ID=2z/MANIFESTUAC:NOFT)%r PLAT_TO_VCVARSrrJtuplerTr*_pathsrVrrWr\cclinkerrhrcmcmtZadd_include_dirrstripsepZadd_library_dirZpreprocess_optionscompile_optionscompile_options_debugZ ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARY_ldflagsrb)rcrar8Zvc_envrYdirldflagsZ ldflags_debugr r r! initializes\                    zMSVCCompiler.initializergcsXifddjDfddjjDp8dfdd}tt||S)Ncsi|] }|jqSr ) obj_extensionr>extrcr r!r@"rGz1MSVCCompiler.object_filenames..csi|] }|jqSr ) res_extensionr~rr r!r@#rGrgcstj|\}}r"tj|}n2tj|\}}|tjjtjjfrT|dd}ztj||WSt yt d |Yn0dS)NzDon't know how to compile {}) rrsplitextbasename splitdrive startswithrvaltsepr- LookupErrorrrJ)rZbaserr9)ext_map output_dir strip_dirr r! make_out_path(s  z4MSVCCompiler.object_filenames..make_out_path)src_extensions_rc_extensions_mc_extensionslistmap)rcZsource_filenamesrrrr )rrrcrr!object_filenamesszMSVCCompiler.object_filenamesc  Cs|js||||||||} | \}} }} } |p6g} | d|rT| |jn | |jd}| D]}z| |\}}WntyYqhYn0|rtj |}||j vrd|}nH||j vrd|}d}n.||j vr@|}d|}z||jg| ||gWqhty:}zt|WYd}~qhd}~00qhn||jvrtj |}tj |}z\||jd|d||gtj tj |\}}tj ||d }||jd||gWqhty}zt|WYd}~qhd}~00qhntd |||jg| | }|r$|d |||d |||z||Wqhty}zt|WYd}~qhd}~00qh| S) Nz/cFz/Tcz/TpTz/foz-hz-rr_z"Don't know how to compile {} to {}z/EHscz/Fo)rbr|Z_setup_compileappendextendrxrwKeyErrorrrrX _c_extensions_cpp_extensionsrspawnrrrrrdirnamersrrr-rJrp)rcZsourcesrZmacrosZ include_dirsr extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsobjsrcrZ input_optZ output_optmsgZh_dirZrc_dirrr9Zrc_fileargsr r r!compile>sr                 zMSVCCompiler.compilec Cs|js||||\}}|j||d}|||r|d|g}|rJz,td|jd|| |jg|Wqt y}zt |WYd}~qd}~00n td|dS)N)r/OUT:Executing "%s" %s skipping %s (up-to-date)) rbr|_fix_object_argslibrary_filename _need_linkr rrhr-rrr) rcrZoutput_libnamerr target_langoutput_filenameZlib_argsrr r r!create_static_libs  zMSVCCompiler.create_static_libc Cs|js||||\}}||||}|\}}}|rL|dt|t||||}|durptj ||}| ||r|j || f}dd|pgD}||||d|g}tj |d} |dur tj tj|\}}tj | ||}|d|| r| |dd<| r.|| tj tj|}||z,td|jd |||jg|Wn.ty}zt|WYd}~n d}~00n td |dS) Nz5I don't know what to do with 'runtime_library_dirs': cSsg|] }d|qS)z/EXPORT:r )r>Zsymr r r! rGz%MSVCCompiler.link..rrz/IMPLIB:rrr)rbr|rZ _fix_lib_argswarnstrrrrr-rryrrrrrrrXZmkpathr rrqrrr)rcZ target_descrrrZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrrrZ build_temprZ fixed_argsZlib_optsr{Z export_optsZld_argsZdll_nameZdll_extZ implib_filerr r r!links^        zMSVCCompiler.linkc s@td}z$|jtjd<t|W|tjd<S|tjd<0dSrU)rrHror)superr)rcrOZold_path __class__r r!rs    zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r rcrzr r r!library_dir_optionszMSVCCompiler.library_dir_optioncCs tddS)Nz:don't know how to set runtime library search path for MSVC)rrr r r!runtime_library_dir_optionsz'MSVCCompiler.runtime_library_dir_optioncCs ||S)N)r)rcrhr r r!library_option szMSVCCompiler.library_optioncCs\|r|d|g}n|g}|D]:}|D]0}tj|||}tj|r$|Sq$qdS)NZ_d)rrr-rr7)rcdirsrhrZ try_namesrznameZlibfiler r r!find_library_file s zMSVCCompiler.find_library_file)rrr)N)rrg)NNNrNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname__Z compiler_typeZ executablesrrrrrrr}Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr`r|rrrrrrrrr __classcell__r r rr!r^sZ  P " ]  E r^)N)rr+rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr itertoolsr r"r2ZPLAT_SPEC_TO_RUNTIMEr;rTr\rmr^r r r r!s.   !