ó
©¶"Pc           @   s»   d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z d  d l m Z m Z m	 Z	 d  d l
 j Z d  d l Z d  d l Z e j d ƒ Z d  Z d d d d g Z d	 d d
 „  ƒ  YZ d S(   iÿÿÿÿN(   t   dependt   hooks(   t   is_wint   LogDictt   sets   PyInstaller.build.mfs	   top-levelt   conditionalt   delayeds   delayed, conditionalt   ImportTrackerc           B   sn   e  Z d d d d  „ Z d d „ Z d d d d „ Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z RS(   c         C   sü   g  |  _  i  |  _ | r$ | |  _  n  |  j  j t j  ƒ t ƒ  |  _ t rˆ t j j	 j
 ƒ  t j j	 j ƒ  t j j	 j |  j  ƒ g |  _ n- t j j	 j
 ƒ  t j j	 j |  j  ƒ g |  _ | rÎ t j j | ƒ n  | d  k ré t ƒ  |  _ n t | ƒ |  _ d  S(   N(   t   patht   warningst   extendt   sysR   t   modulesR   t   PyInstallerR    t   impdirectort   BuiltinImportDirectort   RegistryImportDirectort   PathImportDirectort   metapathR   t   __path__t   NoneR   t   excludes(   t   selft   xpatht	   hookspathR   (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   __init__.   s"    		!c         C   s  | } | d  k r d } n  i  } |  j | | ƒ } t d  | | g t | ƒ ƒ } d } x$| t | ƒ k  r~| | \ } } | j | d ƒ r¼ | | =|  j | } | r{| j | ƒ q{q[ | d } d | | <| } |  j | } | r[ | j | ƒ x‚ | j D]t \ }	 }
 } } |
 d | } |  j |	 | | | ƒ } t d  | | g t | ƒ ƒ } | | | | +| t | ƒ } q Wq[ q[ Wt d „  | ƒ S(   Nt   __main__i    i   i   c         S   s   |  d S(   Ni    (    (   t   a(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   <lambda>f   s    (   R   t   analyze_onet   mapt   lent   getR   t   xreft   imports(   R   t   nmt
   importernmt   importert   seent   nmst   it   modt   jt   namet	   isdelayedt   isconditionalt   levelt   imptypt   newnms(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt	   analyze_rJ   s6    	

i    iÿÿÿÿc         C   s_  | s | } d
 } d } n  | j d ƒ } | d k  r¢ d
 g } | r)|  j | ƒ rg | j d | ƒ qŸ d j | j d ƒ d  ƒ } | rŸ | j d | ƒ qŸ q)n‡ | d k rÀ d
 } d
 g } ni | d k r)|  j | ƒ rè | d 8} n  | d k rd j | j d ƒ |  ƒ } n  | d
 g } d
 } n  d
 } | s;t ‚ | d d k r[| d =g  } n  g  }	 xË | D]Ã }
 |
 } xª t | ƒ D]’ \ } } | r¤| d | } n | } |  j j | t	 ƒ } | t	 k rót
 j d | ƒ |  j | | | ƒ } n  | r|	 j | j ƒ | } qPqW| d } | rhPqhqhW| t | ƒ k  r¿| r{t |  j | | | ƒ re|	 S|  j | ƒ s{|	 Sn  d |  j d | t | | pšd f <| |  j k r»|  j | =n  |	 S| d
 k rÏ|	 S|  j | } | j ƒ  r[xp | j D]b } t | | ƒ sò|  j | | | d | ƒ } | r=|	 j | j ƒ qT| j j d	 | ƒ qòqòWn  |	 S(   sm   
        break the name being imported up so we get:
        a.b.c -> [a, b, c] ; ..z -> ['', '', z]
        i    t   .iÿÿÿÿi   t   *s   Analyzing %ss'   W: no module named %s (%s import by %s)R   s   W: name %s not foundN(   R   t   splitt	   ispackaget   insertt   joint   AssertionErrort	   enumerateR   R    t   UNTRIEDt   loggert   debugt   doimportt   appendt   __name__R   t   hasattrR	   t   imptypst   _all(   R   R#   R$   R/   R.   t   nmpartst   contextst   pkgnmRB   R'   t   contextt   ctxR(   t   fqnameR)   t	   bottommod(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyR   h   s†    		 			
$c         C   s   y/ t  | d ƒ j ƒ  d } t | | d ƒ } Wn, t k
 r] } t j | ƒ t d ƒ ‚ n Xt j j	 | | ƒ } | |  j d <|  j
 d ƒ S(   Nt   rUs   
t   execi
   R   (   t   opent   readt   compilet   SyntaxErrorR;   t	   exceptiont
   SystemExitR    R   t   PyScriptR1   (   R   t   fnmt   stufft   cot   eR)   (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   analyze_scriptÄ   s    c         C   s   |  j  | j ƒ  S(   N(   R   R5   (   R   R#   (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyR5   Ï   s    c   
      C   sŠ  d | k s t  | ƒ ‚ | |  j k r+ d S| r| |  j | } | j ƒ  ru | j | ƒ } | ry t | | | ƒ qy q© d Sn- x* |  j D] } | j | ƒ } | r† Pq† q† W| ra| | _	 y; d | } t
 d t ƒ  t ƒ  | g ƒ } t | | ƒ }	 Wn t k
 rnK X|  j | |	 ƒ } | | j	 k rQt j d | | j	 ƒ | |  j | j	 <n  | |  j | <n% | d k syt  | ƒ ‚ d |  j | <| S(   sã   

        nm      name
                e.g.:
        ctx     context
                e.g.:
        fqname  fully qualified name
                e.g.:

        Return dict containing collected information about module (
        R2   s   hook-s   PyInstaller.hookss   %s is changing its name to %sN(   R8   R   R   R   R5   R=   t   setattrR   t   getmodR?   t
   __import__t   globalst   localst   getattrt   AttributeErrort   _handle_hookR;   t   warn(
   R   R#   RG   RH   t   parentR)   t   directort	   hookmodnmR   t   hook(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyR=   Ò   s>    	
	c         C   sw  t  | d ƒ r! | j | ƒ } n  t  | d ƒ rc x0 | j D]" } | j j | d d d f ƒ q: Wn  t  | d ƒ rŸ x* | j D] \ } } t | | | ƒ q| Wn  t  | d ƒ rsd „  } | j } x° | j D]¢ \ } }	 |	 rì |	 t j	 7}	 n  x} t
 j
 | ƒ D]l }
 t j j |
 ƒ r=| j |	 t j j |
 ƒ |
 d f ƒ qü t j j |
 | t j j |
 ƒ |	 | f ƒ qü WqÊ Wn  | S(	   NRd   t   hiddenimportsi    iÿÿÿÿt   attrst   datasc         S   sv   |  \ } } } x` | D]X } t  j j | | ƒ } t  j j | ƒ r | j | | t | ƒ d | d f ƒ q q Wd  S(   Ni   t   DATA(   t   osR   R7   t   isfileR>   R   (   t   .0t   dirnamet   namest   baset   dest_dirRg   t   fn(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   _visit"  s
    Rh   (   R@   Rd   Re   R"   R>   Rf   RX   Rg   Ri   t   sept   globR   Rj   t   basenamet   walkRl   (   R   R)   Rd   t   impnmt   attrt   valRq   Rg   t   gRo   Rp   (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyR_     s(    #		)'c         C   sq   |  j  j ƒ  } x[ |  j j ƒ  D]J \ } } | r x5 | j  D]' } | j | d | j | j f ƒ q; Wq q W| S(   Ns
    - %s (%s)(   R	   t   keysR   t   itemsR>   R?   t   __file__(   R   R	   R#   R)   t   w(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   getwarnings4  s    ,c         C   so   |  j  j ƒ  } | j ƒ  g  } xI | D]A \ } } | r& | j j ƒ  } | j ƒ  | j | | f ƒ q& q& W| S(   N(   R   R{   t   sortt   _xrefRz   R>   (   R   t   modst   rsltR#   R)   t	   importers(    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   getxref<  s    

N(   R?   t
   __module__R   R   R1   R   RW   R5   R=   R_   R~   R„   (    (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyR   ,   s   \			C		(    (   R   Ri   Rs   R   R    R   t   PyInstaller.compatR   R   R   t   PyInstaller.logt   logt   loggingt   PyInstaller.depend.ownert   PyInstaller.depend.impdirectort	   getLoggerR;   R:   RA   R   (    (    (    sN   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/imptracker.pyt   <module>   s   