a ;jgPã @sFddlZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z ddl m Z ddlmZddlmZddgZe d¡Zd d „ZGd d„deƒZGd d„deƒZd d„ZedkrBddlmZddlmZe d¡eedƒ  ¡ƒzeedƒ  ¡ƒWn.e!y@Z"zee"ƒWYdZ"["n dZ"["00dS)éN)ÚPopenÚPIPEÚSTDOUT)Úfilepath_from_subprocess_output)Ú FCompiler)Ú LooseVersionÚ GnuFCompilerÚGnu95FCompilerzTarget: ([a-zA-Z0-9_\-]*)cCstjdkot ¡ddkS)NÚwin32rÚ64bit)ÚsysÚplatformÚ architecture©rrúG/usr/local/lib/python3.9/site-packages/numpy/distutils/fcompiler/gnu.pyÚis_win64src @søeZdZdZdZdZdd„Zdd„Zdd gZd d ggd ¢d d gd ¢ddgdggd ¢dœZ d Z d Z e j dkrzejdkrzdgZejdkrœdD]Ze e d¡qˆdZdZdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd S).rÚgnu)Úg77zGNU Fortran 77 compilercCsð| d¡r&|| d¡dd… ¡}qt|ƒdkrvt d|¡}|rÜ| d¡rZd| d¡fS| ¡d krÜd | d¡fSnft d |¡}|r”d | d¡fSt d |¡}|rÜ| d¡}| d ¡sÌ| d¡sÌ| d¡rÔd|fSd |fSd}t||ƒ‚dS)z6Handle the different versions of GNU fortran compilerszgfortran: warningÚ éNéz ([0-9.]+)z GNU FortranrrÚgfortranzGNU Fortran\s+95.*?([0-9-.]+)z%GNU Fortran.*?\-?([0-9-.]+\.[0-9-.]+)Ú0Ú2Ú3z6A valid Fortran version was not found in this string: ) Ú startswithÚfindÚstripÚlenÚreÚsearchÚgroupÚstartÚ ValueError)ÚselfÚversion_stringÚmÚvÚerrrrrÚgnu_version_matchs. ÿ     ÿ zGnuFCompiler.gnu_version_matchcCs&| |¡}|r|ddkrdS|dS)Nrrr)r))r$r%r'rrrÚ version_matchLs zGnuFCompiler.version_matchrZf77Nú -dumpversion)Nú-gú-Wallú-fno-second-underscore)Nr,r-Úarú-crÚranlib©Ú version_cmdÚ compiler_f77Ú compiler_f90Ú compiler_fixÚ linker_soÚarchiverr1Ú linker_exeÚntÚcygwinz-fPICr )r3r4r7r9ú -mno-cygwinÚg2cÚgnu95cCsž|jdd…}tjdkrztj dd¡}|sjddl}| d¡}|s\d}d|›}tj |ddt |ƒtjd<|  gd ¢¡n |  d ¡tj  d ¡rš|  d ¡|S) NrÚdarwinÚMACOSX_DEPLOYMENT_TARGETrz10.9z.Env. variable MACOSX_DEPLOYMENT_TARGET set to é)Ú stacklevel)z -undefinedZdynamic_lookupz-bundlez-sharedÚsunosz -mimpure-text)r7r r ÚosÚenvironÚgetÚ sysconfigÚget_config_varÚwarningsÚwarnÚstrÚextendÚappendr)r$ÚoptÚtargetrGÚsrrrÚget_flags_linker_soms       z GnuFCompiler.get_flags_linker_soc CsHzt |jdg¡}Wnttjfy.Yn0t|ƒ}tj |¡SdS)Nz-print-libgcc-file-name) Ú subprocessÚ check_outputr4ÚOSErrorÚCalledProcessErrorrrDÚpathÚdirname)r$ÚoutputrrrÚget_libgcc_dirsÿ  zGnuFCompiler.get_libgcc_dirc Cs†tjdd…dkrd}ntjdkr(d}nd}d}|r‚d |¡g}zt |j|¡}WnttjfylYn0t|ƒ}t j   |¡}|S)NéÚlinuxzlibgfortran.sor?zlibgfortran.dylibz-print-file-name={0}) r r ÚformatrRrSr4rTrUrrDrVrW)r$Zlibgfortran_nameZlibgfortran_dirZ find_lib_argrXrrrÚget_libgfortran_dir›s"  ÿ z GnuFCompiler.get_libgfortran_dircCsâg}tjdd…dkrÈ| ¡}|rÈtjdkr¾| d¡s¾tj |¡}tj |d|j¡}tj  |¡s¾tjj|gtj fd¢RŽ}tj  tj |d¡¡}tj |d|j¡}tj  |¡r¾|  |¡|  |¡|  ¡}|rÞ|  |¡|S)NrZr[r z/usr/libzlib%s.aéÚlib)r r rYrrDrVÚnormpathÚjoinr=ÚexistsÚpardirÚabspathrMr])r$rNÚdrVÚrootZd2Úlib_gfortran_dirrrrÚget_library_dirs°s$      zGnuFCompiler.get_library_dirscCs¤g}| ¡}|durL|jd}|j||jf}tj tj ||¡¡sR|j}n|j}|durd| |¡|j }t j dkrŒ|rŒ|j dkrŒ| d¡t j dkr | d¡|S)Nz-picr ÚmsvcÚgccr?Ú cc_dynamic) rYr=Zstatic_lib_formatZstatic_lib_extensionrDrVÚisfilerarMÚ c_compilerr r Ú compiler_type)r$rNrer=ÚfrmrrrÚ get_librariesÆs$  ÿ   zGnuFCompiler.get_librariescCsdgS)Nr,r©r$rrrÚget_flags_debugÛszGnuFCompiler.get_flags_debugcCs0| ¡}|r|dkrdg}ndg}| d¡|S)Nz3.3.3z-O2z-O3z-funroll-loops)Ú get_versionrM)r$r'rNrrrÚ get_flags_optÞs   zGnuFCompiler.get_flags_optcCs^ddl}z| ¡d}Wnty.gYS0t d¡}g}| |¡D]}|d|g7}qH|S)z( Return detected arch flags from CFLAGS rNÚCFLAGSz -arch\s+(\w+)ú-arch)rGÚget_config_varsÚKeyErrorrÚcompileÚfindall)r$rGÚcflagsZarch_reÚ arch_flagsÚarchrrrÚ _c_arch_flagsés   zGnuFCompiler._c_arch_flagscCsgS)NrrqrrrÚget_flags_archöszGnuFCompiler.get_flags_archcCs\tjdkstjdkrt‚d|vs$J‚tjdkr8d|›Stj d¡rNd|›Sd|›SdS) Nr r;ú,r?z -Wl,-rpath,©ÚaixZos400z-Wl,-blibpath:z -Wl,-rpath=)r r ÚNotImplementedErrorr)r$ÚdirrrrÚruntime_library_dir_optionùs     z'GnuFCompiler.runtime_library_dir_option)Ú__name__Ú __module__Ú __qualname__rnÚcompiler_aliasesÚ descriptionr)r*Úpossible_executablesÚ executablesÚmodule_dir_switchÚmodule_include_switchrDÚnamer r Z pic_flagsÚkeyrMr=Zsuggested_f90_compilerrQrYr]rhrprrrtr~rr…rrrrrsD-ø  #   c @seZdZdZdZdZdd„ZddgZdd ggd ¢gd ¢gd ¢gd ¢d dgdgddgdœZdZ dZ e j   d¡rªed d¡e  ¡ddd…dkrªdD]Zee d¡q–dZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„ZdS)1r r>)rzGNU Fortran 95 compilercCs\| |¡}|r|ddkrdS|d}t|ƒdkr4n$tjdkrXdD]}|j| d¡qB|S)NrrrÚ4r )r3r4r5r6r7r9r<)r)rr r rŒrM)r$r%r'rrrrr*s   zGnu95FCompiler.version_matchrZf95úr+)Nr-r,z -ffixed-formr.)Nr-r,r.)r’r-r,r/r0r1Nr-r2z-Jz-Irr7z -lpthreadrrAZ64)r4r5r6r7r9z-maix64cCs^tjdksgSg}| ¡}d|vr0d|| d¡<dD]$}t||ƒr4||vr4| d|g¡q4|S)z>Return a list of -arch flags for every supported architecture.r?Úi386Úi686)Úppcr”Úx86_64Úppc64Ús390xrv)r r r~ÚindexÚ _can_targetrL)r$Úcmdr|Zc_archsr}rrrÚ_universal_flags<s zGnu95FCompiler._universal_flagscCs*t |¡}| |j¡}|r&||dd…<|S©Nr)rÚ get_flagsrœr5©r$Úflagsr|rrrržLs    zGnu95FCompiler.get_flagscCs*t |¡}| |j¡}|r&||dd…<|Sr)rrQrœr7rŸrrrrQSs    z"Gnu95FCompiler.get_flags_linker_soc Cs´t |¡}tjdkrš|j}|rš|jdkrš| ¡}|rštj  |  ¡¡}tjj |gtj fd¢RŽ}tj  |d¡}tj  |¡}tj  tj  |d¡¡rš| |¡| ¡}|r°| |¡|S)Nr rir^r_z libmingwex.a)rrhr r rmrnÚ get_targetrDrVr`rYrarcrbrMr]) r$rNrmrOrerfrVZmingwdirrgrrrrhZs      zGnu95FCompiler.get_library_dirscCsŠt |¡}tjdkr| d¡tjdkr†|j}|rn|jdkrnd|vrn| d¡}| |dd¡| |dd¡|j}|r†|jdkr†gS|S) Nr?rkr rirjrZmingwexZmingw32) rrpr r Úremovermrnr™Úinsert)r$rNrmÚirrrrpms     zGnu95FCompiler.get_librariesc Cszzc CsÚ|dd…}tjdd\}}t |¡z¢tj |¡}tj |¡dd}zZ| d|d|g¡t|t t |d}|  ¡|j dkWtj  |¡r”t |¡Wt |¡Sntj  |¡rºt |¡0Wt |¡n t |¡0dS) z7Return true if the architecture supports the -arch flagNz.f)Úsuffixrz.orvz-c)r¦r¬Úcwd)ÚtempfileÚmkstemprDÚcloserVrWrÄrLrrrr©Ú returncoderbr¢)r›r}ZnewcmdZfidÚfilenamererXr«rrrršs*      ý ûÿ ršÚ__main__)Úlog)Úcustomized_fcompilerrArZg95)#rrDr rIr rØr°rµrRrrrZnumpy.distutils.exec_commandrZnumpy.distutils.fcompilerrZdistutils.versionrZ compilersryrªrrr ršr†Ú distutilsrÞZnumpy.distutilsrßÚ set_verbosityÚprintrsÚ ExceptionÚerrrrÚs<    q