ó
Eˆz]c           @` 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
 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" d  d l# m$ Z$ e" j% d ƒ e& e$ d ƒ j' ƒ  ƒ y e& e$ d ƒ j' ƒ  ƒ Wqâe( k
 rÞe& e ƒ  ƒ qâXn  d S(   i    (   t   divisiont   absolute_importt   print_functionN(   t   Popent   PIPEt   STDOUT(   t   filepath_from_subprocess_output(   t	   FCompiler(   t   get_exception(   t   system_infot   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<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   is_win64   s    c           B` s  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 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-.]+\.[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<   lib/python2.7/site-packages/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<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   version_matchU   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<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   get_flags_linker_sov   s,    	c         C` sZ   y t  j |  j d g ƒ } Wn t t  j f k
 r9 n Xt | ƒ } t j j | ƒ Sd  S(   Ns   -print-libgcc-file-name(
   t
   subprocesst   check_outputR*   t   OSErrort   CalledProcessErrorR   R;   t   patht   dirnameR&   (   R    t   output(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   get_libgcc_dir¢   s    c         C` s´   t  j d  d k r d } n t  j d k r4 d } n d  } d  } | r° d j | ƒ g } y t j |  j | ƒ } Wn t t j f k
 rŽ q° Xt	 | ƒ } t
 j j | ƒ } n  | S(   Ni   t   linuxs   libgfortran.soR6   s   libgfortran.dylibs   -print-file-name={0}(   R   R   R&   t   formatRN   RO   R*   RP   RQ   R   R;   RR   RS   (   R    t   libgfortran_namet   libgfortran_dirt   find_lib_argRT   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   get_libgfortran_dir­   s     		c         C` sG  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  |  j ƒ  } | rC| j | ƒ n  | S(   Ni   RV   R   s   /usr/libs   lib%s.ai   t   lib(   R   R   RU   R   R;   RR   t   normpatht   joinR4   t   existst   pardirt   abspathRF   R[   (   R    RG   t   dRR   t   roott   d2t   lib_gfortran_dir(    (    s<   lib/python2.7/site-packages/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 ƒ n  t j d k rò | j	 d ƒ n  | S(   Ns   -picR   t   msvct   gccR6   t
   cc_dynamic(   RU   R&   R4   t   static_lib_formatt   static_lib_extensionR;   RR   t   isfileR^   RF   t
   c_compilerR   R   t   compiler_type(   R    RG   Rb   R4   t   fRm   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   get_librariesØ   s"    !		c         C` s   d g S(   Ns   -g(    (   R    (    (    s<   lib/python2.7/site-packages/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<   lib/python2.7/site-packages/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<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   _c_arch_flagsû   s    c         C` s   g  S(   N(    (   R    (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   get_flags_arch  s    c         C` sf   t  j d  d k s" t  j d k r+ t ‚ n  d | k s= t ‚ t  j d k rR d n d } d | | f S(   Ni   t   aixR   t   ,R6   t   =s   -Wl,-rpath%s%s(   R   R   t   NotImplementedErrort   AssertionError(   R    t   dirt   sep(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   runtime_library_dir_option  s
    "	(   R   N(   t   __name__t
   __module__Rn   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   RU   R[   Rf   Rp   Rq   Rs   R~   R   R‡   (    (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyR
   $   sD   	,	
	,								c           B` s  e  Z d  Z d) Z d Z d „  Z g  Z e j d ƒ Z	 e	 d* k	 r^ e j e j j e	 ƒ ƒ n  e j d d g ƒ e j d ƒ r¥ e j e j j e j d ƒ ƒ ƒ n  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 e j d  d k r¸e d j d ƒ e j ƒ  d d  d k r¸x1 d d d d d g D] Z e e j d ƒ q—Wq¸n  d Z 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<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyR'     s    
	t   GFORTRANt   f95s   <F90>s   -dumpversionR)   s   -Walls   -gs   -ffixed-forms   -fno-second-underscoreR*   R+   R,   R-   R.   s   -crR/   R0   R1   s   -Js   -Ii   R€   s	   -lpthreadi    i   t   64s   -maix64c         C` s,   t  j d k s g  Sd t j ƒ  d d  g S(   NR6   s   -mi    i   (   R   R   R   (   R    t   cmd(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   _universal_flagsP  s    c         C` s8   t  j |  ƒ } |  j |  j ƒ } | r4 | | d *n  | S(   Ni    (   R
   t	   get_flagsR˜   R+   (   R    t   flagsR|   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyR™   U  s
    c         C` s8   t  j |  ƒ } |  j |  j ƒ } | r4 | | d *n  | S(   Ni    (   R
   RM   R˜   R-   (   R    Rš   R|   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyRM   \  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  |  j ƒ  } | r| j | ƒ n  | S(   NR   Rg   i   R\   s   libmingwex.a(   R
   Rf   R   R   Rm   Rn   t
   get_targetR;   RR   R]   RU   R^   R`   R_   RF   R[   (	   R    RG   Rm   RH   Rb   Rc   RR   t   mingwdirRe   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyRf   c  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  |  j } | rÉ | j d k rÉ g  Sn  | S(	   NR6   Ri   R   Rg   Rh   i   t   mingwext   mingw32(	   R
   Rp   R   R   t   removeRm   Rn   t   indext   insert(   R    RG   Rm   t   i(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyRp   v  s    		c         C` sl   y t  j |  j d g ƒ } Wn t t  j f k
 r9 n/ Xt | ƒ } t j | ƒ } | rh | j d ƒ Sd S(   Ns   -vi   t    (	   RN   RO   R*   RP   RQ   R   t   TARGET_RR   R   (   R    RT   R"   (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyR›   ˆ  s    c         C` s¯   t  j ƒ  } xY | D]Q } t | d ƒ : } x0 t r] | j d ƒ } | sM Pn  | j | ƒ q. WWd  QXq Wt j | j ƒ  ƒ } t	 j
 d d k r¢ | j d ƒ } n  | j d ƒ S(   Nt   rbi   i    i   t   asciiR‚   (   t   hashlibt   sha1t   opent   Truet   readt   updatet   base64t	   b32encodet   digestR   t   version_infot   decodet   rstrip(   R    t	   filenamest   ht   fnRo   t   blockt   text(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   _hash_files”  s    	c         C` sà  |  j  } | j d k r' t d ƒ ‚ n  |  j t | ƒ t | ƒ ƒ } t ƒ  rX d } n d } d t j j t j j	 | d ƒ ƒ d d  }	 |	 d | d	 | }
 |
 d
 } |
 d } |
 d } t j j
 | | ƒ } t j j
 | | ƒ } t j j
 | | ƒ } t j j | ƒ r| | f S| r>d g t | ƒ d g } n  |  j | | d | d t | ƒ d d | d d d d g ƒt ƒ  rŒd } n d } d | d | | g } | j s¿| j ƒ  n  | j | j g | ƒ | | f S(   se   Create a wrapper shared library for the given objects

        Return an MSVC-compatible lib
        Rg   s   This method only supports MSVCt	   win_amd64R   R\   i    i   t   .s
   .gfortran-s   .dlls   .defs   .libs   -Wl,--whole-archives   -Wl,--no-whole-archivet
   output_dirt   extra_postargss   -Wl,--allow-multiple-definitions   -Wl,--output-def,s   -Wl,--export-all-symbolss   -Wl,--enable-auto-imports   -statics   -mlong-double-64s   /MACHINE:X64s   /MACHINE:X86s   /def:s   /OUT:(   Rm   Rn   R   R¸   t   listR   R;   RR   t   splitextt   basenameR^   Rl   t   link_shared_objectt   initializedt
   initializet   spawnR\   (   R    t   objectsR»   t   extra_dll_dirt   chained_dllst
   is_archiveRm   t   object_hasht   tagR¿   t	   root_namet   dll_namet   def_namet   lib_namet   dll_patht   def_patht   lib_patht	   specifiert   lib_args(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   _link_wrapper_lib¢  sP    			"



				c         C` s   | j  d k S(   NRg   (   Rg   (   Rn   (   R    t   compiler(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   can_ccompiler_linkà  s    c      	   C` s!  |  j  j d k rg  } g  } x@ | D]8 } | j ƒ  j d ƒ rP | j | ƒ q% | j | ƒ q% Wg  } g  } xe | d d d … D]P }	 |  j |	 g | | d | d t ƒ\ }
 } | j d |
 ƒ | j d | ƒ q W| sß | S|  j | | | d | d t ƒ\ }
 } |
 g | St	 d ƒ ‚ d S(	   s†   
        Convert a set of object files that are not compatible with the default
        linker, to a file that is compatible.
        Rg   s   .aNiÿÿÿÿRÆ   RÇ   i    s   Unsupported C compiler(
   Rm   Rn   t   lowert   endswithRF   RÓ   Rª   R¡   t   FalseR   (   R    RÄ   R»   RÅ   t   archivest   plain_objectst   objt   chained_libsRÆ   t   archiveR\   t   dll(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   wrap_unlinkable_objectsä  s8    (   R   N("   Rˆ   R‰   Rn   RŠ   R‹   R'   RŒ   R;   t   getenvt   _env_gfortranR&   RF   RR   R¿   RE   t   _EXTRAFLAGSR   RŽ   R   R   R   R   R’   R4   R˜   R™   RM   Rf   Rp   R›   R¸   RÓ   RÕ   Rß   (    (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyR     sR   	%	
								>	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   closeRR   RS   R¾   RE   R   R   R   t   communicatet
   returncodeR_   RŸ   RØ   (   R—   R}   t   newcmdt   fidRK   Rb   RT   t   p(    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   _can_target  s    
t   __main__(   t   log(   t   customized_fcompileri   R   t   g95()   t
   __future__R    R   R   R   R;   R   RC   R   Rç   R§   R­   RN   R   R   R   t   numpy.distutils.exec_commandR   t   numpy.distutils.fcompilerR   t   numpy.distutils.compatR   t   numpy.distutils.system_infoR	   t	   compilersRx   R¤   R   Râ   R
   R   Rï   Rˆ   Ru   Rñ   t   numpy.distutilsRò   t   set_verbosityt   printRr   t	   Exception(    (    (    s<   lib/python2.7/site-packages/numpy/distutils/fcompiler/gnu.pyt   <module>   s@   			óû	