???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \E                 @   s   d Z ddlZddlmZ ddlmZ ddlT dddd	gZejj	d
dddgZ
ejj	ddddgZdd Zd+ddZd,ddZd-ddZd.ddZd/ddZd0ddZd1d d!Zd2d"d#Zd3d$d%Zd4d&dZd5d'dZd(d) Zed*k re  dS )6z
dyld emulation
    N)framework_info)
dylib_info)*	dyld_findframework_findr   r   z~/Library/Frameworksz/Library/Frameworksz/Network/Library/Frameworksz/System/Library/Frameworksz~/libz/usr/local/libz/libz/usr/libc             C   s.   | d krt j} | j|}|d kr$g S |jdS )N:)osenvirongetsplit)envvarZrval r   ,/usr/lib64/python3.6/ctypes/macholib/dyld.pydyld_env   s    
r   c             C   s   | d krt j} | jdS )NZDYLD_IMAGE_SUFFIX)r   r	   r
   )r   r   r   r   dyld_image_suffix'   s    r   c             C   s
   t | dS )NZDYLD_FRAMEWORK_PATH)r   )r   r   r   r   dyld_framework_path,   s    r   c             C   s
   t | dS )NZDYLD_LIBRARY_PATH)r   )r   r   r   r   dyld_library_path/   s    r   c             C   s
   t | dS )NZDYLD_FALLBACK_FRAMEWORK_PATH)r   )r   r   r   r   dyld_fallback_framework_path2   s    r   c             C   s
   t | dS )NZDYLD_FALLBACK_LIBRARY_PATH)r   )r   r   r   r   dyld_fallback_library_path5   s    r   c             C   s(   t |}|dkr| S | |fdd}| S )z>For a potential path iterator, add DYLD_IMAGE_SUFFIX semanticsNc             s   sJ   xD| D ]<}|j dr2|d td  | d V  n
|| V  |V  qW d S )Nz.dylib)endswithlen)iteratorsuffixpathr   r   r   _inject=   s
    


z)dyld_image_suffix_search.<locals>._inject)r   )r   r   r   r   r   r   r   dyld_image_suffix_search8   s
    r   c             c   sd   t | }|d k	r6x$t|D ]}tjj||d V  qW x(t|D ]}tjj|tjj| V  q@W d S )Nname)r   r   r   r   joinr   basename)r   r   	frameworkr   r   r   r   dyld_override_searchF   s    r!   c             c   s2   | j dr.|d k	r.tjj|| tdd  V  d S )Nz@executable_path/)
startswithr   r   r   r   )r   executable_pathr   r   r   dyld_executable_path_searchW   s    r$   c             c   s   | V  t | }|d k	r@t|}x |D ]}tjj||d V  q$W t|}x$|D ]}tjj|tjj| V  qNW |d k	r| rx tD ]}tjj||d V  qW |sx$tD ]}tjj|tjj| V  qW d S )Nr   )	r   r   r   r   r   r   r   DEFAULT_FRAMEWORK_FALLBACKDEFAULT_LIBRARY_FALLBACK)r   r   r    Zfallback_framework_pathr   Zfallback_library_pathr   r   r   dyld_default_search^   s    



r'   c             C   sP   x<t tt| |t| |t| ||D ]}tjj|r&|S q&W td| f dS )z:
    Find a library or framework using dyld semantics
    zdylib %s could not be foundN)	r   chainr!   r$   r'   r   r   isfile
ValueError)r   r#   r   r   r   r   r   r   t   s    

c             C   s   d}yt | ||dS  tk
r8 } z
|}W Y dd}~X nX | jd}|dkr\t| }| d7 } tjj| tjj| d| } yt | ||dS  tk
r   |Y nX dS )z
    Find a framework using dyld semantics in a very loose manner.

    Will take input such as:
        Python
        Python.framework
        Python.framework/Versions/Current
    N)r#   r   z
.framework   )r   r*   rfindr   r   r   r   r   )fnr#   r   erroreZ
fmwk_indexr   r   r   r      s    	
c              C   s(   i } t ddkstt ddks$td S )NzlibSystem.dylibz/usr/lib/libSystem.dylibzSystem.framework/Systemz2/System/Library/Frameworks/System.framework/System)r   AssertionError)r   r   r   r   test_dyld_find   s    r2   __main__)N)N)N)N)N)N)N)N)N)NN)NN)__doc__r   Zctypes.macholib.frameworkr   Zctypes.macholib.dylibr   	itertools__all__r   
expanduserr%   r&   r   r   r   r   r   r   r   r!   r$   r'   r   r   r2   __name__r   r   r   r   <module>   s:   













