U ��.e-�@sxddlmZddlZddlZddlZddlmZerDddlmZm Z dd�Z dd�Z d d �Z d d �Z d d�Zdd�ZdS)�)�absolute_importN)�MYPY_CHECK_RUNNING)�Optional�TuplecCs t�p t�S)z9Returns glibc version string, or None if not using glibc.)�glibc_version_string_confstr�glibc_version_string_ctypes�rr�=/usr/lib/python3.8/site-packages/pip/_internal/utils/glibc.py�glibc_version_stringsr c Cs8zt�d���\}}Wntttfk r2YdSX|S)z@Primary implementation of glibc_version_string using os.confstr.�CS_GNU_LIBC_VERSIONN)�os�confstr�split�AttributeError�OSError� ValueError)�_�versionrrr rs rcCsvz ddl}Wntk r"YdSX|�d�}z |j}Wntk rNYdSX|j|_|�}t|t�sr|� d�}|S)z=Fallback implementation of glibc_version_string using ctypes.rN�ascii) �ctypes� ImportErrorZCDLL�gnu_get_libc_versionrZc_char_pZrestype� isinstance�str�decode)rZprocess_namespacer� version_strrrr r&s     rcCsHt�d|�}|s$t�d|t�dSt|�d��|koFt|�d��|kS)Nz$(?P[0-9]+)\.(?P[0-9]+)z=Expected glibc version with 2 components major.minor, got: %sF�major�minor)�re�match�warnings�warn�RuntimeWarning�int�group)r�required_major� minimum_minor�mrrr �check_glibc_versionFs ���r(cCst�}|dkrdSt|||�S)NF)r r()r%r&rrrr �have_compatible_glibcWsr)cCst�}|dkrdSd|fSdS)z�Try to determine the glibc version Returns a tuple of strings (lib, version) which default to empty strings in case the lookup fails. N)�r*Zglibc)r )Z glibc_versionrrr �libc_verpsr+)Z __future__rr rr Zpip._internal.utils.typingr�typingrrr rrr(r)r+rrrr �s