o ?Og'N@s ddlZddlZddlZddlmZmZmZmZmZddl 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 Cs ztjtjdtjtjBd}WntytdYdSwd}d}|_tD]F}z t ||\}}}Wn ty@Yn:w|ro|tj krot j |roztt|}Wn ttfyaYq)w|dkro||kro||}}q)Wd||fSWd||fS1swY||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 >/opt/alt/python310/lib64/python3.10/distutils/_msvccompiler.py _find_vc2015sH           r"c Cs tjdp tjd}|sdSztjtj|dddddd d d d d dg ddd}Wntjt t fy;YdSwtj|ddd}tj |rOd|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_vc20178s0  r2x86Zx64ZarmZarm64)r3 x86_amd64x86_arm x86_arm64cCs\t\}}|s t\}}|stddStj|d}tj|s*td|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|\}}|stdztjd||tj dj ddd }Wntj yI}zt |jtd |jd}~wwd 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! sz_get_vc_env..)rgetenvr)itemsr;rr+r,formatZSTDOUTdecoder/r erroroutputcmd splitlines)r8r:r9outexcenvr r r! _get_vc_envqs2     rRcCsP |s tdtj}|D]}tjtj||}tj|r%|Sq|SNr)rrGsplitpathseprr-abspathr7)Zexepathspfnr r r! _find_exes rZr4r5r6)Zwin32z win-amd64z win-arm32z win-arm64cseZdZ dZiZdgZgdZdgZdgZeeeeZ dZ dZ dZ d Z d ZZd Zd%d dZd&ddZ d'ddZ d(ddZ  d)ddZ         d*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)selfverboseZdry_runZforcer r r!r]s zMSVCCompiler.__init__NcCs |durt}|tvrtdttt|}t|}|s"td|dd|_|jt j }t d||_ t d||_ t d||_t d||_t d ||_t d ||_|d dt j D] }|rk||t jq^|d dt j D] }|r||t jqvd|_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)rdz/Odz/MDdz/Zirez/D_DEBUG)rd/INCREMENTAL:NO/LTCG)rdrfrgz /DEBUG:FULLz/MANIFEST:EMBED,ID=1z/DLLz/MANIFEST:EMBED,ID=2z/MANIFESTUAC:NOFT)%r PLAT_TO_VCVARSrrItuplerRr*_pathsrTrrUrZcclinkerrcrcmcZmtZadd_include_dirrstripsepZadd_library_dirZpreprocess_optionscompile_optionscompile_options_debugZ ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARY_ldflagsr_)r`r^r8Zvc_envrWdirldflagsZ ldflags_debugr r r! initializes`                     zMSVCCompiler.initializerbcsXifddjDfddjjDpdfdd}tt||S)Nci|]}|jqSr ) obj_extensionr>extr`r r!r@"z1MSVCCompiler.object_filenames..crwr ) res_extensionryr{r r!r@#r|rbcstj|\}}rtj|}ntj|\}}|tjjtjjfr*|dd}z tj||WSt yDt d |w)NzDon't know how to compile {}) rrsplitextbasename splitdrive startswithrpaltsepr- LookupErrorrrI)rXbaserzr9)ext_map output_dir strip_dirr r! make_out_path(s  z4MSVCCompiler.object_filenames..make_out_path)src_extensions_rc_extensions_mc_extensionslistmap)r`Zsource_filenamesrrrr )rrr`rr!object_filenamesszMSVCCompiler.object_filenamesc  CsL|js||||||||} | \}} }} } |pg} | d|r*| |jn| |jd}| D]}z| |\}}Wn tyGYq4w|rPtj |}||j vrZd|}n||j vrfd|}d}n||j vr|}d|}z||jg| ||gWnty}zt|d}~wwq4||jvrtj |}tj |}z.||jd|d||gtj tj |\}}tj ||d }||jd||gWnty}zt|d}~wwq4td |||jg| | }|r|d |||d |||z||Wq4ty#}zt|d}~ww| S) Nz/cFz/Tcz/TpTz/foz-hz-rr\z"Don't know how to compile {} to {}z/EHscz/Fo)r_rvZ_setup_compileappendextendrrrqKeyErrorrrrV _c_extensions_cpp_extensionsrspawnrmrrrdirnamernrrr-rIrk)r`ZsourcesrZmacrosZ include_dirsr extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsobjsrcrzZ input_optZ output_optmsgZh_dirZrc_dirrr9Zrc_fileargsr r r!compile>s              zMSVCCompiler.compilec Cs|js||||\}}|j||d}|||rN|d|g}|r& ztd|jd|| |jg|WdSt yM}zt |d}~wwtd|dS)N)r/OUT:Executing "%s" %s skipping %s (up-to-date)) r_rv_fix_object_argslibrary_filename _need_linkr rrcr-rrr) r`rZoutput_libnamerr target_langoutput_filenameZlib_argsrr r r!create_static_libs$ zMSVCCompiler.create_static_libc Cs|js||||\}}||||}|\}}}|r&|dt|t||||}|dur8tj ||}| ||r|j || f}dd|pKgD}||||d|g}tj |d} |durtj tj|\}}tj | ||}|d|| r| |dd<| r|| tj tj|}||ztd|jd |||jg|WdSty}zt|d}~wwtd |dS) Nz5I don't know what to do with 'runtime_library_dirs': cSsg|]}d|qS)z/EXPORT:r )r>Zsymr r r! r|z%MSVCCompiler.link..rrz/IMPLIB:rrr)r_rvrZ _fix_lib_argswarnstrrrrr-rrsrrrrrrrVZmkpathr rrlrrr)r`Z target_descrrrZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrrrZ build_temprZ fixed_argsZlib_optsruZ export_optsZld_argsZdll_nameZdll_extZ implib_filerr r r!linksb       zMSVCCompiler.linkc s<td}z|jtjd<t|W|tjd<S|tjd<wrS)rrGrjr)superr)r`rMZold_path __class__r r!rs   zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r r`rtr r r!library_dir_optionszMSVCCompiler.library_dir_optioncCstd)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 ||SN)r)r`rcr r r!library_option s zMSVCCompiler.library_optioncCs\|r |d|g}n|g}|D]}|D]}tj|||}tj|r*|SqqdS)NZ_d)rrr-rr7)r`dirsrcrZ try_namesrtnameZlibfiler r r!find_library_file s  zMSVCCompiler.find_library_file)rrrr)rrb)NNNrNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname__Z compiler_typeZ executablesrrrrrr}rxZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr]rvrrrrrrrrr __classcell__r r rr!r[s^  P " ]  E r[r)rr+rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr itertoolsr r"r2ZPLAT_SPEC_TO_RUNTIMEr;rRrZrhr[r r r r!s2   !