JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB YI~dM@sddlZddlZddlZddlZddlZddlmZmZmZm Z m Z ddl m Z m Z ddlmZddlmZddlmZddZd d Zd d Zd dZdddZdddZGddde ZdS)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)Nr)rrBsplitpathseprr-abspathr3)Zexepathspfnrrr _find_exes   rTZx86Z x86_amd64)win32z win-amd64c seZdZdZiZdgZdddgZdgZdgZeeeeZ dZ d Z d Z d Z d ZZd Zd'ddZd(ddZd)ddZd*ddZd+ddZd,ddZfddZdd Zd!d"Zd#d$Zd-d%d&ZZS). MSVCCompilerZmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs t||||d|_d|_dS)NF)r__init__ plat_name initialized)selfverboseZdry_runforcerrr rWszMSVCCompiler.__init__NcCs|dkrt}|tkr(tdttt|}t|}|sDtd|dd|_|jt j }t d||_ t d||_ t d||_t d||_t d ||_t d ||_x2|d dt j D]}|r||t jqWx2|d dt j D]}|r||t jqWd|_d dddddg|_d dddddg|_d ddg}d dddg}|d |_|d!|_|d"|_|d#|_||_||_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.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`rarb)r`rarb)%r PLAT_TO_VCVARSrrDtuplerMr*_pathsrNrrOrTcclinkerr^rcmcmtZadd_include_dirrstripsepZadd_library_dirZpreprocess_optionscompile_optionscompile_options_debugZ ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARY_ldflagsrY)rZrXr4Zvc_envrQdirldflagsZ ldflags_debugrrr initializesX                     zMSVCCompiler.initializer]csTfddjDfddjjDp4dfdd}tt||S)Ncsi|] }j|qSr) obj_extension)r9ext)rZrr r;sz1MSVCCompiler.object_filenames..csi|] }j|qSr) res_extension)r9rt)rZrr r;sr]cstj|\}}r"tj|}n2tj|\}}|tjjtjjfrT|dd}ytj||St k rt d |YnXdS)NzDon't know how to compile {}) rrsplitextbasename splitdrive startswithrlaltsepr- LookupErrorrrD)rRbasertr5)ext_map output_dir strip_dirrr make_out_path#s z4MSVCCompiler.object_filenames..make_out_path)src_extensions_rc_extensions_mc_extensionslistmap)rZZsource_filenamesrrrr)r~rrZrr 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)rYrrZ_setup_compileappendextendrnrmKeyErrorrrrP _c_extensions_cpp_extensionsrspawnrhrrrdirnamerirwrxr-rDrf)rZZsourcesrZmacrosZ include_dirsr extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsobjsrcrtZ 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)rz/OUT:zExecuting "%s" %s zskipping %s (up-to-date)) rYrr_fix_object_argslibrary_filename _need_linkr rr^r-rrr) rZrZoutput_libnamerr 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))rYrrrZ _fix_lib_argswarnstrrrrr-rrorrwrxrrrrPZmkpathr rrgrrr)rZZ target_descrrrZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrrrZ build_temprZ fixed_argsZlib_optsrqZ export_optsZld_argsZdll_nameZdll_extZ implib_filerrrr linksL       zMSVCCompiler.linkc s4td}z|jtjd<t|S|tjd<XdS)Nr)rrBrer)superr)rZrHZold_path) __class__rr rs    zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r)rZrprrr library_dir_optionszMSVCCompiler.library_dir_optioncCs tddS)Nz:don't know how to set runtime library search path for MSVC)r)rZrprrr runtime_library_dir_optionsz'MSVCCompiler.runtime_library_dir_optioncCs ||S)N)r)rZr^rrr library_optionszMSVCCompiler.library_optioncCs`|r|d|g}n|g}xB|D]6}x0|D](}tj|||}tj|r(|Sq(WqWdSdS)NZ_d)rrr-rr3)rZdirsr^rZ try_namesrpnameZlibfilerrr find_library_files    zMSVCCompiler.find_library_file)rrr)N)rr])NNNrNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname__Z compiler_typeZ executablesrrrrrrursZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrWrrrrrrrrrrr __classcell__rr)rr rVsJ   P  [  8 rV)N)rZshutilstatr+rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr itertoolsr r!r2r7rMrTrcrVrrrr s"   "