3
[                 @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ejeZG d	d
 d
eZG dd deZdS )z;Build Environment used for isolation during sdist building
    N)get_python_lib)	get_paths)RequirementVersionConflict
WorkingSet)call_subprocess)TempDirectory)open_spinnerc               @   sL   e Zd ZdZdd Zedd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )BuildEnvironmentzFCreates and manages an isolated environment to install build deps
    c             C   s   t dd| _| jj  d S )Nz	build-env)kind)r   	_temp_dircreate)self r   8/tmp/pip-install-65viz3iy/pip/pip/_internal/build_env.py__init__   s    zBuildEnvironment.__init__c             C   s   | j jS )N)r   path)r   r   r   r   r      s    zBuildEnvironment.pathc             C   s  t jjdd | _t jjdd | _t jjdd | _t jdkr>dnd}t|| j| jdd}|d }| jr~|t j	 | j t jd< n|t j	 t j
 t jd< td	| jd
}td| jd
}||kr|}n|t j	 | }| jr|t j	 | j t jd< n
|t jd< dt jd< | jS )NPATH
PYTHONPATHPYTHONNOUSERSITEntposix_prefix)baseplatbase)varsscriptsr   )plat_specificprefix   1)osenvironget	save_pathsave_pythonpathsave_nousersitenamer   r   pathsepdefpathr   )r   install_schemeinstall_dirsr   purelibplatliblib_dirsr   r   r   	__enter__   s,    

zBuildEnvironment.__enter__c             C   s0   dd }|d| j  |d| j |d| j d S )Nc             S   s&   |d krt jj| d  n
|t j| < d S )N)r    r!   pop)varname	old_valuer   r   r   restore_varC   s    z.BuildEnvironment.__exit__.<locals>.restore_varr   r   r   )r#   r$   r%   )r   exc_typeexc_valexc_tbr2   r   r   r   __exit__B   s    zBuildEnvironment.__exit__c             C   s   | j j  d S )N)r   cleanup)r   r   r   r   r7   M   s    zBuildEnvironment.cleanupc             C   s~   g }| l t tjd jtj}xN|D ]F}y"|jtj|dkrJ|j| W q& t	k
rj   |j| Y q&X q&W |S Q R X dS )zIReturn a list of the requirements from reqs that are not present
        r   N)
r   r    r!   splitr'   findr   parseappendr   )r   reqsmissingwsreqr   r   r   missing_requirementsP   s    
z%BuildEnvironment.missing_requirementsc             C   sb  t jdddddd| jdg	}tj tjkr2|jd xBdD ]:}t|j	|}|j
d|jdd djt|phdhf q8W |jr|j
d|jd g x0|jdd  D ]}|j
d|g qW n
|jd x|jD ]}|j
d|g qW x"|jD ]\}	}
}	|j
d|
g qW |jr|jd |jr(|jd |jd |j
| t|}t|d|d W d Q R X d S )Nz-mpipinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v	no_binaryonly_binaryz--_-,z:none:z-ir   r   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--process-dependency-linksF)show_stdoutspinner)rC   rD   )sys
executabler   loggergetEffectiveLevelloggingDEBUGr;   getattrformat_controlextendreplacejoinsorted
index_urls
find_linkssecure_originsallow_all_prereleasesprocess_dependency_linksr	   r   )r   finderrequirementsmessageargsrQ   formatsZextra_indexlinkrE   hostrI   r   r   r   install_requirements^   s2    







z%BuildEnvironment.install_requirementsN)__name__
__module____qualname____doc__r   propertyr   r.   r6   r7   r@   rb   r   r   r   r   r
      s   #r
   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )NoOpBuildEnvironmentz5A no-op drop-in replacement for BuildEnvironment
    c             C   s   d S )Nr   )r   r   r   r   r      s    zNoOpBuildEnvironment.__init__c             C   s   d S )Nr   )r   r   r   r   r.      s    zNoOpBuildEnvironment.__enter__c             C   s   d S )Nr   )r   r3   r4   r5   r   r   r   r6      s    zNoOpBuildEnvironment.__exit__c             C   s   d S )Nr   )r   r   r   r   r7      s    zNoOpBuildEnvironment.cleanupc             C   s
   t  d S )N)NotImplementedError)r   r[   r\   r]   r   r   r   rb      s    z)NoOpBuildEnvironment.install_requirementsN)	rc   rd   re   rf   r   r.   r6   r7   rb   r   r   r   r   rh   }   s   rh   )rf   rN   r    rJ   distutils.sysconfigr   	sysconfigr   Zpip._vendor.pkg_resourcesr   r   r   pip._internal.utils.miscr   pip._internal.utils.temp_dirr   pip._internal.utils.uir	   	getLoggerrc   rL   objectr
   rh   r   r   r   r   <module>   s   
j