a
    db                     @   s  d Z ddlZddlmZ ddlmZ ddlT zddlmZ W n e	yV   dd ZY n0 g d	Z
ejd
dddgZejddddgZ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d6d&d'Zd7d(d)Zd*d+ Zed,kre  dS )8z
dyld emulation
    N)framework_info)
dylib_info)*) _dyld_shared_cache_contains_pathc                  G   s   t d S )N)NotImplementedError)args r   W/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/ctypes/macholib/dyld.pyr      s    r   )	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 u rt j} | |}|d u r$g S |dS )N:)osenvirongetsplit)envvarZrvalr   r   r	   dyld_env$   s    
r   c                 C   s   | d u rt 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_path1   s    r   c                 C   s
   t | dS )NZDYLD_LIBRARY_PATHr   r   r   r   r	   dyld_library_path4   s    r   c                 C   s
   t | dS )NZDYLD_FALLBACK_FRAMEWORK_PATHr   r   r   r   r	   dyld_fallback_framework_path7   s    r   c                 C   s
   t | dS )NZDYLD_FALLBACK_LIBRARY_PATHr   r   r   r   r	   dyld_fallback_library_path:   s    r   c                 C   s(   t |}|du r| S | |fdd}| S )z>For a potential path iterator, add DYLD_IMAGE_SUFFIX semanticsNc                 s   sF   | D ]<}| dr0|d td  | d V  n
|| V  |V  qd S )Nz.dylib)endswithlen)iteratorsuffixpathr   r   r	   _injectB   s
    

z)dyld_image_suffix_search.<locals>._inject)r   )r   r   r   r    r   r   r	   dyld_image_suffix_search=   s
    r!   c                 c   s\   t | }|d ur2t|D ]}tj||d V  qt|D ]}tj|tj| V  q:d S Nname)r   r   r   r   joinr   basename)r#   r   	frameworkr   r   r   r	   dyld_override_searchK   s    r'   c                 c   s2   |  dr.|d ur.tj|| tdd  V  d S )Nz@executable_path/)
startswithr   r   r$   r   )r#   executable_pathr   r   r	   dyld_executable_path_search\   s    r*   c                 c   s   | V  t | }|d ur<t|}|D ]}tj||d V  q"t|}|D ]}tj|tj| V  qH|d ur|stD ]}tj||d V  qv|stD ]}tj|tj| V  qd S r"   )	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_searchc   s    r-   c              	   C   sz   t tt| |t| |t| ||D ]B}tj|r<|  S zt|rP|W   S W q$ t	yd   Y q$0 q$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   isfiler   r   
ValueError)r#   r)   r   r   r   r   r	   r
   y   s    r
   c              
   C   s   d}zt | ||dW S  ty< } z|}W Y d}~n
d}~0 0 | d}|dkr`t| }| d7 } tj| tj| d| } z6zt | ||dW W d}S  ty   |Y n0 W d}nd}0 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
   r0   rfindr   r   r   r$   r%   )fnr)   r   erroreZ
fmwk_indexr   r   r	   r      s"    	
r   c                  C   s(   i } t ddksJ t ddks$J d S )NzlibSystem.dylibz/usr/lib/libSystem.dylibzSystem.framework/Systemz2/System/Library/Frameworks/System.framework/System)r
   r   r   r   r	   test_dyld_find   s    r6   __main__)N)N)N)N)N)N)N)N)N)NN)NN)__doc__r   Zctypes.macholib.frameworkr   Zctypes.macholib.dylibr   	itertoolsZ_ctypesr   ImportError__all__r   
expanduserr+   r,   r   r   r   r   r   r   r!   r'   r*   r-   r
   r   r6   __name__r   r   r   r	   <module>   sD   













