JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr i f+@sgdZddlZddlmZddlmZddlTdddd gZejj d d d d gZ ejj ddddgZ ddZ dddZ dddZdddZdddZdddZdddZdd d!Zdd"d#Zdd$d%Zddd&dZddd'dZd(d)Zed*krcendS)+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/libcCsD|dkrtj}n|j|}|dkr7gS|jdS)N:)osenvirongetsplit)envvarZrvalr9/opt/alt/python34/lib64/python3.4/ctypes/macholib/dyld.pydyld_envs    rcCs%|dkrtj}n|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 rJx/t|D]}tjj||dVq%Wnx4t|D]&}tjj|tjj|VqWWdS)Nname)rrrrjoinrbasename)rr frameworkrrrrdyld_override_searchFs   r!ccsF|jdrB|dk rBtjj||tddVndS)Nz@executable_path/) startswithrrrr)rexecutable_pathrrrdyld_executable_path_searchWsr$ccs|Vt|}|dk rUt|}x)|D]}tjj||dVq0Wnt|}x.|D]&}tjj|tjj|VqhW|dk r| rx)tD]}tjj||dVqWn|s x1tD]&}tjj|tjj|VqWndS)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    cCsyt|d|d|SWn%tk rA}zWYdd}~XnX|jd}|dkrvt|}|d7}ntjj|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 r#r Nz .framework)rr*rfindrrrrr)fnr#r eZ fmwk_indexrrrrs    + cCs i}dS)Nr)r rrrtest_dyld_findsr0__main__)__doc__rZctypes.macholib.frameworkrZctypes.macholib.dylibr itertools__all__r expanduserr%r&rrrrrrrr!r$r'rrr0__name__rrrrs: