ó
• –Qc           @   sü  d  Z  d d l Z d d l Z d d l m Z d d l 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(!   s;   
Scan the code object for imports, __all__ and wierd stuff
iÿÿÿÿN(   t   compat(   t   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(    (    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyt   pass1O   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(   R/   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.   R3   R)   t   namet   jt   popt   popargt   pcondtlt   plinet   cndtlt   lvlt   ctypesbt   ctypeswR,   t   _t
   all_nested(    (    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyRD   o   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  } xY t ˆ ƒ D]K } | r—| t j j | ƒ k r¤| j d | f ƒ q¤qYˆ j	 | ƒ 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.   R3   R)   t   soname(   RH   RE   R&   (    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\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   CDLLs   WinDLL(   s   CDLLs   WinDLL(   s   cdlls   windll(
   R   R   R9   R   R$   t   listt   ost   patht   basenamet   remove(   RE   R&   R'   RZ   R-   R.   R3   R)   RM   t   op2t   oparg2t   conditional2t   curline2RY   RG   t   binary(    (   RE   RH   R&   s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyRA   Ä   s4    	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(	   Ra   t   pathsept   joint   PyInstallert
   __pathex__R    t   getenvR    t   setenv(   Rb   t   old(   t   envvar(    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyt	   _setPaths*  s    c            s0   |  d  k r t j ˆ  ƒ n t j ˆ  |  ƒ d  S(   N(   R    R    t   unsetenvRs   (   Rt   (   Ru   (    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyt   _restorePaths2  s    s   coredll.dlls   kernel32.dlli   t   nts   .sos   .dylibi    R2   s   /sbin/ldconfigs   -ps   =>s(   library %s required via ctypes not foundt   BINARY(   s   coredll.dlls   kernel32.dll(   s   .sos   .dylibN(   t   ctypes.utilRj   R   R   Ra   Rb   t   splitextRM   t   lowerR    R    Rr   t   splitRn   t   isfileRo   t   exec_commandt   stript
   splitlinesR:   t   loggert   warnR$   (   t	   cbinariesRj   Rv   Rx   t   retRt   t   cbint   extt   cpatht   dt   textt   L(    (   Ru   s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyt   _resolveCtypesImports  sH    			!	%!	
(0   t   __doc__R   Ra   Rp   R    t   PyInstaller.compatR   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=   t   setR!   R   R   R<   t   hasjrelR"   R/   RD   RA   R   (    (    (    s[   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\utils.pyt   <module>   sh   "


	
	 U	Z