U
    >h                     @   sp   d dl Z d dlZd dlmZmZ ee dddZee dddZee ddd	Zeeef dd
dZ	dS )    N)OptionalTuple)returnc                   C   s   t  p
t S )z9Returns glibc version string, or None if not using glibc.)glibc_version_string_confstrglibc_version_string_ctypes r   r   =/tmp/pip-unpacked-wheel-zvxvnq2j/pip/_internal/utils/glibc.pyglibc_version_string   s    r	   c               
   C   sX   t jdkrdS z(td} | dkr(W dS |  \}}W n tttfk
rR   Y dS X |S )z@Primary implementation of glibc_version_string using os.confstr.win32NCS_GNU_LIBC_VERSION)sysplatformosconfstrsplitAttributeErrorOSError
ValueError)Zgnu_libc_version_versionr   r   r   r      s    

r   c                  C   s   zddl } W n tk
r"   Y dS X z| d}W n tk
rH   Y dS X z
|j}W n tk
rj   Y dS X | j|_| }t|t	s|
d}|S )z=Fallback implementation of glibc_version_string using ctypes.r   Nascii)ctypesImportErrorCDLLr   gnu_get_libc_versionr   c_char_prestype
isinstancestrdecode)r   process_namespacer   version_strr   r   r   r      s"    


r   c                  C   s   t  } | dkrdS d| fS dS )zTry to determine the glibc version

    Returns a tuple of strings (lib, version) which default to empty strings
    in case the lookup fails.
    N) r"   glibc)r	   )glibc_versionr   r   r   libc_ver[   s    r%   )
r   r   typingr   r   r   r	   r   r   r%   r   r   r   r   <module>   s   <