YfE@sddZddlZddlmZddlmZddlTdddd gZejj d d d d gZ ejj ddddgZ ddZ dddZ dddZdddZdddZdddZdddZdd d!Zdd"d#Zdd$d%Zddd&dZddd'dZd(d)Zed*kr`edS)+z dyld emulation N)framework_info) dylib_info)* dyld_findframework_findrrz~/Library/Frameworksz/Library/Frameworksz/Network/Library/Frameworksz/System/Library/Frameworksz~/libz/usr/local/libz/libz/usr/libcCsA|dkrtj}|j|}|dkr4gS|jdS)N:)osenvirongetsplit)envvarZrvalr9/opt/alt/python35/lib64/python3.5/ctypes/macholib/dyld.pydyld_envs    rcCs"|dkrtj}|jdS)NZDYLD_IMAGE_SUFFIX)rr r )r rrrdyld_image_suffix's  rcCs t|dS)NZDYLD_FRAMEWORK_PATH)r)r rrrdyld_framework_path,srcCs t|dS)NZDYLD_LIBRARY_PATH)r)r rrrdyld_library_path/srcCs t|dS)NZDYLD_FALLBACK_FRAMEWORK_PATH)r)r rrrdyld_fallback_framework_path2srcCs t|dS)NZDYLD_FALLBACK_LIBRARY_PATH)r)r rrrdyld_fallback_library_path5srcCs5t|}|dkr|S||dd}|S)z>For a potential path iterator, add DYLD_IMAGE_SUFFIX semanticsNcssSxL|D]D}|jdr=|dtd |dVn ||V|VqWdS)Nz.dylib)endswithlen)iteratorsuffixpathrrr_inject=s  ! z)dyld_image_suffix_search.._inject)r)rr rrrrrdyld_image_suffix_search8s   rccst|}|dk rGx,t|D]}tjj||dVq%Wx4t|D]&}tjj|tjj|VqTWdS)Nname)rrrrjoinrbasename)rr frameworkrrrrdyld_override_searchFs   r!ccsC|jdr?|dk r?tjj||tddVdS)Nz@executable_path/) startswithrrrr)rexecutable_pathrrrdyld_executable_path_searchWsr$ccs|Vt|}|dk rRt|}x&|D]}tjj||dVq0Wt|}x.|D]&}tjj|tjj|VqeW|dk r| rx&tD]}tjj||dVqW|sx.tD]&}tjj|tjj|VqWdS)Nr) rrrrrrrDEFAULT_FRAMEWORK_FALLBACKDEFAULT_LIBRARY_FALLBACK)rr r Zfallback_framework_pathrZfallback_library_pathrrrdyld_default_search^s      $  r'cCsnxTttt||t||t|||D]}tjj|r7|Sq7Wtd|fdS)z: Find a library or framework using dyld semantics zdylib %s could not be foundN) rchainr!r$r'rrisfile ValueError)rr#r rrrrrts    cCsd}yt|d|d|SWn+tk rM}z |}WYdd}~XnX|jd}|dkrt|}|d7}tjj|tjj|d|}yt|d|d|SWntk r|YnXdS)z Find a framework using dyld semantics in a very loose manner. Will take input such as: Python Python.framework Python.framework/Versions/Current Nr#r z .framework)rr*rfindrrrrr)fnr#r erroreZ fmwk_indexrrrrs    + cCs:i}tddksttddks6tdS)NzlibSystem.dylibz/usr/lib/libSystem.dylibzSystem.framework/Systemz2/System/Library/Frameworks/System.framework/System)rAssertionError)r rrrtest_dyld_findsr2__main__)__doc__rZctypes.macholib.frameworkrZctypes.macholib.dylibr itertools__all__r expanduserr%r&rrrrrrrr!r$r'rrr2__name__rrrrs: