B { `bã@sâdZddlZddlZddlZddlZddlZddlZddlm Z ddl Z ddl m Z ddlmZddlmZddlmZddlmZmZmZmZd d „Zee j_e d ¡Ze d ¡ZGd 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+ej,d"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-4iou4664/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 r8sp                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 r1s r rc Cs2tjg}ttdƒr,tjtjkr,| tj¡n"ttdƒrNtjtjkrN| tj¡dddg}g}x.|D]&}x |D]}| tj ||¡¡qlWqbWdtj kr°| tj tj dd¡¡t tj dd…ƒ\}}d g}xP|D]H}|||f} t d | ƒx*|D]"}tj || ¡} tj  | ¡rô| SqôWqÒWtd | |fƒ‚dS) NÚ base_prefixÚ real_prefixrÚlibÚbinZ SYSTEMROOTZSystem32ézpython%d%d.dllzLooking for %sz%s not found in %s)ÚsysÚprefixÚhasattrrIr,rJr8r9r>ÚenvironÚtupleÚ version_infoÚprintÚexistsÚ ValueError) ÚstemsÚsub_dirsÚlib_dirsÚstemÚfolderÚ major_versionÚ minor_versionÚpatternsÚpatÚdllnameÚdllr r r Úfind_python_dllòs,           rbcCst dd|g¡}| d¡S)Nz objdump.exez-pó )rrÚsplit)raÚstr r r Ú dump_tablesrfc 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)rfÚrangeÚlenÚ_STARTÚmatchÚdecoderVÚ_TABLEr,Úintr"ÚstriprÚwarnÚopenÚwriter8r9r=) raÚdfileÚdumpÚiZsymsÚjÚmÚdÚsr r r Ú generate_defs($      rzcs4dddœtƒ‰‡fdd„}dd„}||ƒp2||ƒS)NÚamd64Zx86)rÚIntelcsdtj tj dd¡d¡}tj |¡s(dSx6t |¡D](\}}}||kr4ˆ|kr4tj ||¡Sq4WdS)NZWINDIRz C:\WINDOWSZwinsxs)r8r9r>rQÚgetrUÚwalk)Údll_nameZ winsxs_pathÚrootÚdirsÚfiles)Úarchr r Ú_find_dll_in_winsxsAs z%find_dll.._find_dll_in_winsxscSsLxFtjgtjd d¡D]*}tj ||¡}tj |¡rtj |¡SqWdS)NÚPATHú;) rNrOr8rQrdr9r>rUÚabspath)rr9Úfilepathr r r Ú_find_dll_in_pathLs z#find_dll.._find_dll_in_path)r )rr„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 presentrxzlib%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>rNrOÚisfilerŠrpÚinforzrÚcallÚremove) rZ msvcr_verZ msvcr_nameZout_nameÚout_fileZmsvcr_dll_nameÚdll_fileÚdef_nameÚdef_fileÚcmdÚretcoder r r r$VsB         r$cCs@tjdkrdStƒ}|dkr"tƒS|dkr0tƒStd|ƒ‚dS)Nr‹rr|zUnhandled arch %s)r8rr Ú_build_import_library_amd64Ú_build_import_library_x86rV)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.arIrJrrKTFr) rRrNrSrOrPrIr,rJr8r9r>r) r\r]r^rWrXÚ candidatesr_ÚfilenameZstem_dirr[Úfullnamer r r Ú_check_for_import_libs(     "   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.defrMrrŽz-dz-l)rŸrrrbr‘rRrNrSr8r9r>rOrzrÚ 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.librMrrIrJrz+Cannot build import library: "%s" not foundz(Building import library (ARCH=x86): "%s"r)Úlib2defzpython%d%d.defF)ÚshellrgrŽz --dllnamez--defz --output-libz:Failed to build import library for gcc. Linking will fail.)rŸrrrRrNrSr8r9r>rOrrPrIrJrpr‘Únumpy.distutilsr¢ZgetnmZ DEFAULT_NMZparse_nmrqZ output_defZ DEF_HEADERrbrr)r¡r”Zlib_nameZlib_fileZbase_libr¢r–r—Z nm_outputZdlistÚflistZfidrr˜Ú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ÚKeyErrorrVÚtextwrapÚdedent)r­r®r¬Útemplater r r Úmsvc_manifest_xml.srµracCs4|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 rarMZexerzType %s not supportedz&#include "winuser.h" %d RT_MANIFEST %s)rV)rÚtypeZrctyper r r Ú manifest_rcNs  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 rnrV)Úmsverr­r r r Ú!check_embedded_msvcr_match_linkedfs  r¹cCs&tj | dgd¡¡}tj |¡dS)NZyoÚcr)r8r9r=Z_gen_temp_sourcefiler:)Úconfigr@r r r Úconfigtest_namersr¼cCst|ƒ}|jj}||dS)Nz .manifest)r¼rZ exe_extension)r»r€Zexextr r r Ú manifest_namevsr½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«rg) Úget_build_msvc_versionr¹rnrµrqr½Z temp_filesr,rrÚclose)r»r¸ÚmaÚmiZmanxmlZmanr r r Úgenerate_manifests  rÄ)F)ra)=rGr8rNrr r²Znumpy.distutils.ccompilerZnumpyr¤rZdistutils.cygwinccompilerrZdistutils.versionrZdistutils.unixccompilerrZdistutils.msvccompilerrrÀÚdistutils.errorsrZnumpy.distutils.misc_utilrrr r r rZ get_msvcrÚcompilerjrmrrrbrfrzrŠr$r#rŸršr›r¯ÚplatformÚmsvcrtrPr©rdÚmajorÚminorÚrestÚ ImportErrorrprµr·r¹r¼r½r¾rÄr r r r Ú sb       B&  ; $B