3
\ @ s> d Z ddlZdgZejdZdd Zdd Zedkr:e dS ) z%
Generic framework path manipulation
Nframework_infoz(?x)
(?P^.*)(?:^|/)
(?P
(?P\w+).framework/
(?:Versions/(?P[^/]+)/)?
(?P=shortname)
(?:_(?P[^_]+))?
)$
c C s t j| }|sdS |j 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_REmatch groupdict)filenameZis_framework r 1/usr/lib64/python3.6/ctypes/macholib/framework.pyr s
c C s ddd} t dd kstt dd ks*tt dd ks:tt dd ksJtt d| dd d
ksbtt d| ddd
d
dks~tt dd kstt dd kstt d| ddd
dkstt d| ddd
dd
kstd S )Nc S s t | ||||dS )N)locationname shortnameversionsuffix)dict)r r
r r r
r r r d- s ztest_framework_info..dzcompletely/invalidzcompletely/invalid/_debugz
P/F.frameworkzP/F.framework/_debugzP/F.framework/FPz
F.framework/FFzP/F.framework/F_debugzF.framework/F_debugdebug)r
zP/F.framework/VersionszP/F.framework/Versions/AzP/F.framework/Versions/A/FzF.framework/Versions/A/FAz P/F.framework/Versions/A/F_debugzF.framework/Versions/A/F_debug)NNNNN)r AssertionError)r r r r test_framework_info, s
r __main__)__doc__re__all__compiler r r __name__r r r r s