U
    f                     @   sb   d dl Z d dlZd dlZd dlZd dlmZmZ d dlZ	G dd de	j
jZdd Zd	ddZdS )
    N)PopenPIPEc                   @   s   e Zd ZdZdgZdd ZdS )
VirtualEnvz.envz--no-setuptoolsc                 O   sf   |  |d g|dd   }| jdd|}d|krTttj}d|krL|d= ||d< tj|f||S )Nr      utf-8)cwdencodingenv
PYTHONPATH)Zexerootdictosenviron
subprocessZcheck_output)selfcmdargskwargsr	    r   ;lib/python3.8/site-packages/setuptools/tests/environment.pyrun   s    	
zVirtualEnv.runN)__name__
__module____qualname__nameZcreate_optsr   r   r   r   r   r   
   s   r   c                 C   sL   t  }tjddtjD ]*}tj|| }t|tj	r|
| q|S )NPATH )setr   r   getsplitpathseppathjoinaccessX_OKadd)r   resultr!   filenamer   r   r   _which_dirs%   s    r(   c           	      C   s  |dkr(t  }tjD ]}tj| ||< q|dk	r8||d< |dk	rH||d< |dds~tdtd|d< tj|d |d< tj	dgt
|  } tjdk}z6t| tt||d	d
}t|trt| }| | }W n tk
r   Y dS X t|dr| }td|}|j|fS )z~
    Execution command for tests, separate from those used by the
    code directly to prevent accidental behavior issues
    Nr
   r   r   ZtarZgzipzsetup.pyZwin32r   )stdoutstderrshellr	   r   )r   r   decodeZNFC)r   r   r   r   r(   unionr    r"   sys
executablelistplatform_Popen_PIPE
isinstancetuplesliceZcommunicateOSErrorhasattrr,   unicodedataZ	normalize
returncode)	r   Zpypathr!   Zdata_streamr	   Zenvnamer+   procdatar   r   r   run_setup_py.   s>    

	
r=   )NNr   N)r   r.   r   r9   r   r2   r   r3   Zjaraco.envsZjaracoZenvsr   r(   r=   r   r   r   r   <module>   s   	