. ^c@sdZddlZddlmZddlmZmZddlmZm Z m Z m Z ddl Z ddl Z ddlZddlZddlmZddlmZdd lmZe jd krdd lmZdd lmZnd fdYZeZeejjfZyddlm Z Wnek rDnXdZ!ddZ"dZ#dZ$ddZ%dfdYZ&dfdYZ'dfdYZ(dfdYZ)dS(s Improved support for Microsoft Visual C++ compilers. Known supported compilers: -------------------------- Microsoft Visual C++ 9.0: Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) Microsoft Windows SDK 6.1 (x86, x64, ia64) Microsoft Windows SDK 7.0 (x86, x64, ia64) Microsoft Visual C++ 10.0: Microsoft Windows SDK 7.1 (x86, x64, ia64) Microsoft Visual C++ 14.X: Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64) This may also support compilers shipped with compatible Visual Studio versions. iN(topen(tlistdirtpathsep(tjointisfiletisdirtdirname(t LegacyVersion(t filterfalsei(t get_unpatchedtWindows(twinreg(tenvironR cBs eZdZdZdZdZRS(N(t__name__t __module__tNonet HKEY_USERStHKEY_CURRENT_USERtHKEY_LOCAL_MACHINEtHKEY_CLASSES_ROOT(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR *s(tRegcCsd}|d|f}ytj|d}WnQtk ry&|d|f}tj|d}Wqtk r{d}qXnX|rt|d}t|r|Sntt|S(s Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone compiler build for Python (VCForPython / Microsoft Visual C++ Compiler for Python 2.7). Fall back to original behavior when the standalone compiler is not available. Redirect the path of "vcvarsall.bat". Parameters ---------- version: float Required Microsoft Visual C++ version. Return ------ str vcvarsall.bat path s-Software\%sMicrosoft\DevDiv\VCForPython\%0.1ftt installdirs Wow6432Node\s vcvarsall.batN(Rt get_valuetKeyErrorRRRR tmsvc9_find_vcvarsall(tversiontvc_basetkeyt productdirt vcvarsall((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRAs   tx86cOsy#tt}|||||SWn'tjjk r<ntk rLnXyt||jSWn,tjjk r}t|||nXdS(so Patched "distutils.msvc9compiler.query_vcvarsall" for support extra Microsoft Visual C++ 9.0 and 10.0 compilers. Set environment without use of "vcvarsall.bat". Parameters ---------- ver: float Required Microsoft Visual C++ version. arch: str Target architecture. Return ------ dict environment N( R tmsvc9_query_vcvarsallt distutilsterrorstDistutilsPlatformErrort ValueErrortEnvironmentInfot return_envt_augment_exception(tvertarchtargstkwargstorigtexc((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR ks  cCsxytt|SWntjjk r-nXyt|ddjSWn)tjjk rs}t|dnXdS(s* Patched "distutils._msvccompiler._get_vc_env" for support extra Microsoft Visual C++ 14.X compilers. Set environment without use of "vcvarsall.bat". Parameters ---------- plat_spec: str Target architecture. Return ------ dict environment t vc_min_verg,@N(R tmsvc14_get_vc_envR!R"R#R%R&R'(t plat_specR-((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR/s cOsbdtjkrOddl}t|jtdkrO|jjj||Sntt ||S(s Patched "distutils._msvccompiler.gen_lib_options" for fix compatibility between "numpy.distutils" and "distutils._msvccompiler" (for Numpy < 1.11.2) snumpy.distutilsiNs1.11.2( tsystmodulestnumpyRt __version__R!t ccompilertgen_lib_optionsR tmsvc14_gen_lib_options(R*R+tnp((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR7s  RcCs|jd}d|jks1d|jkrd}|jt}d}|dkr|jjddkr|d 7}q|d 7}q|d kr|d 7}||d 7}q|dkr|d7}qn|f|_dS(sl Add details to the exception message to help guide the user as to what action will resolve it. iRsvisual cs0Microsoft Visual C++ {version:0.1f} is required.s-www.microsoft.com/download/details.aspx?id=%dg"@tia64is( Get it with "Microsoft Windows SDK 7.0"s% Get it from http://aka.ms/vcpython27g$@s* Get it with "Microsoft Windows SDK 7.1": iW g,@s[ Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/N(R*tlowertformattlocalstfind(R-RR)tmessagettmplt msdownload((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR's $      t PlatformInfocBszeZdZejddjZdZedZ dZ dZ e e dZ e e dZe d ZRS( s Current and Target Architectures information. Parameters ---------- arch: str Target architecture. tprocessor_architectureRcCs|jjdd|_dS(Ntx64tamd64(R:treplaceR)(tselfR)((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt__init__scCs|j|jjddS(ss Return Target CPU architecture. Return ------ str Target CPU t_i(R)R=(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt target_cpus cCs |jdkS(s Return True if target CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits R(RI(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt target_is_x86s cCs |jdkS(s Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits R(t current_cpu(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytcurrent_is_x86s cCs=|jdkr|rdS|jdkr2|r2dSd|jS(sj Current platform specific subfolder. Parameters ---------- hidex86: bool return '' and not '' if architecture is x86. x64: bool return 'd' and not 'md64' if architecture is amd64. Return ------ str subfolder: ' arget', or '' (see hidex86 parameter) RRRDs\x64s\%s(RK(RFthidex86RC((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt current_dirscCs=|jdkr|rdS|jdkr2|r2dSd|jS(sr Target platform specific subfolder. Parameters ---------- hidex86: bool return '' and not '\x86' if architecture is x86. x64: bool return '\x64' and not '\amd64' if architecture is amd64. Return ------ str subfolder: '\current', or '' (see hidex86 parameter) RRRDs\x64s\%s(RI(RFRMRC((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt target_dir(scCsB|r dn|j}|j|kr(dS|jjdd|S(sp Cross platform specific subfolder. Parameters ---------- forcex86: bool Use 'x86' as current architecture even if current architecture is not x86. Return ------ str subfolder: '' if target architecture is current architecture, '\current_target' if not. RRs\s\%s_(RKRIRORE(RFtforcex86tcurrent((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt cross_dir>s(R Rt__doc__R tgetR:RKRGtpropertyRIRJRLtFalseRNRORR(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRAs  t RegistryInfocBseZdZejejejejfZdZ e dZ e dZ e dZ e dZe dZe dZe dZe d Ze d Zed Zd ZRS( s Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. cCs ||_dS(N(tpi(RFt platform_info((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRGcscCsdS(s Microsoft Visual Studio root registry key. Return ------ str Registry key t VisualStudio((RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt visualstudiofs cCst|jdS(s Microsoft Visual Studio SxS registry key. Return ------ str Registry key tSxS(RR[(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytsxsrs cCst|jdS(s| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key tVC7(RR](RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytvc~s cCst|jdS(s Microsoft Visual Studio VS7 registry key. Return ------ str Registry key tVS7(RR](RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytvss cCsdS(s Microsoft Visual C++ for Python registry key. Return ------ str Registry key sDevDiv\VCForPython((RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt vc_for_pythons cCsdS(sq Microsoft SDK registry key. Return ------ str Registry key sMicrosoft SDKs((RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt microsoft_sdks cCst|jdS(s Microsoft Windows/Platform SDK registry key. Return ------ str Registry key R (RRc(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt windows_sdks cCst|jdS(s Microsoft .NET Framework SDK registry key. Return ------ str Registry key tNETFXSDK(RRc(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt netfx_sdks cCsdS(s Microsoft Windows Kits Roots registry key. Return ------ str Registry key sWindows Kits\Installed Roots((RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytwindows_kits_rootss cCs4|jjs|rdnd}td|d|S(s Return key in Microsoft software registry. Parameters ---------- key: str Registry key path where look. x86: str Force x86 software registry. Return ------ str Registry key Rt Wow6432NodetSoftwaret Microsoft(RXRLR(RFRRtnode64((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt microsofts!cCstj}tj}|j}x|jD]}y||||d|}Wnkttfk r|jjs%y"||||t d|}Wqttfk rq%qXqq%nXytj ||dSWq%ttfk rq%Xq%WdS(s Look for values in registry in Microsoft software registry. Parameters ---------- key: str Registry key path where look. name: str Value name to find. Return ------ str value iN( R tKEY_READtOpenKeyRltHKEYStOSErrortIOErrorRXRLtTruet QueryValueEx(RFRtnametkey_readtopenkeytmsthkeytbkey((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytlookups"   " (R RRSR RRRRRoRGRUR[R]R_RaRbRcRdRfRgRVRlRz(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRWUs"           t SystemInfocBseZdZejddZejddZejdeZddZ dZ dZ dZ e d Zed Zed Zd Zd ZedZedZedZedZedZedZedZedZedZedZedZedZedZ dZ!e ddZ"RS(s Microsoft Windows and Visual Studio related system information. Parameters ---------- registry_info: RegistryInfo "RegistryInfo" instance. vc_ver: float Required Microsoft Visual C++ version. tWinDirRt ProgramFilessProgramFiles(x86)cCsG||_|jj|_|j|_|p6|j|_|_dS(N(triRXtfind_programdata_vs_verstknown_vs_pathst_find_latest_available_vs_vertvs_vertvc_ver(RFt registry_infoR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRGs cCsZ|j}|p|js0tjjdnt|}|j|jt|dS(sm Find the latest VC version Return ------ float version s%No Microsoft Visual C++ version foundi(tfind_reg_vs_versRR!R"R#tsettupdatetsorted(RFt reg_vc_verstvc_vers((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR%s    c Cs|jj}|jj|jj|jjf}g}xI|jjD];}x2|D]*}y%tj|||dtj}Wnt t fk rqMnXtj |\}}} xdt |D]V} y<t tj|| d} | |kr|j| nWqtk rqXqWx`t |D]R} y8t tj|| } | |kr^|j| nWq!tk rrq!Xq!WqMWq@Wt|S(s Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions i(R~RlR_RbRaRoR RnRmRpRqt QueryInfoKeytrangetfloatt EnumValuetappendR$tEnumKeyR( RFRwtvckeystvs_versRxRRytsubkeystvaluesRHtiR(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR8s2 ! %    c Csi}d}yt|}Wnttfk r6|SXx|D]}ywt||d}t|ddd}tj|}WdQX|d}tt|d|||j|d tttfk rq>q>Xq>W|S( s Find Visual studio 2017+ versions from information in "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances". Return ------ dict float version as key, path as value. s9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancess state.jsontrttencodingsutf-8NtinstallationPaths VC\Tools\MSVCtinstallationVersion( RRpRqRRtjsontloadt_as_float_versionR( RFt vs_versionst instances_dirt hashed_namesRtt state_patht state_filetstatetvs_path((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR[s"    cCs tdj|jdd S(s Return a string version as a simplified float version (major.minor) Parameters ---------- version: str Version. Return ------ float version t.i(RRtsplit(R((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRscCs?t|jd|j}|jj|jjd|jp>|S(sp Microsoft Visual Studio directory. Return ------ str path sMicrosoft Visual Studio %0.1fs%0.1f(RtProgramFilesx86RR~RzRa(RFtdefault((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt VSInstallDirs cCsC|jp|j}t|s?d}tjj|n|S(sm Microsoft Visual C++ directory. Return ------ str path s(Microsoft Visual C++ directory not found(t _guess_vct_guess_vc_legacyRR!R"R#(RFtpathtmsg((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt VCInstallDirs  cCs|jdkrdSy|j|j}Wntk rC|j}nXt|d}y3t|d}|j||_t||SWntt t fk rdSXdS(sl Locate Visual C++ for VS2017+. Return ------ str path g,@Rs VC\Tools\MSVCiN( RRRRRRRRRpRqt IndexError(RFtvs_dirtguess_vcR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRs   cCst|jd|j}t|jjd|j}|jj|d}|r_t|dn|}|jj|jjd|jp|S(s{ Locate Visual C++ for versions prior to 2017. Return ------ str path s Microsoft Visual Studio %0.1f\VCs%0.1fRtVC(RRRR~RbRzR_(RFRtreg_patht python_vct default_vc((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRs cCsc|jdkrdS|jdkr&dS|jdkr9dS|jd krLdS|jdkr_dSdS(s Microsoft Windows SDK versions for specified MSVC++ version. Return ------ tuple of str versions g"@s7.0s6.1s6.0ag$@s7.1s7.0ag&@s8.0s8.0ag(@s8.1s8.1ag,@s10.0N(s7.0s6.1s6.0a(s7.1s7.0a(s8.0s8.0a(s8.1s8.1a(s10.0s8.1(R(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytWindowsSdkVersions cCs|jt|jdS(st Microsoft Windows SDK last version. Return ------ str version tlib(t_use_last_dir_nameRt WindowsSdkDir(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytWindowsSdkLastVersions cCsd}xI|jD]>}t|jjd|}|jj|d}|rPqqW| sft| rt|jjd|j}|jj|d}|rt|d}qn| st| r!xX|jD]J}||jd }d|}t|j |}t|r|}qqWn| s5t| r}xE|jD]7}d |}t|j |}t|r?|}q?q?Wn|st|j d }n|S( sn Microsoft Windows SDK directory. Return ------ str path Rsv%stinstallationfolders%0.1fRtWinSDKRsMicrosoft SDKs\Windows Kits\%ssMicrosoft SDKs\Windows\v%st PlatformSDK( RRR~RdRzRRbRtrfindR}R(RFtsdkdirR(tlocRt install_basetintvertd((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR s6     c Cs,|jdkrd}d}n<d}|jdkr9tnt}|jjdtd|}d||jd d f}g}|jd krx3|jD]%}|t|jj ||g7}qWnx4|j D])}|t|jj d ||g7}qWx-|D]%}|jj |d }|r|SqWdS(sy Microsoft Windows SDK executable directory. Return ------ str path g&@i#Ri(g(@RCRMsWinSDK-NetFx%dTools%ss\t-g,@sv%sARN( RRrRVRXRNREtNetFxSdkVersionRR~RfRRdRz( RFtnetfxverR)RMtfxtregpathsR(Rtexecpath((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytWindowsSDKExecutablePath7s"  &' cCs5t|jjd|j}|jj|dp4dS(sl Microsoft Visual F# directory. Return ------ str path s%0.1f\Setup\F#RR(RR~R[RRz(RFR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFSharpInstallDirZs cCs_|jdkrdnd}x=|D]5}|jj|jjd|}|r"|pVdSq"WdS( st Microsoft Universal CRT SDK directory. Return ------ str path g,@t10t81s kitsroot%sRN(RR((RR~RzRg(RFtversR(R((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytUniversalCRTSdkDirgs   cCs|jt|jdS(s Microsoft Universal C Runtime SDK last version. Return ------ str version R(RRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytUniversalCRTSdkLastVersion{s c Cs|jdkrd Sd S( s Microsoft .NET Framework SDK versions. Return ------ tuple of str versions g,@s4.7.2s4.7.1s4.7s4.6.2s4.6.1s4.6s4.5.2s4.5.1s4.5( s4.7.2s4.7.1s4.7s4.6.2s4.6.1s4.6s4.5.2s4.5.1s4.5((R(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRscCsRd}xE|jD]:}t|jj|}|jj|d}|rPqqW|S(su Microsoft .NET Framework SDK directory. Return ------ str path Rtkitsinstallationfolder(RRR~RfRz(RFRR(R((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt NetFxSdkDirs cCs1t|jd}|jj|jjdp0|S(sw Microsoft .NET Framework 32bit directory. Return ------ str path sMicrosoft.NET\Frameworktframeworkdir32(RR|R~RzR_(RFtguess_fw((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFrameworkDir32s cCs1t|jd}|jj|jjdp0|S(sw Microsoft .NET Framework 64bit directory. Return ------ str path sMicrosoft.NET\Framework64tframeworkdir64(RR|R~RzR_(RFR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFrameworkDir64s cCs |jdS(s Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions i (t_find_dot_net_versions(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFrameworkVersion32s cCs |jdS(s Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions i@(R(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFrameworkVersion64s cCs|jj|jjd|}t|d|}|pM|j|dpMd}|jdkri|dfS|jdkr|jd d krd n|d fS|jd krdS|jdkrdSdS(s Find Microsoft .NET Framework versions. Parameters ---------- bits: int Platform number of bits: 32 or 64. Return ------ tuple of str versions sframeworkver%dsFrameworkDir%dtvRg(@sv4.0g$@itv4s v4.0.30319sv3.5g"@s v2.0.50727g @sv3.0N(sv3.5s v2.0.50727(sv3.0s v2.0.50727(R~RzR_tgetattrRRR:(RFtbitstreg_vert dot_net_dirR(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRs &cs8fdttD}t|dp7dS(s) Return name of the last dir in path or '' if no dir found. Parameters ---------- path: str Use dirs in this path prefix: str Use only dirs starting by this prefix Return ------ str name c3s9|]/}tt|r|jr|VqdS(N(RRt startswith(t.0tdir_name(Rtprefix(s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pys sRN(treversedRtnextR(RRt matching_dirs((RRs3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRsN(#R RRSR RTR|R}RRRGRRRt staticmethodRRURRRRRRRRRRRRRRRRRRR(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR{ s:   # *   +#    R%cBseZdZdddZedZedZedZedZ edZ edZ ed Z ed Z ed Zed Zed ZdZedZedZedZedZedZedZedZedZedZedZedZedZedZedZ dZ!e"ddZ#RS( sY Return environment variables for specified Microsoft Visual C++ version and platform : Lib, Include, Path and libpath. This function is compatible with Microsoft Visual C++ 9.0 to 14.X. Script created by analysing Microsoft environment configuration files like "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ... Parameters ---------- arch: str Target architecture. vc_ver: float Required Microsoft Visual C++ version. If not set, autodetect the last version. vc_min_ver: float Minimum Microsoft Visual C++ version. icCsdt||_t|j|_t|j||_|j|kr`d}tjj |ndS(Ns.No suitable Microsoft Visual C++ version found( RARXRWR~R{tsiRR!R"R#(RFR)RR.terr((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRG0s cCs |jjS(sk Microsoft Visual Studio. Return ------ float version (RR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR9s cCs |jjS(sp Microsoft Visual C++ version. Return ------ float version (RR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyREs cCsddg}|jdkrd|jjdtdt}|dg7}|dg7}|d|g7}ng|D]}t|jj|^qkS( su Microsoft Visual Studio Tools. Return ------ list of str paths s Common7\IDEs Common7\Toolsg,@RMRCs1Common7\IDE\CommonExtensions\Microsoft\TestWindowsTeam Tools\Performance ToolssTeam Tools\Performance Tools%s(RRXRNRrRRR(RFtpathst arch_subdirR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytVSToolsQs   cCs(t|jjdt|jjdgS(s Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths tIncludesATLMFC\Include(RRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt VCIncludeses cCs|jdkr'|jjdt}n|jjdt}d|d|g}|jdkrs|d|g7}ng|D]}t|jj|^qzS(s Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths g.@RCRMsLib%ss ATLMFC\Lib%sg,@s Lib\store%s(RRXRORrRRR(RFRRR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt VCLibrariesrs cCs)|jdkrgSt|jjdgS(s Microsoft Visual C++ store references Libraries. Return ------ list of str paths g,@sLib\store\references(RRRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt VCStoreRefss cCsr|j}t|jdg}|jdkr3tnt}|jj|}|rq|t|jd|g7}n|jdkrd|jjdt}|t|j|g7}n|jdkrU|jj rdnd}|t|j||jj d tg7}|jj |jj krn|t|j||jjd tg7}qnn|t|jd g7}|S( sr Microsoft Visual C++ Tools. Return ------ list of str paths t VCPackagesg$@sBin%sg,@RMg.@s bin\HostX86%ss bin\HostX64%sRCtBin( RRRRRrRVRXRRRNRLRORKRI(RFRttoolsRPRRthost_dir((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytVCToolss&  &,cCs|jdkrD|jjdtdt}t|jjd|gS|jjdt}t|jjd}|j}t|d||fgSdS(sw Microsoft Windows SDK Libraries. Return ------ list of str paths g$@RMRCsLib%sRs%sum%sN(RRXRORrRRRt _sdk_subdir(RFRRtlibver((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt OSLibrariess  cCst|jjd}|jdkr7|t|dgS|jdkrR|j}nd}t|d|t|d|t|d|gSd S( su Microsoft Windows SDK Include. Return ------ list of str paths tincludeg$@tglg,@Rs%sshareds%sums%swinrtN(RRRRR(RFRtsdkver((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt OSIncludess  cCst|jjd}g}|jdkr:||j7}n|jdkrb|t|dg7}n|jdkr||t|jjdt|ddt|d dt|d dt|jjd d d |jdddg7}n|S(s} Microsoft Windows SDK Libraries Paths. Return ------ list of str paths t Referencesg"@g&@sCommonConfiguration\Neutralg,@t UnionMetadatas'Windows.Foundation.UniversalApiContracts1.0.0.0s%Windows.Foundation.FoundationContracts,Windows.Networking.Connectivity.WwanContractt ExtensionSDKssMicrosoft.VCLibss%0.1ftCommonConfigurationtneutral(RRRRR(RFtreftlibpath((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt OSLibpaths$  cCst|jS(ss Microsoft Windows SDK Tools. Return ------ list of str paths (tlistt _sdk_tools(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytSdkToolss ccsg|jdkrA|jdkr$dnd}t|jj|Vn|jjs|jjdt}d|}t|jj|Vn|jd kr|jjrd}n|jjd tdt}d |}t|jj|Vn`|jdkrIt|jjd}|jjdt}|jj }t|d ||fVn|jj rc|jj Vnd S(s Microsoft Windows SDK Tools paths generator. Return ------ generator of str paths g.@g&@RsBin\x86RCsBin%sg$@RRMsBin\NETFX 4.0 Tools%ss%s%sN(g$@g&@( RRRRRXRLRNRrRJRR(RFtbin_dirRRR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRs(      cCs|jj}|rd|SdS(su Microsoft Windows SDK version subdir. Return ------ str subdir s%s\R(RR(RFtucrtver((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR6s cCs)|jdkrgSt|jjdgS(ss Microsoft Windows SDK Setup. Return ------ list of str paths g"@tSetup(RRRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytSdkSetupCs cCs|j}|j}|jdkrDt}|j o>|j }n6|jpY|j}|jdkpw|jdk}g}|r|g|jD]}t |j |^q7}n|r|g|j D]}t |j |^q7}n|S(sv Microsoft .NET Framework Tools. Return ------ list of str paths g$@RD( RXRRRrRJRLRKRIRRRRR(RFRXRt include32t include64RR(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFxToolsRs  ))cCsO|jdks|jj r gS|jjdt}t|jjd|gS(s~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths g,@RCslib\um%s(RRRRXRORrR(RFR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytNetFxSDKLibrariesos cCs6|jdks|jj r gSt|jjdgS(s} Microsoft .Net Framework SDK Includes. Return ------ list of str paths g,@s include\um(RRRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytNetFxSDKIncludess cCst|jjdgS(s Microsoft Visual Studio Team System Database. Return ------ list of str paths s VSTSDB\Deploy(RRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytVsTDbs cCs|jdkrgS|jdkrF|jj}|jjdt}n|jj}d}d|j|f}t||g}|jdkr|t||dg7}n|S(sn Microsoft Build Engine. Return ------ list of str paths g(@g.@RMRsMSBuild\%0.1f\bin%stRoslyn(RRRRXRNRrRR(RFt base_pathRRtbuild((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytMSBuilds   cCs)|jdkrgSt|jjdgS(st Microsoft HTML Help Workshop. Return ------ list of str paths g&@sHTML Help Workshop(RRRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytHTMLHelpWorkshops cCs`|jdkrgS|jjdt}t|jjd}|j}t|d||fgS(s Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths g,@RCRs%sucrt%s(RRXRORrRRRt _ucrt_subdir(RFRRR ((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt UCRTLibrariess  cCs?|jdkrgSt|jjd}t|d|jgS(s Microsoft Universal C Runtime SDK Include. Return ------ list of str paths g,@Rs%sucrt(RRRRR(RFR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyt UCRTIncludess cCs|jj}|rd|SdS(s Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir s%s\R(RR(RFR ((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyRs cCs0d|jkodknr#gS|jjgS(sk Microsoft Visual F#. Return ------ list of str paths g&@g(@(RRR(RF((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytFSharps c Cs d|j}|jjdtjd}g}|jj}t|jdd}t |rt |t |d}||t |dg7}n|t |dg7}d |jd d t |j d f}xEtj||D]1\}}t ||||} t| r| SqWd S( s Microsoft Visual C++ runtime redistributable dll. Return ------ str path svcruntime%d0.dllRCs\s\Toolss\RedistitonecoretredistsMicrosoft.VC%d.CRTi N(RRXRORrtstripRRRRERRRtintRt itertoolstproductR( RFt vcruntimeRtprefixest tools_patht redist_pathtcrt_dirsRtcrt_dirR((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytVCRuntimeRedists    cCstd|jd|j|j|j|jg|d|jd|j|j|j|j |j g|d|jd|j|j|j |j g|d|jd|j |j|j|j|j|j|j|j|jg |}|jdkrt|jr|j|d A B C D _unique_everseen('ABBCcAD', str.lower) --> A B C D N(RtaddRRt __contains__(titerableRtseentseen_addtelementtk((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR1zs         N($R RRSRRGRURRRRRRRRRRRRRR RRRRRRRRRRR'RrR&R*RR1(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pyR%s>    %! #   # 2 "(*RSRtioRtosRRtos.pathRRRRR1tplatformRtdistutils.errorsR!t#setuptools.extern.packaging.versionRtsetuptools.extern.six.movesRtmonkeyR tsystemR R R)t ImportErrorR"R#t_msvc9_suppress_errorstdistutils.msvc9compilerRRR R/R7R'RARWR{R%(((s3/usr/lib/python2.7/dist-packages/setuptools/msvc.pytsB "       * & $s