U ­Dx`Hcã@sêdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl Z ddl mZddlmZddlmZddlmZddlmZmZmZmZd d „Zee j_e d ¡Ze d ¡Z Gd d„de jj!ƒZ"dd„Z#dd„Z$dd„Z%dd„Z&d>dd„Z'dd„Z(dd„Z)dd„Z*d d!„Z+iZ,ejd"kr¬z`ddl-Z-d#e,d$<d%e,d&<d'e,d(<d)e,d*<e.e-d+ƒrˆe-j/ 0d,d-¡\Z1Z2Z3e-j/e,e1e2<[1[2[3Wn e4k rªe  5d.¡YnXd/d0„Z6d?d2d3„Z7d4d5„Z8d6d7„Z9d8d9„Z:d:d;„Z;d.a exists for gcc. If not, build it. # 2. Force windows to use gcc (we're struggling with MSVC and g77 support) # 3. Force windows to use g77 éN)Úlog)Ú StrictVersion)Ú UnixCCompiler)Úget_build_version)ÚUnknownFileError)Úmsvc_runtime_libraryÚmsvc_runtime_versionÚmsvc_runtime_majorÚget_build_architecturecCstƒ}|dkrgS|gS)zBReplacement for outdated version of get_msvcr from cygwinccompilerN)r)Zmsvcr©r úG/tmp/pip-target-zr53vnty/lib/python/numpy/distutils/mingw32ccompiler.pyÚget_msvcr_replacement$sr z\[Ordinal/Name Pointer\] Tablez$^\s+\[([\s*[0-9]*)\] ([a-zA-Z0-9_]*)c@s2eZdZdZdZd dd„Zd dd„Zdd d „ZdS)ÚMingw32CCompilerzH A modified MingW32 compiler compatible with an MSVC built Python. Zmingw32rc CsŽtjj ||||¡|jdkrnzt ddg¡}Wnttfk rLd}YnXt   d|¡}|rnt |  d¡ƒ|_|jdkr~d}nd}|j dkr”d|_n|j dkr¤d |_tƒtƒ}td d }|sÂ|rÌ| d ¡tƒ} | ræ| d d| ¡tƒdkr&|jdkr|jdddddn|jdddddn\|jdkrP|jdddd|j|fdn2|jdkrp|jdd dd!dn|jd"d#d$d%dd g|_dS)&NZgccz -dumpversionÚz (\d+\.\d+)éz2.91.57z--entry _DllMain@12Zdllwrapzg++T)ÚdebugZNPY_MINGW_USE_CUSTOM_MSVCRZ__MSVCRT_VERSION__z0x%04iÚAMD64z4.0z/gcc -g -DDEBUG -DMS_WIN64 -mno-cygwin -O0 -WallzCgcc -g -DDEBUG -DMS_WIN64 -mno-cygwin -O0 -Wall -Wstrict-prototypeszgcc -g -mno-cygwinzgcc -g -mno-cygwin -shared)ÚcompilerÚ compiler_soÚ linker_exeÚ linker_soz#gcc -g -DDEBUG -DMS_WIN64 -O0 -Wallz7gcc -g -DDEBUG -DMS_WIN64 -O0 -Wall -Wstrict-prototypeszgcc -gzgcc -g -sharedú3.0.0zgcc -mno-cygwin -O2 -wz0gcc -mno-cygwin -mdll -O2 -w -Wstrict-prototypeszg++ -mno-cygwinz%s -mno-cygwin -mdll -static %szgcc -mno-cygwin -O2 -Wallz-gcc -mno-cygwin -O2 -Wall -Wstrict-prototypeszg++ -mno-cygwin -sharedz gcc -O2 -Wallz!gcc -O2 -Wall -Wstrict-prototypeszg++ z g++ -shared)Ú distutilsÚcygwinccompilerÚCygwinCCompilerÚ__init__Ú gcc_versionÚ subprocessÚ check_outputÚOSErrorÚCalledProcessErrorÚreÚsearchrÚgroupZ linker_dllZlinkerÚbuild_import_libraryÚbuild_msvcr_libraryZ define_macrorr Úset_executablesÚ compiler_cxx) ÚselfÚverboseÚdry_runÚforceZ out_stringÚresultÚ entry_pointZ msvcr_successZmsvcr_dbg_successZ msvcr_versionr r r r9s€ ÿ          ûü ÿû ûýzMingw32CCompiler.__init__NcCsptƒ}|r|sg}| |¡||||||||d| | | | | f}|jdkrRtjjj}ntj}||d|jj …ŽdS)Nr) rÚappendrrrrÚlinkrÚ__code__Ú co_argcount)r(Z target_descZobjectsZoutput_filenameÚ output_dirÚ librariesÚ library_dirsÚruntime_library_dirsÚexport_symbolsrZ extra_preargsZextra_postargsÚ build_tempZ target_langZruntime_libraryÚargsÚfuncr r r r/¦s2 ó  zMingw32CCompiler.linkrc CsÒ|dkr d}g}|D]¸}tj tj |¡¡\}}tj |¡\}}|rP|dd…}||jddgkrrtd||fƒ‚|r‚tj |¡}|dks’|dkr²| tj  ||||j ¡¡q| tj  |||j ¡¡q|S)Nrrú.rcz.resz"unknown file type '%s' (from '%s')) ÚosÚpathÚsplitextÚnormcaseÚ splitdriveZsrc_extensionsrÚbasenamer.ÚjoinZ obj_extension) r(Zsource_filenamesZ strip_dirr2Z obj_namesÚsrc_nameÚbaseÚextÚdrvr r r Úobject_filenamesÐs0 ÿÿ   ÿ ÿz!Mingw32CCompiler.object_filenames)rrr)NrNNNN)rr)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú compiler_typerr/rFr r r r r2s ý uó ,ýrc CsJtjg}ttdƒr,tjtjkr,| tj¡n"ttdƒrNtjtjkrN| tj¡dddg}g}|D]"}|D]}| tj ||¡¡qhq`dtj kr¨| tj tj dd¡¡t tj dd…ƒ\}}t   ¡}|d kràd |›|›d }n|d kröd |›d}nd}td|ƒ|D]*}tj ||¡} tj | ¡r | Sq td||fƒ‚dS)NÚ base_prefixÚ real_prefixrÚlibÚbinZ SYSTEMROOTZSystem32éÚCPythonÚpythonú.dllÚPyPyZlibpypyz-c.dllz!Unknown platform {implementation}zLooking for %sz%s not found in %s)ÚsysÚprefixÚhasattrrLr.rMr;r<rAÚenvironÚtupleÚ version_infoÚplatformÚpython_implementationÚprintÚexistsÚ ValueError) ÚstemsÚsub_dirsÚlib_dirsÚstemÚfolderÚ major_versionÚ minor_versionÚimplementationÚdllnameÚdllr r r Úfind_python_dllós2     rjcCst dd|g¡}| d¡S)Nz objdump.exez-pó )rrÚsplit)riÚstr r r Ú dump_tablesrnc Cst|ƒ}tt|ƒƒD]}t || ¡¡rq8qtdƒ‚g}t|dt|ƒƒD]B}t || ¡¡}|rŒ| t |  d¡  ¡ƒ|  d¡f¡qNq’qNt|ƒdkr¬t   d|¡t|dƒV}| dtj |¡¡| d¡| d ¡| d ¡|D]}| d |d¡qðW5QRXd S) zŠGiven a dll file location, get all its exported symbols and dump them into the given def file. The .def file will be overwrittenzSymbol table not foundrrPrzNo symbols found in %sÚwzLIBRARY %s z,;CODE PRELOAD MOVEABLE DISCARDABLE z;DATA PRELOAD SINGLE z EXPORTS z%s N)rnÚrangeÚlenÚ_STARTÚmatchÚdecoder_Ú_TABLEr.Úintr#ÚstriprÚwarnÚopenÚwriter;r<r@) riÚdfileÚdumpÚiZsymsÚjÚmÚdÚsr r r Ú generate_def s($     r‚cs4dddœtƒ‰‡fdd„}dd„}||ƒp2||ƒS)NÚamd64Úx86)rÚIntelcsdtj tj dd¡d¡}tj |¡s(dSt |¡D],\}}}||kr2ˆ|kr2tj ||¡Sq2dS)NZWINDIRz C:\WINDOWSZwinsxs)r;r<rArXÚgetr^Úwalk)Údll_nameZ winsxs_pathÚrootÚdirsÚfiles©Úarchr r Ú_find_dll_in_winsxsEsÿ z%find_dll.._find_dll_in_winsxscSsLtjgtjd d¡D].}tj ||¡}tj |¡rtj |¡SqdS)NÚPATHú;) rUrVr;rXrlr<rAr^Úabspath)rˆr<Úfilepathr r r Ú_find_dll_in_pathPs z#find_dll.._find_dll_in_path)r )rˆrŽr“r rŒr Úfind_dll@sÿÿ r”Fc CstjdkrdStƒ}|dkr*t d¡dS|dkr@t d¡dStƒ}|rR|d7}d|}tj tj d|¡}tj  |¡rŒt d |f¡d S|d }t |ƒ}|s²t  d |¡dSd |}tj tj d|¡}t  d||f¡t||ƒdd|d|g} t | ¡} t |¡| S)NÚntFz?Skip building import library: Runtime is not compiled with MSVCéPz=Skip building msvcr library: custom functionality not presentr€zlib%s.aÚlibsz(Skip building msvcr library: "%s" existsTrSz*Cannot build msvcr library: "%s" not foundz lib%s.defz&Building msvcr library: "%s" (from %s)Údlltoolú-dú-l)r;Únamer rrrr<rArUrVÚisfiler”rxÚinfor‚rÚcallÚremove) rZ msvcr_verZ msvcr_nameZout_nameÚout_fileZmsvcr_dll_nameÚdll_fileÚdef_nameÚdef_fileÚcmdÚretcoder r r r%ZsH    ÿÿÿ   r%cCs@tjdkrdStƒ}|dkr"tƒS|dkr0tƒStd|ƒ‚dS)Nr•rr…zUnhandled arch %s)r;r›r Ú_build_import_library_amd64Ú_build_import_library_x86r_rŒr r r r$•s r$c Csèttjdd…ƒ\}}dddg}tjg}ttdƒrLtjtjkrL| tj¡n"ttdƒrntjtjkrn| tj¡dd g}g}|D]:}|||f}|D]$}|D]} | tj   || |¡¡qšq’q~|D]} tj   | ¡r¾d | fSq¾d |d fS) zACheck if an import library for the Python runtime already exists.NrPzlibpython%d%d.azlibpython%d%d.dll.azlibpython%d.%d.dll.arLrMr—rNTFr) rYrUrZrVrWrLr.rMr;r<rArœ) rerfÚpatternsr`raÚ candidatesÚpatÚfilenameZstem_dirrdÚfullnamer r r Ú_check_for_import_lib¡s*þ   r­cCs„tƒ\}}|rt d|¡dStƒ}t d||f¡dttjdd…ƒ}tj   tj d|¡}t ||ƒdd|d|g}t  |¡dS) Nú)Skip building import library: "%s" existsz4Building import library (arch=AMD64): "%s" (from %s)úpython%d%d.defrPr—r˜r™rš)r­rrrjrrYrUrZr;r<rArVr‚rÚ check_call)Ú out_existsr r¡r¢r£r¤r r r r¦Ås  ÿ r¦c Csvtƒ\}}|rt d|¡dSdttjdd…ƒ}tj tj d|¡}tj  |¡s´t tdƒrptj tj d|¡}n"t tdƒrŽtj tj d|¡}nd}tj  |¡r¤|}nt d |¡dSt d |¡d d lm}d ttjdd…ƒ}tj tj d|¡}|j|j|gdd}| |¡\} } t|dƒ} | | | |j| ¡W5QRXtƒ} dd| d|d|g} t | ¡}|rrt d¡dS)z; Build the import libraries for Mingw32-gcc on Windows r®Nzpython%d%d.librPr—rLrMrz+Cannot build import library: "%s" not foundz(Building import library (ARCH=x86): "%s"r)Úlib2defr¯F)Úshellror˜z --dllnamez--defz --output-libz:Failed to build import library for gcc. Linking will fail.)r­rrrYrUrZr;r<rArVrœrWrLrMrxrÚnumpy.distutilsr²ZgetnmZ DEFAULT_NMZparse_nmryZ output_defZ DEF_HEADERrjrr)r±r Zlib_nameZlib_fileZbase_libr²r¢r£Z nm_outputZdlistÚflistZfidrˆr¤Ústatusr r r r§ÙsP          ÿ ý  r§Úwin32z 8.0.50727.42Ú80z 9.0.21022.8Z90z10.0.30319.460Z100z 14.15.26726.0Z140ÚCRT_ASSEMBLY_VERSIONÚ.rPz9Cannot import msvcrt: using manifest will not be possiblecCsXztt|d|ƒ}Wn$tk r<td||fƒ‚YnXt d¡}||||dœS)zUGiven a major and minor version of the MSVCR, returns the corresponding XML file.é z)Version %d,%d of MSVCRT not supported yetaà )ÚfullverÚmajÚmin)Ú_MSVCRVER_TO_FULLVERÚstrÚKeyErrorr_ÚtextwrapÚdedent)r½r¾r¼Útemplater r r Úmsvc_manifest_xml2sÿ  rÅricCs4|dkrd}n|dkrd}n td|ƒ‚d||fS)aWReturn the rc file used to generate the res file which will be embedded as manifest for given manifest file name, of given type ('dll' or 'exe'). Parameters ---------- name : str name of the manifest file to embed type : str {'dll', 'exe'} type of the binary which will embed the manifest rirPZexerzType %s not supportedz&#include "winuser.h" %d RT_MANIFEST %s)r_)r›ÚtypeZrctyper r r Ú manifest_rcRs  þrÇcCs.tƒ}|r*|t|ƒks*tdt|ƒ|fƒ‚dS)z6msver is the ms runtime version used for the MANIFEST.zKDiscrepancy between linked msvcr (%d) and the one about to be embedded (%d)N)r rvr_)Úmsverr½r r r Ú!check_embedded_msvcr_match_linkedjs  þÿrÉcCs&tj | dgd¡¡}tj |¡dS)NZyoÚcr)r;r<r@Z_gen_temp_sourcefiler=)ÚconfigrCr r r Úconfigtest_namevsrÌcCst|ƒ}|jj}||dS)Nz .manifest)rÌrZ exe_extension)rËr‰Zexextr r r Ú manifest_namezsrÍcCst|ƒ}|dS)Nr:)rÌ)rËr‰r r r Úrc_name€srÎcCsttƒ}|dk rp|dkrpt|ƒt|ƒ}t||dƒ}t||ƒ}tt|ƒdƒ}|j t|ƒ¡| |¡|  ¡dS)Nér»ro) Úget_build_msvc_versionrÉrvrÅryrÍZ temp_filesr.rzÚclose)rËrÈÚmaÚmiZmanxmlZmanr r r Úgenerate_manifest…s  rÔ)F)ri)=rJr;r[rUrr!rÂZnumpy.distutils.ccompilerÚnumpyr´rZdistutils.cygwinccompilerrZdistutils.versionrZdistutils.unixccompilerrZdistutils.msvccompilerrrÐÚdistutils.errorsrZnumpy.distutils.misc_utilrrr r r rZ get_msvcrÚcompilerrrurrrjrnr‚r”r%r$r­r¦r§r¿ÚmsvcrtrWr¹rlÚmajorÚminorÚrestÚ ImportErrorrxrÅrÇrÉrÌrÍrÎrÔr r r r Úsd        B)  ; $B