B «@`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¬y`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 úD/tmp/pip-unpacked-wheel-ecq9wray/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 ||||¡|jdkrnyt 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 -sharedz3.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ÚresultZ entry_pointZ msvcr_successZmsvcr_dbg_successZ msvcr_versionr r r r9sp                zMingw32CCompiler.__init__NcCsptƒ}|r|sg}| |¡||||||||d| | | | | f}|jdkrRtjjj}ntj}||d|jj …ŽdS)Nz3.0.0) 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-¦s0   zMingw32CCompiler.linkrc CsÖ|dkr d}g}xÀ|D]¸}tj tj |¡¡\}}tj |¡\}}|rR|dd…}||jddgkrttd||fƒ‚|r„tj |¡}|dks”|dkr´| tj  ||||j ¡¡q| tj  |||j ¡¡qW|S)Nrrz.rcz.resz"unknown file type '%s' (from '%s')) ÚosÚpathÚsplitextÚnormcaseÚ splitdriveZsrc_extensionsrÚbasenamer,ÚjoinZ obj_extension) r'Zsource_filenamesZ strip_dirr0Z obj_namesÚsrc_nameÚbaseÚextÚdrvr r r Úobject_filenamesÐs(      z!Mingw32CCompiler.object_filenames)rrr)NrNNNN)rr)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú compiler_typerr-rCr r r r r2s r rc CsRtjg}ttdƒr,tjtjkr,| tj¡n"ttdƒrNtjtjkrN| tj¡dddg}g}x.|D]&}x |D]}| tj ||¡¡qlWqbWdtj kr°| tj tj dd¡¡t tj dd…ƒ\}}t   ¡}|d krèd |›|›d }n|d krþd |›d}nd}td|ƒx.|D]&}tj ||¡} tj | ¡r| SqWtd||fƒ‚dS)NÚ base_prefixÚ real_prefixrÚlibÚbinZ SYSTEMROOTZSystem32éÚCPythonÚpythonz.dllÚPyPyZlibpypyz-c.dllz!Unknown platform {implementation}zLooking for %sz%s not found in %s)ÚsysÚprefixÚhasattrrIr,rJr8r9r>Ú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        rfcCst dd|g¡}| d¡S)Nz objdump.exez-pó )rrÚsplit)reÚstr r r Ú dump_tablesrjc Cst|ƒ}x0tt|ƒƒD]}t || ¡¡rPqWtdƒ‚g}xVt|dt|ƒƒD]@}t || ¡¡}|r| t |  d¡  ¡ƒ|  d¡f¡qRPqRWt|ƒdkr°t   d|¡t|dƒZ}| dtj |¡¡| d¡| d ¡| d ¡x|D]}| d |d¡qöWWd QRXd 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 foundrrMrzNo symbols found in %sÚwzLIBRARY %s z,;CODE PRELOAD MOVEABLE DISCARDABLE z;DATA PRELOAD SINGLE z EXPORTS z%s N)rjÚrangeÚlenÚ_STARTÚmatchÚdecoder[Ú_TABLEr,Úintr"ÚstriprÚwarnÚopenÚwriter8r9r=) reÚdfileÚdumpÚiZsymsÚjÚmÚdÚsr r r Ú generate_def s($      r~cs4dddœtƒ‰‡fdd„}dd„}||ƒp2||ƒS)NÚamd64Zx86)rÚIntelcsdtj tj dd¡d¡}tj |¡s(dSx6t |¡D](\}}}||kr4ˆ|kr4tj ||¡Sq4WdS)NZWINDIRz C:\WINDOWSZwinsxs)r8r9r>rTÚgetrZÚwalk)Údll_nameZ winsxs_pathÚrootÚdirsÚfiles)Úarchr r Ú_find_dll_in_winsxsEs z%find_dll.._find_dll_in_winsxscSsLxFtjgtjd d¡D]*}tj ||¡}tj |¡rtj |¡SqWdS)NÚPATHú;) rQrRr8rTrhr9r>rZÚabspath)rƒr9Úfilepathr r r Ú_find_dll_in_pathPs z#find_dll.._find_dll_in_path)r )rƒrˆrr )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" existsTz.dllz*Cannot build msvcr library: "%s" not foundz lib%s.defz&Building msvcr library: "%s" (from %s)Údlltoolz-dz-l)r8Únamer rrrr9r>rQrRÚisfilerŽrtÚ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$ZsB         r$cCs@tjdkrdStƒ}|dkr"tƒS|dkr0tƒStd|ƒ‚dS)Nrrr€zUnhandled arch %s)r8r“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}xJ|D]B}|||f}x0|D](}x"|D]} | tj   || |¡¡q Wq–Wq€Wx |D]} tj   | ¡rÌd | fSqÌWd |d fS) zACheck if an import library for the Python runtime already exists.NrMzlibpython%d%d.azlibpython%d%d.dll.azlibpython%d.%d.dll.arIrJr‘rKTFr) rUrQrVrRrSrIr,rJr8r9r>r”) rarbÚpatternsr\r]Ú candidatesÚpatÚfilenameZstem_dirr`Ú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) Nz)Skip building import library: "%s" existsz4Building import library (arch=AMD64): "%s" (from %s)zpython%d%d.defrMr‘r’z-dz-l)r¥rrrfr•rUrQrVr8r9r>rRr~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| ¡WdQRXtƒ} dd| d|d|g} t | ¡}|rrt d¡dS)z; Build the import libraries for Mingw32-gcc on Windows z)Skip building import library: "%s" existsNzpython%d%d.librMr‘rIrJrz+Cannot build import library: "%s" not foundz(Building import library (ARCH=x86): "%s"r)Úlib2defzpython%d%d.defF)Úshellrkr’z --dllnamez--defz --output-libz:Failed to build import library for gcc. Linking will fail.)r¥rrrUrQrVr8r9r>rRr”rSrIrJrtr•Únumpy.distutilsr¨ZgetnmZ DEFAULT_NMZparse_nmruZ output_defZ DEF_HEADERrfrr)r§r˜Zlib_nameZlib_fileZbase_libr¨ršr›Z nm_outputZdlistÚflistZfidrƒrœÚstatusr r r rŸÙsD            rŸÚwin32z 8.0.50727.42Ú80z 9.0.21022.8Z90z10.0.30319.460Z100z 14.15.26726.0Z140ÚCRT_ASSEMBLY_VERSIONÚ.rMz9Cannot import msvcrt: using manifest will not be possiblecCsXytt|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_xml2sr»recCs4|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 rerMZexerzType %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 rrr[)Úmsverr³r r r Ú!check_embedded_msvcr_match_linkedjs  r¿cCs&tj | dgd¡¡}tj |¡dS)NZyoÚcr)r8r9r=Z_gen_temp_sourcefiler:)Úconfigr@r r r Úconfigtest_namevsrÂcCst|ƒ}|jj}||dS)Nz .manifest)rÂrZ exe_extension)rÁr„Zexextr r r Ú manifest_namezsrÃcCst|ƒ}|dS)Nz.rc)rÂ)rÁr„r r r Úrc_name€srÄcCsttƒ}|dk rp|dkrpt|ƒt|ƒ}t||dƒ}t||ƒ}tt|ƒdƒ}|j t|ƒ¡| |¡|  ¡dS)Nér±rk) Úget_build_msvc_versionr¿rrr»rurÃZ temp_filesr,rvÚclose)rÁr¾ÚmaÚmiZmanxmlZmanr r r Úgenerate_manifest…s  rÊ)F)re)=rGr8rWrQrr r¸Znumpy.distutils.ccompilerZnumpyrªrZdistutils.cygwinccompilerrZdistutils.versionrZdistutils.unixccompilerrZdistutils.msvccompilerrrÆÚdistutils.errorsrZnumpy.distutils.misc_utilrrr r r rZ get_msvcrÚcompilernrqrrrfrjr~rŽr$r#r¥ržrŸrµÚmsvcrtrSr¯rhÚmajorÚminorÚrestÚ ImportErrorrtr»r½r¿rÂrÃrÄrÊr r r r Ú sd       B)  ; $B