HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/numpy/distutils/fcompiler/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/numpy/distutils/fcompiler/__pycache__/gnu.cpython-36.pyc
3

���h�O�@sTddlZddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlm
Z
ddlmZddlmZddgZejd�Zd	d
�Ze�r�gZngZGdd�de�ZGdd�de�Zd
d�Zedk�rPddlmZddlmZejd�e ed�j!��ye ed�j!��Wn,e"k
�rNZ#ze e#�WYddZ#[#XnXdS)�N)�Popen�PIPE�STDOUT)�filepath_from_subprocess_output)�	FCompiler)�LooseVersion�GnuFCompiler�Gnu95FCompilerzTarget: ([a-zA-Z0-9_\-]*)cCstjdkotj�ddkS)N�win32r�64bit)�sys�platform�architecture�rr�>/tmp/pip-build-5_djhm0z/numpy/numpy/distutils/fcompiler/gnu.py�is_win64src
@seZdZdZd1ZdZdd�Zdd�ZddgZd	d
gd	ddd
gd	d	d	ddgddgdgd	ddgd�Z	d	Z
d	Zej
dkr�ejdkr�dgZejdkr�xd2D]Ze	ejd�q�WdZdZdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd	S)3r�gnu�g77zGNU Fortran 77 compilercCs�x$|jd�r$||jd�dd�}qWt|�dkrvtjd|�}|r�|jd�rZd|jd�fS|j�d	kr�d
|jd�fSnftjd|�}|r�d
|jd�fStjd|�}|r�|jd�}|jd
�s�|jd�s�|jd�r�d|fSd
|fSd}t||��dS)z6Handle the different versions of GNU fortran compilerszgfortran: warning�
�N�z	([0-9.]+)zGNU 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�len�re�search�group�start�
ValueError)�self�version_string�m�v�errrrr�gnu_version_match&s*

zGnuFCompiler.gnu_version_matchcCs(|j|�}|s|ddkr dS|dS)Nrrr)r()r#r$r&rrr�
version_matchRs
zGnuFCompiler.version_matchZf77Nz-dumpversionz-gz-Wallz-fno-second-underscore�arz-cr�ranlib)�version_cmd�compiler_f77�compiler_f90�compiler_fix�	linker_so�archiverr+�
linker_exe�nt�cygwinz-fPICr
r,r-r0r2z-mno-cygwin�g2c�gnu95cCs�|jdd�}tjdkrxtjjdd�}|sfddl}|jd�}|s\d}d|��}tj	|dd�|tjd<|j
d	d
dg�n
|jd�tjjd
�r�|jd�|S)Nr�darwin�MACOSX_DEPLOYMENT_TARGETrz10.9z.Env. variable MACOSX_DEPLOYMENT_TARGET set to �)�
stacklevelz
-undefinedZdynamic_lookupz-bundlez-shared�sunosz
-mimpure-text)
r0rr
�os�environ�get�	sysconfig�get_config_var�warnings�warn�extend�appendr)r#�opt�targetr?�srrr�get_flags_linker_soss 





z GnuFCompiler.get_flags_linker_socCsJytj|jdg�}Wnttjfk
r0YnXt|�}tjj|�SdS)Nz-print-libgcc-file-name)	�
subprocess�check_outputr-�OSError�CalledProcessErrorrr<�path�dirname)r#�outputrrr�get_libgcc_dir�szGnuFCompiler.get_libgcc_dircCs�tjdd�dkrd}ntjdkr(d}nd}d}|r�dj|�g}ytj|j|�}Wnttjfk
rnYnXt|�}t	j
j|�}|S)N��linuxzlibgfortran.sor7zlibgfortran.dylibz-print-file-name={0})rr
�formatrIrJr-rKrLrr<rMrN)r#Zlibgfortran_nameZlibgfortran_dirZfind_lib_argrOrrr�get_libgfortran_dir�s 
z GnuFCompiler.get_libgfortran_dircCs�g}tjdd�dkr�|j�}|r�tjdkr�|jd�r�tjj|�}tjj|d|j�}tjj	|�s�tjj|ftj
fd��}tjjtjj|d��}tjj|d|j�}tjj	|�r�|j|�|j|�|j
�}|r�|j|�|S)NrQrRr
z/usr/libzlib%s.a��lib)rr
rPrr<rM�normpath�joinr5�exists�pardir�abspathrDrT)r#rE�drM�rootZd2�lib_gfortran_dirrrr�get_library_dirs�s$


