3 \��@s>dZddlZdgZejd�Zdd�Zdd�Zedkr:e�dS) z% Generic framework path manipulation �N�framework_infoz�(?x) (?P^.*)(?:^|/) (?P (?P\w+).framework/ (?:Versions/(?P[^/]+)/)? (?P=shortname) (?:_(?P[^_]+))? )$ cCstj|�}|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_RE�match� groupdict)�filenameZ is_framework�r�1/usr/lib64/python3.6/ctypes/macholib/framework.pyrs cCs�ddd�}td�dkst�td�dks*t�td�dks:t�td�dksJt�td�|dd d �ksbt�td �|dd d d d�ks~t�td�dks�t�td�dks�t�td�|ddd d�ks�t�td�|ddd dd �ks�t�dS)NcSst|||||d�S)N)�location�name� shortname�version�suffix)�dict)r r r r r rrr�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�AssertionError)rrrr�test_framework_info,s r�__main__)�__doc__�re�__all__�compilerrr�__name__rrrr�s