ó
©¶"Pc           @   sü  d  d l  Z  d  d l Z d  d l m Z d  d l m Z m Z d  d l m Z m Z m	 Z	 m
 Z
 d  d l Z d  d l j Z e j e ƒ Z e  j j d ƒ Z e  j j d ƒ Z y e  j j d ƒ Z Wn d Z n Xe  j j d ƒ Z e  j j d	 ƒ Z e  j j d
 ƒ Z y e  j j d ƒ Z Wn d Z n Xe  j j d ƒ Z e  j j d ƒ Z e  j j d ƒ Z e  j j d ƒ Z y e  j j d ƒ Z  Wn e! k
 r§d Z  n Xe  j j d ƒ Z" e  j j d ƒ Z# e	 rÛe# Z$ n d Z$ e
 r2e e  j j d ƒ e  j j d ƒ e  j j d ƒ e  j j d ƒ g ƒ Z% n* e e  j j d ƒ e  j j d ƒ g ƒ Z% e  j j d ƒ Z& y e  j j d ƒ Z' Wn e! k
 rd Z' n Xe e e e e' e g ƒ Z( e e  j) ƒ Z* d „  Z+ d d d d d „ Z, d „  Z- d „  Z. d S(    iÿÿÿÿN(   t   compat(   t   sett   ctypes(   t   is_unixt	   is_darwint   is_py25t   is_py27t   IMPORT_NAMEt   IMPORT_FROMt   IMPORT_STARt
   STORE_NAMEt
   STORE_FASTt   STORE_GLOBALt	   STORE_MAPt   LOAD_GLOBALt	   LOAD_ATTRt	   LOAD_NAMEt	   EXEC_STMTt
   SET_LINENOt
   BUILD_LISTt
   LOAD_CONSTt   POP_JUMP_IF_TRUEt   POP_JUMP_IF_FALSEt   JUMP_IF_TRUE_OR_POPt   JUMP_IF_FALSE_OR_POPt   JUMP_IF_FALSEt   JUMP_IF_TRUEt   JUMP_FORWARDt   STORE_DEREFc   
      C   sO  g  } d } t  |  ƒ } d } d } d } x| | k  rJ| | k rN d } n  |  | } | d } t | ƒ } | t j k r° t |  | ƒ t |  | d ƒ d }	 | d } n d  }	 | rñ | t k rñ d } |	 } | t k r| | 7} qn( | r| t k rt | | |	 ƒ } n  | t	 k r.|	 } q- | j
 | |	 | | f ƒ q- W| S(   Ni    i   i   i   (   t   lent   ordt   dist   HAVE_ARGUMENTt   Nonet   COND_OPSt   HASJRELR   t   maxR   t   append(
   t   codet   instrst   it   nt   curlinet   inconditiont   outt   ct   opt   oparg(    (    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt   pass1W   s6    	

&	i    c         C   s6  t  |  j ƒ } | d  k r$ g  } n  | d  k r9 g  } n  | d  k rN g  } n  g  } d  } d } xft | ƒ D]X\ }	 \ }
 } } } |
 t k rÞ | d k r± |  j | } } n |  j | } } | j | | | | f ƒ n¬|
 t k rc|  j | } | d k r'| s| d d k r'| | } n | d | } | j | | | | f ƒ | d  k	 sŠt ‚ n'|
 t	 k r¡| d  k	 st ‚ | j | d | | | f ƒ né|
 t
 k rc|  j | d k rŠ|	 d } | | \ } } } } | t k r | j d | ƒ q`g  } xW | d k r\| d } | | \ } } } } | t k rX| j |  j | ƒ q	Pq	WqŠn'|
 t k rrn|
 t k r­t |  j | t t f ƒ rŠ|  j | } qŠnÝ |
 t k r;|  j | } d d	 g | } d
 d g | } | d k r| j d | | | f ƒ qŠ| d k rŠ| j d | | | f ƒ qŠnO |
 t k r„d d	 g | } d
 d g | } | j d | | | f ƒ n d  } t rm t |  | |	 ƒ \ } } | j | ƒ | j | ƒ qm qm WxZ |  j D]O } t | t |  ƒ ƒ rÓt | | | | d ƒ \ } } } } | j | ƒ qÓqÓW| | | | f S(   Niÿÿÿÿi    t   .s   .*t   __all__i   s(   W: __all__ is built strangely at line %st    t   conditionals	   top-levelt   delayedt
   __import__s,   W: %s %s __import__ hack detected at line %st   evals&   W: %s %s eval hack detected at line %ss+   W: %s %s exec statement detected at line %s(   R0   t   co_codeR!   t	   enumerateR   t   co_namesR%   R   t   AssertionErrorR	   R
   R   R   t	   co_constst	   STORE_OPSt   LOAD_CONST_levelt
   isinstancet   intt   longR   R   R   t   scan_code_for_ctypest   extendt   typet	   scan_code(   t   cot   mt   wt   bt   nestedR'   t   allt   lastnamet   levelR(   R.   R/   R4   R*   t   namet   jt   popt   popargt   pcondtlt   plinet   cndtlt   lvlt   ctypesbt   ctypeswR-   t   _t
   all_nested(    (    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyRE   w   s„    			%# 

 $c            s©  ‡ ‡  ‡ f d †  } g  ‰ ˆ | \ } } } } | t  t f k rFˆ  j | } | d k rm | | d ƒ qF| d k rÉ ˆ | d \ }	 }
 } } |	 t k rCˆ  j |
 d k rÆ | | d ƒ qÆ qCqF| d k rFˆ | d \ }	 }
 } } |	 t k rCˆ  j |
 d	 k r/ˆ  j |
 d
 } ˆ j | ƒ q@| | d ƒ qCqFn  g  } xP t ˆ ƒ D]B } | t j j | ƒ k rYˆ j	 | ƒ | j d | f ƒ qYqYWˆ | f S(   só   
    Detects ctypes dependencies, using reasonable heuristics that should
    cover most common ctypes usages; returns a tuple of two lists, one
    containing names of binaries detected as dependencies, the other containing
    warnings.
    c            sC   ˆ |  \ } } } } | t  k r? ˆ j | } ˆ  j | ƒ n  d S(   su   Extracts library name from an expected LOAD_CONST instruction and
        appends it to local binaries list.
        N(   R   R<   R%   (   R(   R.   R/   R4   R*   t   soname(   RI   RF   R'   (    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt   _libFromConstÔ   s    t   CDLLt   WinDLLi   R   i   t   cdllt   windllt   LoadLibrarys   .dllsC   W: ignoring %s - ctypes imports only supported using bare filenames(   s   CDLLR]   (   s   CDLLR]   (   s   cdllR_   (
   R   R   R:   R   R%   t   listt   ost   patht   basenamet   remove(   RF   R'   R(   R[   R.   R/   R4   R*   RN   t   op2t   oparg2t   conditional2t   curline2RZ   RH   t   bin(    (   RF   RI   R'   sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyRB   Ì   s2    	c            s  d d l  m } t r d ‰  n t r. d ‰  n d ‰  ‡  f d †  } ‡  f d †  } g  } | ƒ  } x¨|  D] } | d k r€ qh n  t j j | ƒ d
 } t j d k r½ | j ƒ  d k r½ qh n  | t j j | ƒ d ƒ } t rÓ| d k rô | } n  xÜ t
 j ˆ  d ƒ j t j ƒ D]@ }	 t j j t j j |	 | ƒ ƒ rt j j |	 | ƒ } PqqWt
 j d d ƒ }
 xg |
 j ƒ  j ƒ  D]J } | | k r|| j d d
 ƒ d
 j ƒ  } t j j | ƒ sÂt ‚ Pq|q|Wd } n  | d k ròt j d | ƒ qh | j | | d f ƒ qh W| | ƒ | S(   sF   Completes ctypes BINARY entries for modules with their full path.
    iÿÿÿÿ(   t   find_libraryt   LD_LIBRARY_PATHt   DYLD_LIBRARY_PATHt   PATHc             s_   t  j j t j ƒ }  t j ˆ  ƒ } | d  k	 rK t  j j |  | f ƒ }  n  t j ˆ  |  ƒ | S(   N(	   Rb   t   pathsept   joint   PyInstallert
   __pathex__R    t   getenvR!   t   setenv(   Rc   t   old(   t   envvar(    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt	   _setPaths*  s    c            s0   |  d  k r t j ˆ  ƒ n t j ˆ  |  ƒ d  S(   N(   R!   R    t   unsetenvRt   (   Ru   (   Rv   (    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt   _restorePaths2  s    s   coredll.dlls   kernel32.dlli   t   nts   .sos   .dylibi    R3   s   /sbin/ldconfigs   -ps   =>s(   library %s required via ctypes not foundt   BINARY(   s   coredll.dlls   kernel32.dll(   s   .sos   .dylibN(   t   ctypes.utilRk   R   R   Rb   Rc   t   splitextRN   t   lowerR!   R    Rs   t   splitRo   t   isfileRp   t   exec_commandt   stript
   splitlinesR;   t   loggert   warnR%   (   t	   cbinariesRk   Rw   Ry   t   retRu   t   cbint   extt   cpatht   dt   textt   L(    (   Rv   sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt   _resolveCtypesImports  sH    			!	%!	
(/   R   Rb   Rq   R    t   PyInstaller.compatR   R   R   R   R   R   t   PyInstaller.depend.utilst   PyInstaller.logt   logt   loggingt	   getLoggert   __name__R„   t   opnamet   indexR   R   R	   R!   R
   R   R   R   R   R   R   R   R   t
   ValueErrorR   R   R>   R"   R   R   R=   t   hasjrelR#   R0   RE   RB   RŽ   (    (    (    sI   /home/salopaasi/Documents/Moo/pyinstaller-2.0/PyInstaller/depend/utils.pyt   <module>   sf   "


	
	 U	R