zGnuFCompiler.get_library_dirscCs�g}|j�}|dk	rL|jd}|j||jf}tjjtjj||��sR|j}n|j}|dk	rd|j|�|j	}t
jdkr�|r�|jdkr�|jd�t
jdkr�|jd�|S)Nz-picr
�msvc�gccr7�
cc_dynamic)
rPr5Zstatic_lib_formatZstatic_lib_extensionr<rM�isfilerXrD�
c_compilerrr
�
compiler_type)r#rEr\r5�frdrrr�
get_libraries�s"





zGnuFCompiler.get_librariescCsdgS)Nz-gr)r#rrr�get_flags_debug�szGnuFCompiler.get_flags_debugcCs0|j�}|r|dkrdg}ndg}|jd�|S)Nz3.3.3z-O2z-O3z-funroll-loops)�get_versionrD)r#r&rErrr�
get_flags_opt�s
zGnuFCompiler.get_flags_optcCsdddlm}y|j�d}Wntk
r0gSXtjd�}g}x|j|�D]}|d|g7}qLW|S)z( Return detected arch flags from CFLAGS r)r?�CFLAGSz
-arch\s+(\w+)z-arch)�	distutilsr?�get_config_vars�KeyErrorr�compile�findall)r#r?�cflagsZarch_re�
arch_flags�archrrr�
_c_arch_flags�s
zGnuFCompiler._c_arch_flagscCsgS)Nr)r#rrr�get_flags_arch�szGnuFCompiler.get_flags_archcCsXtjdkrt�d|kst�tjdkr.d|��Stjdd�dkrJd|��Sd|��SdS)	Nr
�,r7z-Wl,-rpath,��aixz-Wl,-blibpath:z-Wl,-rpath=)rr
�NotImplementedError�AssertionError)r#�dirrrr�runtime_library_dir_option�s



z'GnuFCompiler.runtime_library_dir_option)r)r,r-r0r2)�__name__�
__module__�__qualname__re�compiler_aliases�descriptionr(r)�possible_executables�executables�module_dir_switch�module_include_switchr<�namerr
Z	pic_flags�keyrDr5Zsuggested_f90_compilerrHrPrTr_rgrhrjrtrur|rrrrr!sB,


#
c	@s*eZdZdZd4ZdZdd�ZddgZddgd	d
ddd
ged	d
dd
ged	d
ddd
gedd
dgddgdgd	d
gd�Z	dZ
dZej
d	d�dkr�e	djd�e
j�dd	d�dkr�xd5D]Ze	ejd�q�WdZd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd	S)6r	r6rzGNU Fortran 95 compilercCsb|j|�}|s|ddkr dS|d}t|�dkr6n(tjdkr^xd
D]}|j|jd�qFW|S)Nrrr�4r
r,r-r.r/r0r2z-mno-cygwin)r,r-r.r/r0r2)r(rrr
r�rD)r#r$r&r�rrrr)s

zGnu95FCompiler.version_matchZf95z<F90>z-dumpversionNz-Wallz-gz-ffixed-formz-fno-second-underscorer*z-crr+)r,r-r.r/r0r1r+r2z-Jz-Irwrxr0z	-lpthreadrr9Z64r-r.r/r2z-maix64cCsbtjdksgSg}|j�}d|kr0d||jd�<x,dD]$}t||�r6||kr6|jd|g�q6W|S)	z>Return a list of -arch flags for every supported architecture.r7�i386�i686�ppc�x86_64�ppc64z-arch)r�r�r�r�)rr
rt�index�_can_targetrC)r#�cmdrrZc_archsrsrrr�_universal_flagsBs

zGnu95FCompiler._universal_flagscCs*tj|�}|j|j�}|r&||dd�<|S)Nr)r�	get_flagsr�r.)r#�flagsrrrrrr�Rs

zGnu95FCompiler.get_flagscCs*tj|�}|j|j�}|r&||dd�<|S)Nr)rrHr�r0)r#r�rrrrrrHYs

z"Gnu95FCompiler.get_flags_linker_soc	Cs�tj|�}tjdkr�|j}|r�|jdkr�|j�}|r�tjj	|j
��}tjj|ftjfd��}tjj|d�}tjj	|�}tjj
tjj|d��r�|j|�|j�}|r�|j|�|S)Nr
r`rUrVzlibmingwex.a)rr_rr
rdre�
get_targetr<rMrWrPrXrZrYrDrT)	r#rErdrFr\r]rMZmingwdirr^rrrr_`s 



zGnu95FCompiler.get_library_dirscCs�tj|�}tjdkr|jd�tjdkr�|j}|rn|jdkrnd|krn|jd�}|j|dd�|j|dd�|j}|r�|jdkr�gS|S)	Nr7rbr
r`rarZmingwexZmingw32)	rrgrr
�removerdrer��insert)r#rErd�irrrrgss




zGnu95FCompiler.get_librariescCsVytj|jdg�}Wnttjfk
r0Yn"Xt|�}tj|�}|rR|jd�SdS)Nz-vr�)	rIrJr-rKrLr�TARGET_Rrr )r#rOr%rrrr��s

zGnu95FCompiler.get_targetc
Csntj�}xB|D]:}t|d��&}x|jd�}|s0P|j|�q WWdQRXqWtj|j��}|jd�}|j	d�S)N�rbi�ascii�=)
�hashlib�sha1�open�read�update�base64�	b32encode�digest�decode�rstrip)r#�	filenames�h�fnrf�block�textrrr�_hash_files�s


zGnu95FCompiler._hash_filescCs`|j}|jdkrtd��|jt|�t|��}t�r:d}nd}dtjjtjj	|d��ddd�}	|	d	|d
|}
|
d}|
d}|
d
}
tjj
||�}tjj
||�}tjj
||
�}tjj|�r�||fS|r�dgt|�dg}|j|||t|�dd|ddddgd�t��r d}nd}d|d||g}|j
�sF|j�|j|jg|�||fS)zeCreate a wrapper shared library for the given objects

        Return an MSVC-compatible lib
        r`zThis method only supports MSVCZ	win_amd64r
rVrN��.z
.gfortran-z.dllz.defz.libz-Wl,--whole-archivez-Wl,--no-whole-archivez-Wl,--allow-multiple-definitionz-Wl,--output-def,z-Wl,--export-all-symbolsz-Wl,--enable-auto-importz-staticz-mlong-double-64)�
output_dirZextra_postargsz/MACHINE:X64z/MACHINE:X86z/def:z/OUT:)rdrer"r��listrr<rM�splitext�basenamerXrcZlink_shared_objectZinitializedZ
initialize�spawnrV)r#�objectsr��
extra_dll_dir�chained_dlls�
is_archiverdZobject_hash�tagr�Z	root_nameZdll_nameZdef_nameZlib_nameZdll_pathZdef_pathZlib_path�	specifierZlib_argsrrr�_link_wrapper_lib�sP
 z Gnu95FCompiler._link_wrapper_libcCs
|jdkS)Nr`)r`)re)r#�compilerrrr�can_ccompiler_link�sz!Gnu95FCompiler.can_ccompiler_linkcCs�|jjdkr�g}g}x0|D](}|j�jd�r8|j|�q|j|�qWg}g}xH|ddd
�D]6}	|j|	g|||dd�\}
}|jd|
�|jd|�q^W|s�|S|j||||dd�\}
}|
g|Std	��dS)z�
        Convert a set of object files that are not compatible with the default
        linker, to a file that is compatible.
        r`z.aNrT)r�r�rFzUnsupported C compiler���)rdre�lower�endswithrDr�r�r")r#r�r�r�ZarchivesZ
plain_objects�objZchained_libsr��archiverV�dllrrr�wrap_unlinkable_objects�s8

z&Gnu95FCompiler.wrap_unlinkable_objects)r)r-r.r/r0r2)r}r~rrer�r�r)r��_EXTRAFLAGSr�r�r�rr
rDrr�r5r�r�rHr_rgr�r�r�r�r�rrrrr	sD

>cCs�|dd�}tjdd�\}}tj|�zrtjj|�}tjj|�dd}z4|jd|d|g�t|t	t
|d�}|j�|jdkStjj
|�r�tj|�XWdtj|�Xd	S)
z7Return true if the architecture supports the -arch flagNz.f)�suffixrz.oz-archz-c)�stderr�stdout�cwdF)�tempfile�mkstempr<�closerMrNr�rCrrr�communicate�
returncoderYr�)r�rsZnewcmdZfid�filenamer\rO�prrrr�s

r��__main__)�log)�customized_fcompilerr9rZg95)$rr<rrAr
r�r�r�rIrrrZnumpy.distutils.exec_commandrZnumpy.distutils.fcompilerrZdistutils.versionrZ	compilersror�rr�rr	r�r}rlr�Znumpy.distutilsr��
set_verbosity�printri�	Exception�errrr�<module>sB
p