a XC?h��@s>dZddlZdgZe�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[^_]+))? )$ cCst�|�}|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)�filenameZ is_framework�r�>/opt/alt/python39/lib64/python3.9/ctypes/macholib/framework.pyrs cCs�ddd�}td�dusJ�td�dus*J�td�dus:J�td�dusJJ�td�|dd d �ksbJ�td �|dd d d d�ks~J�td�dus�J�td�dus�J�td�|ddd d�ks�J�td�|ddd dd �ks�J�dS)NcSst|||||d�S)N��location�nameZ shortname�version�suffix)�dictr 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)rrrr�test_framework_info,s r�__main__)�__doc__�re�__all__�compilerrr�__name__rrrr�s