
    f                     <   d Z ddlZddlmZ ddlmZ ddlT 	 ddlmZ n# e	$ r d ZY nw xY wg dZ
ej                            d	          d
ddgZej                            d          dddgZd ZddZddZddZddZddZddZddZddZddZddZddZdS )z
dyld emulation
    N)framework_info)
dylib_info)*) _dyld_shared_cache_contains_pathc                      t           N)NotImplementedError)argss    )../lib/python3.11/ctypes/macholib/dyld.pyr   r      s    !!    )	dyld_findframework_findr   r   z~/Library/Frameworksz/Library/Frameworksz/Network/Library/Frameworksz/System/Library/Frameworksz~/libz/usr/local/libz/libz/usr/libc                 z    | t           j        } |                     |          }|g S |                    d          S )N:)osenvirongetsplit)envvarrvals      r   dyld_envr   $   s7    
{j773<<D|	::c??r   c                 H    | t           j        } |                     d          S )NDYLD_IMAGE_SUFFIX)r   r   r   r   s    r   dyld_image_suffixr   ,   s!    
{j77&'''r   c                 "    t          | d          S )NDYLD_FRAMEWORK_PATHr   r   s    r   dyld_framework_pathr    1   s    C.///r   c                 "    t          | d          S )NDYLD_LIBRARY_PATHr   r   s    r   dyld_library_pathr#   4   s    C,---r   c                 "    t          | d          S )NDYLD_FALLBACK_FRAMEWORK_PATHr   r   s    r   dyld_fallback_framework_pathr&   7   s    C7888r   c                 "    t          | d          S )NDYLD_FALLBACK_LIBRARY_PATHr   r   s    r   dyld_fallback_library_pathr)   :   s    C5666r   c                 H    t          |          }|| S | |fd} |            S )z>For a potential path iterator, add DYLD_IMAGE_SUFFIX semanticsNc              3      K   | D ]C}|                     d          r!|d t          d                    |z   dz   V  n||z   V  |V  Dd S )Nz.dylib)endswithlen)iteratorsuffixpaths      r   _injectz)dyld_image_suffix_search.<locals>._injectB   sx       	 	D}}X&& $?S]]N?+f4x?????Vm###JJJJ	 	r   )r   )r.   r   r/   r1   s       r   dyld_image_suffix_searchr2   =   s@    s##F~!&     799r   c              #   B  K   t          |           }|:t          |          D ]*}t          j                            ||d                   V  +t          |          D ]A}t          j                            |t          j                            |                     V  Bd S Nname)r   r    r   r0   joinr#   basename)r5   r   	frameworkr0   s       r   dyld_override_searchr9   K   s       t$$I',, 	8 	8D',,tYv%6777777 "#&& 9 9gll4!1!1$!7!78888889 9r   c              #      K   |                      d          r;|;t          j                            || t	          d          d                    V  d S d S d S )Nz@executable_path/)
startswithr   r0   r6   r-   )r5   executable_paths     r   dyld_executable_path_searchr=   \   sk       *++ M0Kgll?D5H1I1I1J1J,KLLLLLLLM M0K0Kr   c              #   X  K   | V  t          |           }|<t          |          }|D ]*}t          j                            ||d                   V  +t          |          }|D ]A}t          j                            |t          j                            |                     V  B|4|s2t          D ]*}t          j                            ||d                   V  +|sIt          D ]C}t          j                            |t          j                            |                     V  Bd S d S r4   )	r   r&   r   r0   r6   r)   r7   DEFAULT_FRAMEWORK_FALLBACKDEFAULT_LIBRARY_FALLBACK)r5   r   r8   fallback_framework_pathr0   fallback_library_paths         r   dyld_default_searchrC   c   sH     
JJJt$$I">s"C"C+ 	8 	8D',,tYv%67777776s;;% 9 9gll4!1!1$!7!7888888%<. 	8 	8D',,tYv%6777777  =, 	= 	=D',,tRW%5%5d%;%;<<<<<<= =	= 	=r   c           
      N   t          t          t          | |          t          | |          t	          | |                    |          D ]I}t
          j                            |          r|c S 	 t          |          r|c S :# t          $ r Y Fw xY wt          d| d          )z:
    Find a library or framework using dyld semantics
    zdylib z could not be found)r2   chainr9   r=   rC   r   r0   isfiler   r	   
ValueError)r5   r<   r   r0   s       r   r   r   y   s     )$T3//+D/BB#D#..* * 	    7>>$ 	KKK	/55 " 	 	 	D	 *ddd<
=
==s   0B
BBc                    d}	 t          | ||          S # t          $ r}|}Y d}~nd}~ww xY w|                     d          }|dk    rt          |           }| dz  } t          j                            | t          j                            | d|                             } 	 t          | ||          d}S # t          $ r |w xY w# d}w xY w)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   rG   rfindr-   r   r0   r6   r7   )fnr<   r   errore
fmwk_indexs         r   r   r      s    E_#FFFF   ,''JRWW

l	b"'**2kzk?;;	<	<B_#FFF      s(    
,',$B8 8CC Cr   )NN)__doc__r   ctypes.macholib.frameworkr   ctypes.macholib.dylibr   	itertools_ctypesr   ImportError__all__r0   
expanduserr?   r@   r   r   r    r#   r&   r)   r2   r9   r=   rC   r   r    r   r   <module>rX      s    
			 4 4 4 4 4 4 , , , , , ,    "8888888 " " "" " " " ""   G-..! 	  Gw
	   ( ( ( (
0 0 0 0. . . .9 9 9 97 7 7 7   9 9 9 9"M M M M= = = =,> > > >(     s    **