ó
ØÆ÷Xc           @` sÒ  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d d	 g Z e j d
 ƒ Z d „  Z e ƒ  rö g  Z n g  Z d e f d „  ƒ  YZ d	 e f d „  ƒ  YZ d „  Z e d k rÎd  d l m  Z  e  j! d ƒ e ƒ  Z" e" j# ƒ  e$ e" j% ƒ  ƒ y' e ƒ  Z" e" j# ƒ  e$ e" j% ƒ  ƒ WqÎe& k
 rÊe ƒ  Z' e$ e' ƒ qÎXn  d S(   i    (   t   divisiont   absolute_importt   print_functionN(   t   Popent   PIPEt   STDOUT(   t	   FCompiler(   t   exec_command(   t   msvc_runtime_library(   t   get_exceptiont   GnuFCompilert   Gnu95FCompilers   Target: ([a-zA-Z0-9_\-]*)c           C` s#   t  j d k o" t j ƒ  d d k S(   Nt   win32i    t   64bit(   t   syst   platformt   architecture(    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   is_win64   s    c           B` sv  e  Z d  Z d$ Z d Z d „  Z d „  Z d d g Z i d% d g d 6d% d d	 d
 g d 6d% d 6d% d 6d% d d	 g d 6d d g d 6d g d 6d% d d	 g d 6Z	 d% Z
 d% Z e j d k r× e j d k r× d g Z n  e j d k rx. d d d d g D] Z e	 e j d ƒ qù Wn  d Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d  „  Z d! „  Z d" „  Z d# „  Z RS(&   t   gnut   g77s   GNU Fortran 77 compilerc         C` sT  x* | j  d ƒ r, | | j d ƒ d } q Wt | ƒ d k r¤ t j d | ƒ } | r:| j  d ƒ ry d | j d ƒ f S| j ƒ  d k r¡ d	 | j d ƒ f Sq:n– t j d
 | ƒ } | rÏ d	 | j d ƒ f St j d | ƒ } | r:| j d ƒ } | j  d ƒ s#| j  d ƒ s#| j  d ƒ r-d | f Sd	 | f Sn  d } t | | ƒ ‚ d S(   s6   Handle the different versions of GNU fortran compilerss   gfortran: warnings   
