\d[0dZddlZddlZddlmZmZmZmZmZddl m Z m Z ddl m Z dZ ddlZdZeZejZejZejZejZnP#e$rH ddlZddlZdZeZejZejZejZejZn#e$re jdYnwxYwYnwxYwerejejejej fZ!d Z"d Z#d Z$Gd d Z%dZ&dZ'dZ(Gdde Z)e&dkr e j*de)Z+ddl,m)Z)ddl,m%Z%dSdS)zdistutils.msvccompiler Contains MSVCCompiler, an implementation of the abstract CCompiler class for the Microsoft Visual Studio. N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)logFTzWarning: Can't read registry to find the necessary compiler setting Make sure that Python modules winreg, win32api or win32con are installed.c t||}n#t$rYdSwxYwg}d} t||}n#t$rYnwxYw|||dz }=|S)zReturn list of registry keys.NrT) RegOpenKeyExRegError RegEnumKeyappend)basekeyhandleLiks '..\python\lib\distutils\msvccompiler.py read_keysr6sdC(( tt A A 61%%AA    E    Q  Hs !!; AAc t||}n#t$rYdSwxYwi}d} t||\}}}n#t$rYn=wxYw|}t ||t |<|dz }_|S)zXReturn dict of registry keys and values. All names are converted to lowercase. NrTr )r r RegEnumValuelower convert_mbcs)rrrdrnamevaluetypes r read_valuesr!Gs dC(( tt A A  ,VQ 7 7 D%    E zz|| ,U 3 3,t   Q Hs !!? A  A cft|dd}| |d}n#t$rYnwxYw|S)Ndecodembcs)getattr UnicodeError)sdecs rrr\sQ !Xt $ $C  F AA    D  Hs ! ..c&eZdZdZdZdZdZdS) MacroExpanderc>i|_||dSN)macros load_macros)selfversions r__init__zMacroExpander.__init__fs#  !!!!!cjtD]*}t||}|r|||jd|z<dS+dS)Nz$(%s))HKEYSr!r-)r/macropathrrrs r set_macrozMacroExpander.set_macrojsR  DD$''A /0v GeO,   r2c d|z}|d|dzd|d|dzdd}|d|d  |d kr|d |d n|d |d n!#t$r}tdd}~wwxYwd}tD]Y} t ||}n#t $rY wxYwt |d}t||d|} | d|jd<ZdS)Nz%Software\Microsoft\VisualStudio\%0.1f VCInstallDirz \Setup\VC productdir VSInstallDirz \Setup\VSz Software\Microsoft\.NETFramework FrameworkDir installrootg@FrameworkSDKDirzsdkinstallrootv1.1sdkinstallrootaPython was built with Visual Studio 2003; extensions must be built with a compiler than can generate compatible binaries. Visual Studio 2003 was not found on this system. If you have Cygwin installed, you can try compiling with MingW32, by passing "-c mingw32" to setup.py.z.Software\Microsoft\NET Framework Setup\Productr\r0z$(FrameworkVersion)) r7KeyErrorrr4r rrr!r-) r/r0vsbasenetexcprhrrs rr.zMacroExpander.load_macrosqsq9GC ~v ' > >D  q))    Q""CDaaa"566A129DK- . . > >s*5B B(B##B(7C CCcp|jD]\}}|||}|Sr,)r-itemsreplace)r/r'rvs rsubzMacroExpander.subs;K%%''  DAq !QAAr2N)__name__ __module__ __qualname__r1r7r.rKr2rr*r*esP""">>>8r2r*cvd}tj|}|dkrdS|t|z}tj|ddd\}}t |dddz }|dkr|dz }t |d d d z }|dkrd }|dkr||zSdS) zReturn the version of MSVC that was used to build Python. For Python 2.3 and up, the version number is included in sys.version. For earlier versions, assume the compiler is MSVC 6. zMSC v.N r g$@r)sysr0findlensplitint)prefixrr'rest majorVersion minorVersions rget_build_versionras F   ABwwq CKKAk!""o##C++GAtq"v;;?Lr q1v;;%Lq ql** 4r2cd}tj|}|dkrdStjd|}tj|t|z|S)zUReturn the processor architecture. Possible results are "Intel" or "AMD64". z bit (rQIntel))rXr0rYrZ)r]rjs rget_build_architecturerfs^ F   ABwww a  A ;qV}Q ''r2cg}|D]:}tj|}||vr||;|S)znReturn a list of normalized paths with duplicates removed. The current order of paths is maintained. )osr6normpathr)paths reduced_pathsrEnps rnormalize_and_reduce_pathsrmsS M %% W  a  ] " "   $ $ $ r2ceZdZdZdZiZdgZgdZdgZdgZ eezeze zZ dZ dZ d Z d Zd xZZd ZddZdZ ddZ d dZ d!dZ d"dZdZdZdZd#dZdZd$dZdZdS)% 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.exercNtj||||t|_t |_|jdkrC|jdkr!d|_t|j|_nd|_d|jz|_ nd|jdzz|_ d|_ dS) NrczSoftware\Microsoft\VisualStudiozSoftware\Microsoft\DevstudiozVisual Studio version %szMicrosoft SDK compiler %srRF) rr1ra_MSVCCompiler__versionrf_MSVCCompiler__arch_MSVCCompiler__rootr*_MSVCCompiler__macros_MSVCCompiler__product initialized)r/verbosedry_runforces rr1zMSVCCompiler.__init__sD'7E:::*,,,.. ;' ! !~""@ -dn = = = 7$.HDNN9DNQQ  )))D % %)))D %!*lsAF F#"F#c|d}g}|D]s}tj|\}}tj|d}|tj|d}||jvrt d|z|rtj|}||jvr<| tj |||j z||j vr=| tj |||j z8| tj |||j zu|S)Nrr zDon't know how to compile %s)rhr6splitext splitdriveisabssrc_extensionsrbasename_rc_extensionsrr res_extension_mc_extensions obj_extension)r/source_filenames strip_dir output_dir obj_namessrc_namerexts robject_filenameszMSVCCompiler.object_filenames7s  Bz ( L LH'**H55KT37%%d++A.D d++,,-D$---#$BX$MNNN /w''..d)))  "',, 04t7I0I#K#KLLLL+++  "',, 04t7I0I#K#KLLLL  "',, 04t7I0I#K#KLLLLr2Nc |js||||||||} | \}} }} } |pg} | d|r| |jn| |j| D];} | |\}}n#t$rYwxYw|rtj |}||j vrd|z}n||j vrd|z}n||j vrQ|}d|z} ||jg| z|gz|gzn!#t $r}t#|d}~wwxYw||jvrtj |}tj |} ||jgd|d|gz|gztj tj |\}}tj ||dz}||jgd|zgz|gzn!#t $r}t#|d}~wwxYwt#d|d |d |z} ||jg| z| z||gz|z#t $r}t#|d}~wwxYw| S) Nz/cz/Tcz/Tpz/foz-hz-rrqzDon't know how to compile z to z/Fo)ryr_setup_compilerextendrrrArhr6abspath _c_extensions_cpp_extensionsrspawnrrrrdirnamerrrrr)r/sourcesrr- include_dirsdebug extra_preargsextra_postargsdepends compile_infoobjectspp_optsbuild compile_optsobjsrcr input_opt output_optmsgh_dirrc_dirr_rc_files rcompilezMSVCCompiler.compileVs  OO   **:v|+2G^MM :F7%$* T"""  6    : ; ; ; ;    4 5 5 5? (? (C  :SS     +gooc**d(((!CK ,,,!CK +++ "S[ ,JJy72 *| ,/8k :;;;;),,,&s+++,+++,,-- ,JJy $eT6: ;>AU CDDD g..0@0@#0F0FGGGD! gllFD5LAAGJJy % } -07y 9::::*,,,&s+++,#l&)cc33$0111J ( DG9|3g=%z23)*++++& ( ( ("3''' (s[ B  B-,B-&D)) E3EEB.I I! II!)J,, K 6KK c|js||||\}}|||}|||rN|d|zgz}|r ||jg|zdS#t$r}t|d}~wwxYwtj d|dS)N)r/OUT:skipping %s (up-to-date)) ryr_fix_object_argslibrary_filename _need_linkrrrrr r) r/routput_libnamerr target_langoutput_filenamelib_argsrs rcreate_static_libzMSVCCompiler.create_static_libs  OO    $ 5 5gz J J*//;E0GG ??7O 4 4 C'O";!<> :D7L"6  5 IIN2334 5 5 5#4#/1E#,..  ! gll:GGO ??7O 4 4, Ci2226"7;GG"1!""5GG2"7GG"1GK&," 5 5"":#34444)K7")O";!<=G)&(g&6&6G$$_55'7'7#7 gllGOOGAJ//))(3355  [ 8999 ,+  /~... KK88 9 9 9 % DK=7233333% % % %nn$ % I0/ B B B B Bs<I I:&I55I:c d|zS)Nz /LIBPATH:rOr/dirs rlibrary_dir_optionzMSVCCompiler.library_dir_options S  r2c td)Nz>'**#"NNNNN# # 4r2c|jD]b}tjtj||}tj|r|cSctjddD]b}tjtj||}tj|r|cSc|S)aReturn 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'. Pathr)rrhr6rrisfilerr[)r/exerEfns rrzMSVCCompiler.find_exe4s  Abgooa00#66Bw~~b!!   F#))#..  Abgooa0055Bw~~b!!    r2x86ctsgS|dz}|jdkrd|j|jfz}n |jd|d}tD]q}t ||}|r]|jdkr5|j||dcS||dcSr|jdkr9tD]1}t |d|jz|d n2gS) zGet a list of devstudio directories (include, lib or path). Return a list of strings. The list will be empty if unable to access the registry or appropriate registry keys not found. z dirsrsz6%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directoriesz.\6.0\Build System\Components\Platforms\Win32 (z )\DirectoriesrrRz%s\6.0NzIt seems you have Visual Studio 6 installed, but the expected registry settings are not present. You must at least run the Visual Studio GUI once so that these entries are created.) _can_read_regrtrvr4r!rwrKr[r)r/r6platformrrrs rrzMSVCCompiler.get_msvc_pathsJs@  Ig~ >Q  Lk4>23CC26hhhHC . .DD#&&A .>Q&&=,,QtW55;;C@@@@@T7==-----  . >Q    tY%<==III=>>>E J  r2c|dkr|d}n||}|r$d|tj|<dSdS)zSet environment variable 'name' to an MSVC path type value. This is equivalent to a SET command prior to execution of spawned commands. rlibraryrN)rrrhr)r/rrEs rrzMSVCCompiler.set_path_env_varnsc 5==##I..AA##D))A  +"xx{{BJt    + +r2)rrr)rr)NNNrNNN)NrN) NNNNNrNNNN)r)r)rLrMrN__doc__ compiler_type executablesrrrrrrrstatic_lib_extensionshared_lib_extensionstatic_lib_formatshared_lib_format exe_extensionr1rrrrrrrrrrrrrOr2rroros66MKFM---OWNWN$o5$%'56NMM!!,22)M!!!!$< < < D$%$&@HIAERRRRp&* !&* CCCC:"&  LCLCLCLCf!!!NNN***$,""""H + + + + +r2rog @z3Importing new compiler from distutils.msvc9compiler)ro)r*)-r rXrhdistutils.errorsrrrrrdistutils.ccompilerrr distutilsr rwinreghkey_mod OpenKeyExr EnumKeyr EnumValuererrorr ImportErrorwin32apiwin32coninfo HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTr4rr!rr*rarfrmrorOldMSVCCompilerdistutils.msvc9compilerrOr2rr's''''''''''''''         8MMMMH#LJ#L|HH8888 , ( , > 8887 8 8 8 8 888")   '  (  ' )E    "   *   ++++++++Z2 ( ( (   s+s+s+s+s+9s+s+s+l # CICDDD"O44444455555555 s5$AB(A>=B>BBBBB