3
\$ � @ s> d Z ddlZdgZejd�Zdd� Zdd� Zedkr:e� dS ) z!
Generic dylib path manipulation
� N�
dylib_infoz�(?x)
(?P^.*)(?:^|/)
(?P
(?P\w+?)
(?:\.(?P[^._]+))?
(?:_(?P[^._]+))?
\.dylib$
)
c C s t j| �}|sdS |j� S )a1
A dylib name can take one of the following four forms:
Location/Name.SomeVersion_Suffix.dylib
Location/Name.SomeVersion.dylib
Location/Name_Suffix.dylib
Location/Name.dylib
returns None if not found or a mapping equivalent to:
dict(
location='Location',
name='Name.SomeVersion_Suffix.dylib',
shortname='Name',
version='SomeVersion',
suffix='Suffix',
)
Note that SomeVersion and Suffix are optional and may be None
if not present.
N)�DYLIB_RE�match� groupdict)�filenameZis_dylib� r �-/usr/lib64/python3.6/ctypes/macholib/dylib.pyr s
c C s� ddd�} t d�d kst�t d�d ks*t�t d�| ddd�ksBt�t d �| dd
ddd�ks^t�t d
�| dddd�ksxt�t d�| dddd�ks�t�t d�| ddddd�ks�t�d S )Nc S s t | ||||d�S )N)�location�name� shortname�version�suffix)�dict)r r
r r r
r r r �d. s ztest_dylib_info..dzcompletely/invalidzcompletely/invalide_debugzP/Foo.dylib�Pz Foo.dylibZFoozP/Foo_debug.dylibzFoo_debug.dylib�debug)r
z
P/Foo.A.dylibzFoo.A.dylib�AzP/Foo_debug.A.dylibzFoo_debug.A.dylibZ Foo_debugzP/Foo.A_debug.dylibzFoo.A_debug.dylib)NNNNN)r �AssertionError)r r r r �test_dylib_info- s
r �__main__)�__doc__�re�__all__�compiler r r �__name__r r r r � s