i   i   s	   ([0-9.]+)s   GNU FortranR   i    t   gfortrans   GNU Fortran\s+95.*?([0-9-.]+)s   GNU Fortran.*?\-?([0-9-.]+)t   0t   2t   3s6   A valid Fortran version was not found in this string:
N(   t
   startswitht   findt   lent   ret   searcht   groupt   startt
   ValueError(   t   selft   version_stringt   mt   vt   err(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   gnu_version_match#   s(    -
c         C` s2   |  j  | ƒ } | s& | d d k r* d  S| d S(   Ni    R   i   (   R%   t   None(   R    R!   R#   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   version_matchN   s    t   f77s   -dumpversiont   version_cmds   -gs   -Walls   -fno-second-underscoret   compiler_f77t   compiler_f90t   compiler_fixt	   linker_sot   ars   -crt   archivert   ranlibt
   linker_exet   ntt   cygwins   -fPICR   s   -mno-cygwint   g2ct   gnu95c         C` s  |  j  d } t j d k ré t j j d d  ƒ } | sÐ d d  l j } i  } y | j	 } Wn t
 k
 rl n X| ƒ  } | j | | ƒ | j d d ƒ } | t j d <| d k rÐ d } t j | d d ƒqÐ n  | j d	 d
 d g ƒ n | j d ƒ t j j d ƒ r| j d ƒ n  | S(   Ni   t   darwint   MACOSX_DEPLOYMENT_TARGETi    s   10.3s2   Env. variable MACOSX_DEPLOYMENT_TARGET set to 10.3t
   stackleveli   s
   -undefinedt   dynamic_lookups   -bundles   -sharedt   sunoss   -mimpure-text(   R-   R   R   t   ost   environt   getR&   t   distutils.sysconfigt	   sysconfigt   get_makefile_filenamet   AttributeErrort   parse_makefilet   warningst   warnt   extendt   appendR   (   R    t   optt   targett   sct   gR@   t   filenamet   s(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_flags_linker_soo   s,    	c         C` s<   t  |  j d g d d ƒ\ } } | s8 t j j | ƒ Sd  S(   Ns   -print-libgcc-file-namet   use_teei    (   R   R*   R;   t   patht   dirnameR&   (   R    t   statust   output(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_libgcc_dir›   s    	
c         C` s%  g  } t  j d  d k r!|  j ƒ  } | r!t  j d k r| j d ƒ rt j j | ƒ } t j j | d |  j ƒ } t j j	 | ƒ st j j | t j
 f d Œ } t j j t j j | d ƒ ƒ } t j j | d |  j ƒ } t j j	 | ƒ r| j | ƒ qqn  | j | ƒ q!n  | S(   Ni   t   linuxR   s   /usr/libs   lib%s.ai   t   lib(   R   R   RS   R   R;   RO   t   normpatht   joinR4   t   existst   pardirt   abspathRF   (   R    RG   t   dRO   t   roott   d2(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_library_dirs£   s    !c         C` s  g  } |  j  ƒ  } | d  k	 rq |  j d } |  j | |  j f } t j j t j j | | ƒ ƒ sz |  j } qz n	 |  j } | d  k	 r– | j	 | ƒ n  |  j
 } t j d k rò | rò | j d k rò | j	 d ƒ t ƒ  } | rò | j	 | ƒ qò n  t j d k r| j	 d ƒ n  | S(   Ns   -picR   t   msvct   gccR6   t
   cc_dynamic(   RS   R&   R4   t   static_lib_formatt   static_lib_extensionR;   RO   t   isfileRW   RF   t
   c_compilerR   R   t   compiler_typeR   (   R    RG   R[   R4   t   fRe   t   runtime_lib(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_librariesµ   s(    !			c         C` s   d g S(   Ns   -g(    (   R    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_flags_debugÏ   s    c         C` sD   |  j  ƒ  } | r* | d k r* d g } n	 d g } | j d ƒ | S(   Ns   3.3.3s   -O2s   -O3s   -funroll-loops(   t   get_versionRF   (   R    R#   RG   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_flags_optÒ   s    	c         C` s|   d d l  m } y | j ƒ  d } Wn t k
 r8 g  SXt j d ƒ } g  } x' | j | ƒ D] } | d | g 7} q^ W| S(   s(    Return detected arch flags from CFLAGS i    (   R?   t   CFLAGSs   -arch\s+(\w+)s   -arch(   t	   distutilsR?   t   get_config_varst   KeyErrorR   t   compilet   findall(   R    R?   t   cflagst   arch_ret
   arch_flagst   arch(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   _c_arch_flagsÝ   s    c         C` s   g  S(   N(    (   R    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   get_flags_archê   s    c         C` s)   t  j d k r d n d } d | | f S(   NR6   t   ,t   =s   -Wl,-rpath%s"%s"(   R   R   (   R    t   dirt   sep(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   runtime_library_dir_optioní   s    (   s   g77N(   t   __name__t
   __module__Rf   t   compiler_aliasest   descriptionR%   R'   t   possible_executablesR&   t   executablest   module_dir_switcht   module_include_switchR;   t   nameR   R   t	   pic_flagst   keyRF   R4   t   suggested_f90_compilerRM   RS   R^   Ri   Rj   Rl   Rw   Rx   R}   (    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR
      sB   	+	
	,							c           B` s  e  Z d  Z d Z d Z d „  Z d d g Z i d d g d 6d d d	 d
 d g e d 6d d d	 d g e d 6d d d	 d
 d g e d 6d d d	 g d 6d d g d 6d g d 6d d g d 6Z	 d Z
 d Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(    R5   R   s   GNU Fortran 95 compilerc         C` s   |  j  | ƒ } | s& | d d k r* d  S| d } | d k rC nI t j d k rŒ x7 d d d d	 d
 d g D] } |  j | j d ƒ qk Wn  | S(   Ni    R   i   s   4.R   R)   R*   R+   R,   R-   R1   s   -mno-cygwin(   R%   R&   R   R   Rƒ   RF   (   R    R!   R#   Rˆ   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR'   ÷   s    
t   f95s   <F90>s   -dumpversionR)   s   -Walls   -gs   -ffixed-forms   -fno-second-underscoreR*   R+   R,   R-   R.   s   -crR/   R0   R1   s   -Js   -Ic         C` s™   t  j d k s g  Sg  } |  j ƒ  } d | k rG d | | j d ƒ <n  xK d d d d g D]7 } t | | ƒ rZ | | k rZ | j d | g ƒ qZ qZ W| S(   s>   Return a list of -arch flags for every supported architecture.R6   t   i386t   i686t   ppct   x86_64t   ppc64s   -arch(   R   R   Rw   t   indext   _can_targetRE   (   R    t   cmdRu   t   c_archsRv   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   _universal_flags  s    c         C` s8   t  j |  ƒ } |  j |  j ƒ } | r4 | | d *n  | S(   Ni    (   R
   t	   get_flagsR”   R+   (   R    t   flagsRu   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR•   ,  s
    c         C` s8   t  j |  ƒ } |  j |  j ƒ } | r4 | | d *n  | S(   Ni    (   R
   RM   R”   R-   (   R    R–   Ru   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyRM   3  s
    c         C` sê   t  j |  ƒ } t j d k ræ |  j } | ræ | j d k ræ |  j ƒ  } | rã t j j	 |  j
 ƒ  ƒ } t j j | t j f d Œ } t j j | d ƒ } t j j	 | ƒ } t j j t j j | d ƒ ƒ rà | j | ƒ qà qã qæ n  | S(   NR   R_   i   RU   s   libmingwex.a(   R
   R^   R   R   Re   Rf   t
   get_targetR;   RO   RV   RS   RW   RY   RX   RF   (   R    RG   Re   RH   R[   R\   RO   t   mingwdir(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR^   :  s    	!c         C` sÙ   t  j |  ƒ } t j d k r. | j d ƒ n  t j d k rÕ |  j } | r¤ | j d k r¤ d | k r¤ | j d ƒ } | j | d d ƒ | j | d d ƒ q¤ n  t	 ƒ  rÕ |  j } | rÒ | j d k rÒ g  SqÕ n  | S(	   NR6   Ra   R   R_   R`   i   t   mingwext   mingw32(
   R
   Ri   R   R   t   removeRe   Rf   R   t   insertR   (   R    RG   Re   t   i(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyRi   I  s     			c         C` sQ   t  |  j d g d d ƒ\ } } | sM t j | ƒ } | rM | j d ƒ Sn  d S(   Ns   -vRN   i    i   t    (   R   R*   t   TARGET_RR   R   (   R    RQ   RR   R"   (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR—   ]  s    	
c         C` s!   t  ƒ  r d g St j |  ƒ Sd  S(   Ns   -O0(   R   R
   Rl   (   R    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyRl   g  s    	(   s   gfortranN(   R~   R   Rf   R€   R   R'   R‚   R&   t   _EXTRAFLAGSRƒ   R„   R…   R4   R”   R•   RM   R^   Ri   R—   Rl   (    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR   ò   s6   		
						
c         C` sé   |  } t  j d d ƒ \ } } t j | ƒ z¨ t j j | ƒ } t j j | ƒ d d } zR | j d | d | g ƒ t | d t	 d t
 d	 | ƒ} | j ƒ  | j d k SWd
 t j j | ƒ rÒ t j | ƒ n  XWd
 t j | ƒ Xt S(   s7   Return true if the architecture supports the -arch flagt   suffixs   .fi    s   .os   -archs   -ct   stderrt   stdoutt   cwdN(   t   tempfilet   mkstempR;   t   closeRO   RP   t   splitextRE   R   R   R   t   communicatet
   returncodeRX   R›   t   False(   R’   Rv   t   newcmdt   fidRK   R[   RR   t   p(    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyR‘   m  s    
t   __main__(   t   logi   ((   t
   __future__R    R   R   R   R;   R   RC   R   R¥   t
   subprocessR   R   R   t   numpy.distutils.fcompilerR   t   numpy.distutils.exec_commandR   t   numpy.distutils.misc_utilR   t   numpy.distutils.compatR	   t	   compilersRq   RŸ   R   R    R
   R   R‘   R~   Rn   R°   t   set_verbosityt   compilert	   customizet   printRk   t	   Exceptiont   msg(    (    (    s<   /tmp/pip-build-X4mzal/numpy/numpy/distutils/fcompiler/gnu.pyt   <module>   sB   			Ô{		
	
	