\d'NdZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z ddl mZddlmZddlmZdZd Zd d d d dZdZdZddZd ddddZGdde ZdS)adistutils._msvccompiler Contains MSVCCompiler, an implementation of the abstract CCompiler class for Microsoft Visual Studio 2015. The module is compatible with VS 2015 and later. You can find legacy support for older versions in distutils.msvc9compiler and distutils.msvccompiler. N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)log) get_platform)countcj tjtjdtjtjz}n%#t $rt jdYdSwxYwd}d}|5tD]} tj ||\}}}n#t $rYn{wxYw|rt|tj krdtj |rE tt|}n#t t"f$rYwxYw|dkr ||kr||}}dddn #1swxYwY||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)accesszVisual C++ is not registeredNNr)winreg OpenKeyExHKEY_LOCAL_MACHINEKEY_READKEY_WOW64_32KEYOSErrorr debugr EnumValueREG_SZospathisdirintfloat ValueError TypeError)key best_versionbest_dirivvc_dirvtversions (..\python\lib\distutils\_msvccompiler.py _find_vc2015r*s  % 6?V%;;     0111zzLH = = = =A  & 0a 8 8 622     =R6=((RW]]6-B-B(!%((mmGG"I.Hb==W|%;%;-4f(L = = = = = = = = = = = = = = =  !!si8;AA&D&8BD& B D&B  4D&C21D&2DD&DD&&D*-D*c tjdptjd}|sdS tjtj|dddddd d d d d dg dd}n##tjttf$rYdSwxYwtj|ddd}tj |rd|fSdS)aJReturns "15, path" based on the result of invoking vswhere.exe If no install is found, returns "None, None" The version is returned to avoid unnecessarily changing the function result. It may be ignored when the path is not None. If vswhere.exe is not available, by definition, VS 2017 is not installed. zProgramFiles(x86) ProgramFilesrzMicrosoft Visual Studio Installerz vswhere.exez-latestz -prereleasez -requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z -propertyinstallationPathz -products*mbcsstrict)encodingerrorsVC AuxiliaryBuild) renvironget subprocess check_outputrjoinstripCalledProcessErrorrUnicodeDecodeErrorr)rootrs r) _find_vc2017rA8s  :>>- . . P"*..2P2PD z & GLL8+} U U   L +  ( 8---.3UWW   )74F Gzz 7<<dK 9 9D w}}T4x :sABB76B7x86x64armarm64)rB x86_amd64x86_arm x86_arm64c.t\}}|st\}}|stjddStj|d}tj|stjd|dS|dfS)Nz$No suitable Visual C++ version foundrz vcvarsall.batz%s cannot be found)rAr*r rrrr<isfile) plat_spec_r#r" vcvarsalls r)_find_vcvarsallrN_s..KAx 0!- h  8999z X77I 7>>) $ $ & 222z d?cXtjdr(dtjDSt |\}}|st d t jd||t j  dd}nW#t j $rE}tj |jt d |jd}~wwxYwd d |DD}|S) NDISTUTILS_USE_SDKc>i|]\}}||Slower).0r!values r) z_get_vc_env..ss6   U IIKK   rOzUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r3zError executing {}cHi|]\}}}|| || SrSrT)rVr!rLrWs r)rXz_get_vc_env..sH    CE      U   rOc3@K|]}|dVdS)=N) partition)rVlines r) z_get_vc_env..s.::  ::::::rO)rgetenvr8itemsrNrr:r;formatSTDOUTdecoder>r erroroutputcmd splitlines)rKrMrLoutexcenvs r) _get_vc_envrmqsS y$%%    j..00    #9--LIq E$%CDDD"% & - -i C C$    &I& . .   (""" #*$%9"" ""    ;:)9)9:::   C Js!A B++C?:AC::C?c6|s1tjdtj}|D]b}tjtj||}tj|r|cSc|S)atReturn 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'. r)rrasplitpathseprr<abspathrJ)exepathspfns r) _find_exervs 4 &!!'' 33  W\\"'//!,,c 2 2 7>>"   III  JrOrFrGrH)win32z win-amd64z win-arm32z win-arm64ceZdZdZdZiZdgZgdZdgZdgZ eezeze zZ dZ dZ d Z d Zd xZZd ZddZddZ ddZ ddZ ddZ d dZfdZdZdZdZd!dZxZS)" MSVCCompilerzwConcrete class that implements an interface to Microsoft Visual C++, as defined by the CCompiler abstract class.msvcz.c)z.ccz.cppz.cxx.rcz.mcz.resz.objz.libz.dllz%s%sz.exercPtj||||d|_d|_dS)NF)r__init__ plat_name initialized)selfverbosedry_runforces r)r}zMSVCCompiler.__init__s.D'7E::: rONc~|jr Jd|t}|tvr4tdt tt|}t |}|std|dd|_|j tj }td||_ td||_td||_td ||_td ||_td ||_|d d tj D]6}|r2||tj7|d d tj D]6}|r2||tj7d|_gd|_gd|_gd}gd}g|d|_g|d|_g|ddd|_g|ddd|_g||_g||_t@j!df|jt@j!df|jt@j!df|jt@j"df|jt@j"df|jt@j"df|jt@j#df|jt@j#df|jt@j#df|ji |_$d|_dS)Nzdon't init multiple timesz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.rzcl.exezlink.exezlib.exezrc.exezmc.exezmt.exeincludelib)/nologoz/Ox/W3z/GLz/DNDEBUGz/MD)rz/Odz/MDdz/Zirz/D_DEBUG)r/INCREMENTAL:NO/LTCG)rrrz /DEBUG:FULLz/MANIFEST:EMBED,ID=1z/DLLz/MANIFEST:EMBED,ID=2z/MANIFESTUAC:NOFT)%rr PLAT_TO_VCVARSrrctuplermr9_pathsrorrprvcclinkerrrcmcmtadd_include_dirrstripsepadd_library_dirpreprocess_optionscompile_optionscompile_options_debug ldflags_exeldflags_exe_debugldflags_sharedldflags_shared_debugldflags_staticldflags_static_debugr EXECUTABLE SHARED_OBJECTSHARED_LIBRARY_ldflags)rr~rKvc_envrsdirldflags ldflags_debugs r) initializezMSVCCompiler.initializesW#@@%@@@@  $I N * *()H*0&~1F1F*G*GII I#9- Y'' /(*.// /jj,,  !!"*--He,, E22 Y..He,,He,,He,,::i,,222:>> 9 9C 9$$SZZ%7%7888::eR((..rz:: 9 9C 9$$SZZ%7%7888"&   & & & "      >W=&<=!I=!I2H!I[[[1G[IZ[$gm$gV$g=S$gUf$g!(j$4m$4! !4 ($*:  !5 )4+;  !4 ($*@  $d +T-@  $e ,d.A  $d +T-F  %t ,d.A  %u -t/B  %t ,d.G    rOrcifdjDfdjjzDpdfd}tt ||S)Nc i|] }|j SrS) obj_extensionrVextrs r)rXz1MSVCCompiler.object_filenames.."sFFF3sD&FFFrOc i|] }|j SrS) res_extensionrs r)rXz1MSVCCompiler.object_filenames..#s\\\3sD&\\\rOrctj|\}}r tj|}natj|\}}|tjjtjjfr |dd} tj||zS#t$r#td |wxYw)NzDon't know how to compile {}) rrsplitextbasename splitdrive startswithraltsepr< LookupErrorrrc)rtbaserrLext_map output_dir strip_dirs r) make_out_pathz4MSVCCompiler.object_filenames..make_out_path(s((++ID# $w''--',,T224??BGK#@AA$8D Mw||Jws|0CDDD M M M##A#H#H#K#KLLL  Ms ((C-C>)src_extensions_rc_extensions_mc_extensionslistmap)rsource_filenamesrrrrs` `` @r)object_filenameszMSVCCompiler.object_filenamess FFFF$2EFFF \\\\$2EH[2[\\\   %2  M M M M M M M&C '788999rOc @|js||||||||} | \}} }} } |pg} | d|r| |jn| |jd}| D]} | |\}}n#t$rYwxYw|rtj |}||j vrd|z}n||j vr d|z}d}n||j vrN|}d|z} ||jg| z||gzn!#t $r}t#|d}~wwxYw||jvrtj |}tj |} ||jd|d||gtj tj |\}}tj ||d z}||jd|z|gn!#t $r}t#|d}~wwxYwt#d |||jg| z| z}|r|d |||d |z|| ||k#t $r}t#|d}~wwxYw| S) Nz/cFz/Tcz/TpTz/foz-hz-rr{z"Don't know how to compile {} to {}z/EHscz/Fo)rr_setup_compileappendextendrrKeyErrorrrrq _c_extensions_cpp_extensionsrspawnrrrrdirnamerrrr<rcr)rsourcesrmacros include_dirsr extra_preargsextra_postargsdepends compile_infoobjectspp_optsbuild compile_opts add_cpp_optsobjsrcr input_opt output_optmsgh_dirrc_dirrrLrc_fileargss r)compilezMSVCCompiler.compile>s  OO   **:v|+2G^MM :F7%$* D!!!  6    : ; ; ; ;    4 5 5 5 A (A (C  :SS     +gooc**d(((!CK ,,,!CK # +++ "S[ ,JJy72j)5LLMMMM),,,&s+++,+++,,-- ,JJudFCHIII g..rw/?/?/E/EFFGD! gll64%<@@GJJg>????),,,&s+++,##G$*F3$4$4666G9|+g5D % G$$$ KK " " " KK $ $ $ KK ' ' ' ( 4    % ( ( ("3''' (s[ B"" B/.B/#D** E4EEB"H88 III&K== LLLc|js||||\}}|||}|||r||d|zgz}|r t jd|jd|| |jg|zdS#t$r}t|d}~wwxYwt jd|dS)N)r/OUT:Executing "%s" %s skipping %s (up-to-date)) rr_fix_object_argslibrary_filename _need_linkr rrr<rrr) rroutput_libnamerr target_langoutput_filenamelib_argsrs r)create_static_libzMSVCCompiler.create_static_libs  OO   "33GZHH//;E0GG ??7O 4 4 C'O";!<z%MSVCCompiler.link..sNNN:+NNNrOrrz/IMPLIB:rrr)rrr _fix_lib_argswarnstrr rrr<rrrrrrrrrqmkpathr rrrrr)r target_descrrr libraries library_dirsruntime_library_dirsexport_symbolsrrr build_tempr fixed_argslib_optsr export_optsld_argsdll_namedll_ext implib_filers r)linkzMSVCCompiler.links  OO   "33GZHH'' <(<>> 8B5 >'**#"NNNNN# # 4rO)rrrr)rr)NNNrNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname____doc__ compiler_type executablesrrrrrrrstatic_lib_extensionshared_lib_extensionstatic_lib_formatshared_lib_format exe_extensionr}rrrrrrr rrr __classcell__)r s@r)ryrys66MKFM---OWNWN$o5$%'56NMM!!,22)M!!!! J J J J `$%$&::::DHIAEWWWWz&* !&* CCCC<"&  CCCCCCCCJ*****!!!LLL***rOryr)rrr:rdistutils.errorsrrrrrdistutils.ccompilerrr distutilsr distutils.utilr itertoolsr r*rAPLAT_SPEC_TO_RUNTIMErNrmrvrryrSrOr)r,s  ??????????????::::::::''''''"""8B  $<* qqqqq9qqqqqrO