JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB  fM@sdZddlZddlZddlZddlZddlZddlmZmZm Z m Z m Z ddl m Z mZddlmZddlmZddlmZdd Zd d Zd d ZddZdddZdddZGddde 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)countc CsytjtjdtjtjBd}Wntk r<tddSXd}d}|xtD]}yt ||\}}}Wntk rPYnX|rT|tj krTt j |rTytt|}Wnttfk rwTYnX|dkrT||krT||}}qTWWdQRX||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)accesszVisual C++ is not registered)NNr)winregZ OpenKeyExHKEY_LOCAL_MACHINEZKEY_READZKEY_WOW64_32KEYOSErrorr debugr Z EnumValueZREG_SZospathisdirintfloat ValueError TypeError)key best_versionbest_dirivZvc_dirZvtversionrpsz_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r&zError executing {}cSs$i|]\}}}|r|r||qSr)r8)r9rr5r:rrr r;scss|]}|dVqdS)=N) partition)r9linerrr sz_get_vc_env..)rgetenvr)itemsr7rr+r,formatZSTDOUTdecoder/r erroroutputcmd splitlines)r4r6r5outexcenvrrr _get_vc_envns$     rMcCsN|stdtj}x2|D]*}tjtj||}tj|r|SqW|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)rrBsplitpathseprr-abspathr3)Zexepathspfnrrr _find_exes   rTZx86Z x86_amd64)Zwin32z win-amd64c seZdZdZdZiZdgZdddgZdgZdgZ eeee Z d Z d Z d Z d Zd ZZdZd(ddZd)ddZd*ddZd+ddZd,ddZd-ddZfddZd d!Zd"d#Zd$d%Zd.d&d'ZZS)/ MSVCCompilerzwConcrete class that implements an interface to Microsoft Visual C++, as defined by the CCompiler abstract class.Zmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs t||||d|_d|_dS)NF)r__init__ plat_name initialized)selfverboseZdry_runZforcerrr rVszMSVCCompiler.__init__NcCs|jrtd|dkrt}|tkr6tdttt|}t|}|sRtd|dd|_ |j t j }t d||_t d||_t d||_t d ||_t d ||_t d ||_x2|d d t j D]}|r||t jqWx6|d d t j D]}|r||t jqWd|_ddddddg|_ddddddg|_dddg}ddddg}|d!|_|d"|_|d#|_|d$|_||_||_ t!j"df|jt!j"df|jt!j"d f|jt!j#df|jt!j#df|jt!j#d f|jt!j$df|jt!j$df|jt!j$d f|j i |_%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.exeZincludelibz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCGz /DEBUG:FULL/MANIFEST:EMBED,ID=1/DLL/MANIFEST:EMBED,ID=2/MANIFESTUAC:NOFT)r])r])r^r_r`)r^r_r`)&rXAssertionErrorr PLAT_TO_VCVARSrrDtuplerMr*_pathsrNrrOrTcclinkerr\rcmcZmtZadd_include_dirrstripsepZadd_library_dirZpreprocess_optionscompile_optionscompile_options_debugZ ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARY_ldflags)rYrWr4Zvc_envrQdirldflagsZ ldflags_debugrrr initializesZ                     zMSVCCompiler.initializer[csTfddjDfddjjDp4dfdd}tt||S)Ncsi|] }j|qSr) obj_extension)r9ext)rYrr r;sz1MSVCCompiler.object_filenames..csi|] }j|qSr) res_extension)r9rr)rYrr r;sr[cstj|\}}r"tj|}n2tj|\}}|tjjtjjfrT|dd}ytj||St k rt d |YnXdS)NzDon't know how to compile {}) rrsplitextbasename splitdrive startswithrjaltsepr- LookupErrorrrD)rRbaserrr5)ext_map output_dir strip_dirrr make_out_path#s z4MSVCCompiler.object_filenames..make_out_path)src_extensions_rc_extensions_mc_extensionslistmap)rYZsource_filenamesr~r}rr)r|r}rYr~r object_filenamess zMSVCCompiler.object_filenamesc  Cs|js||||||||} | \}} }} } |p6g} | d|rT| |jn | |jd}x| D]}y| |\}}Wntk rwlYnX|rtj |}||j krd|}nD||j krd|}d}n*||j krB|}d|}y||jg| ||gWqltk r<}z t|Wdd}~XYqlXqln||jkrtj |}tj |}y\||jd|d||gtj tj |\}}tj ||d }||jd||gWqltk r}z t|Wdd}~XYqlXqlntd |||jg| | }|r$|d |||d |||y||Wqltk r}z t|Wdd}~XYqlXqlW| S) Nz/cFz/Tcz/TpTz/foz-hz-rz.rcz"Don't know how to compile {} to {}z/EHscz/Fo)rXrpZ_setup_compileappendextendrlrkKeyErrorrrrP _c_extensions_cpp_extensionsrspawnrgrrrdirnamerhrurvr-rDre)rYZsourcesr}ZmacrosZ include_dirsr extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsobjsrcrrZ input_optZ output_optmsgZh_dirZrc_dirr{r5Zrc_fileargsrrr compile9sn               zMSVCCompiler.compilec Cs|js||||\}}|j||d}|||r|d|g}|rJy,td|jd|| |jg|Wqt k r}z t |Wdd}~XYqXn td|dS)N)r}z/OUT:zExecuting "%s" %s zskipping %s (up-to-date)) rXrp_fix_object_argslibrary_filename _need_linkr rr\r-rrr) rYrZoutput_libnamer}r target_langoutput_filenameZlib_argsrrrr create_static_libs zMSVCCompiler.create_static_libc Cs|js||||\}}||||}|\}}}|rL|dt|t||||}|dk rptj ||}| ||r|j || f}dd|pgD}||||d|g}tj |d} |dk r tj tj|\}}tj | ||}|d|| r| |dd<| r.|| tj tj|}||y,td|jd |||jg|Wn,tk r}z t|Wdd}~XYnXn td |dS) Nz5I don't know what to do with 'runtime_library_dirs': cSsg|] }d|qS)z/EXPORT:r)r9Zsymrrr sz%MSVCCompiler.link..z/OUT:rz/IMPLIB:zExecuting "%s" %srzskipping %s (up-to-date))rXrprZ _fix_lib_argswarnstrrrrr-rrmrrurvrrrrPZmkpathr rrfrrr)rYZ target_descrrr}Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsrrrZ build_temprZ fixed_argsZlib_optsroZ export_optsZld_argsZdll_nameZdll_extZ implib_filerrrr linksL       zMSVCCompiler.linkc s4td}z|jtjd<t|S|tjd<XdS)Nr)rrBrdr)superr)rYrHZold_path) __class__rr rs    zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r)rYrnrrr library_dir_optionszMSVCCompiler.library_dir_optioncCs tddS)Nz:don't know how to set runtime library search path for MSVC)r)rYrnrrr runtime_library_dir_optionsz'MSVCCompiler.runtime_library_dir_optioncCs ||S)N)r)rYr\rrr library_optionszMSVCCompiler.library_optioncCs`|r|d|g}n|g}xB|D]6}x0|D](}tj|||}tj|r(|Sq(WqWdSdS)NZ_d)rrr-rr3)rYdirsr\rZ try_namesrnnameZlibfilerrr find_library_files    zMSVCCompiler.find_library_file)rrr)N)rr[)NNNrNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname____doc__Z compiler_typeZ executablesrrrrrrsrqZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrVrprrrrrrrrr __classcell__rr)rr rUsL   P  [  8 rU)N)rrZshutilstatr+rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr itertoolsr r!r2r7rMrTrbrUrrrr s$   "