a
XC?h� � @ s> d Z ddlZdgZe�d�Zdd� Zdd� Zedkr:e� dS ) z%
Generic framework path manipulation
� N�framework_infoz�(?x)
(?P^.*)(?:^|/)
(?P
(?P\w+).framework/
(?:Versions/(?P[^/]+)/)?
(?P=shortname)
(?:_(?P[^_]+))?
)$
c C s t �| �}|sdS |�� S )a}
A framework name can take one of the following four forms:
Location/Name.framework/Versions/SomeVersion/Name_Suffix
Location/Name.framework/Versions/SomeVersion/Name
Location/Name.framework/Name_Suffix
Location/Name.framework/Name
returns None if not found, or a mapping equivalent to:
dict(
location='Location',
name='Name.framework/Versions/SomeVersion/Name_Suffix',
shortname='Name',
version='SomeVersion',
suffix='Suffix',
)
Note that SomeVersion and Suffix are optional and may be None
if not present
N)�STRICT_FRAMEWORK_RE�match� groupdict)�filenameZis_framework� r �>/opt/alt/python39/lib64/python3.9/ctypes/macholib/framework.pyr s
c C s� ddd�} t d�d u sJ �t d�d u s*J �t d�d u s:J �t d�d u sJJ �t d�| dd d
�ksbJ �t d�| ddd
d
d�ks~J �t d�d u s�J �t d�d u s�J �t d�| ddd
d�ks�J �t d�| ddd
dd
�ks�J �d S )Nc S s t | ||||d�S )N��location�nameZ shortname�version�suffix)�dictr r r r �d- s �ztest_framework_info..dzcompletely/invalidzcompletely/invalid/_debugz
P/F.frameworkzP/F.framework/_debugzP/F.framework/F�Pz
F.framework/F�FzP/F.framework/F_debugzF.framework/F_debug�debug)r
zP/F.framework/VersionszP/F.framework/Versions/AzP/F.framework/Versions/A/FzF.framework/Versions/A/F�Az P/F.framework/Versions/A/F_debugzF.framework/Versions/A/F_debug)NNNNN)r )r r r r �test_framework_info, s
r �__main__)�__doc__�re�__all__�compiler r r �__name__r r r r � s