o
    Ee	                  	   @   s&  d Z ddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
 G dd deZded	ee fd
dZe ded	ee fddZded	ee fddZedkrddlZe ZedsdJ dede edeej eddd eeddeddd D ]
Zeedd qdS dS )zPEP 656 support.

This module implements logic to detect if the currently running Python is
linked against musl, and what musl version is used.
    N)Iterator
NamedTupleOptional   )ELFFilec                   @   s   e Zd ZU eed< eed< dS )_MuslVersionmajorminorN)__name__
__module____qualname__int__annotations__ r   r   h/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/setuptools/_vendor/packaging/_musllinux.pyr      s   
 r   outputreturnc                 C   sx   dd dd |   D D }t|dk s|d d d dkr d S td	|d
 }|s,d S tt|d
t|ddS )Nc                 S   s   g | ]}|r|qS r   r   .0nr   r   r   
<listcomp>   s    z'_parse_musl_version.<locals>.<listcomp>c                 s   s    | ]}|  V  qd S )N)stripr   r   r   r   	<genexpr>   s    z&_parse_musl_version.<locals>.<genexpr>   r      muslzVersion (\d+)\.(\d+)r   )r   r	   )
splitlineslenrematchr   r   group)r   linesmr   r   r   _parse_musl_version   s     r#   
executablec              
   C   s   zt | d}t|j}W d   n1 sw   Y  W n tttfy)   Y dS w |du s2d|vr4dS tj|gtjdd}t	|j
S )a`  Detect currently-running musl runtime version.

    This is done by checking the specified executable's dynamic linking
    information, and invoking the loader to parse its output for a version
    string. If the loader is musl, the output would be something like::

        musl libc (x86_64)
        Version 1.2.2
        Dynamic Program Loader
    rbNr   T)stderruniversal_newlines)openr   interpreterOSError	TypeError
ValueError
subprocessrunPIPEr#   r&   )r$   fldprocr   r   r   _get_musl_version   s   
r3   archc                 c   sJ    t tj}|du rdS t|jddD ]}d|j d| d|  V  qdS )aT  Generate musllinux tags compatible to the current platform.

    :param arch: Should be the part of platform tag after the ``linux_``
        prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a
        prerequisite for the current platform to be musllinux-compatible.

    :returns: An iterator of compatible musllinux tags.
    N
musllinux__)r3   sysr$   ranger	   r   )r4   sys_muslr	   r   r   r   platform_tags6   s   
	r;   __main__zlinux-z	not linuxzplat:zmusl:ztags: )endz[.-]r7   -r5   z
      )__doc__	functoolsr   r-   r8   typingr   r   r   _elffiler   r   strr#   	lru_cacher3   r;   r
   	sysconfigget_platformplat
startswithprintr$   subsplittr   r   r   r   <module>   s.    

"	