3
;p_                 @   s   d dl Z d dl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	Z	d dl
mZ d dlmZ dd Zdd	 Zd
d Zdd ZdS )    N)log)DistutilsError)easy_install)Wheelc             C   s(   t | tr| j S t | ttfs$t| S )z8Ensure find-links option end-up being a list of strings.)
isinstancestrsplittuplelistAssertionError)
find_links r   </tmp/pip-install-ofl94hr3/setuptools/setuptools/installer.py_fixup_find_links   s    
r   c             C   s   | j ddgi}|jd}|j  |jdd | jdj D  | jr|| jdd }d|krpt|d d | }d|f|d< | j }t|d	g|d
ddddd
d
dd}|j	  |j|S )zJFetch an egg needed for building.

    Legacy path using EasyInstall.
    script_argsr   c             s   s"   | ]\}}|dkr||fV  qdS )r   	site_dirs	index_urloptimizeallow_hostsN)r   r   r   r   r   r   r   ).0kvr   r   r   	<genexpr>   s    z*_legacy_fetch_build_egg.<locals>.<genexpr>Nr      setupxTF)
argsinstall_dirZexclude_scriptsZalways_copyZbuild_directoryeditableupgradeZmulti_versionZ	no_reportuser)
	__class__get_option_dictclearupdateitemsdependency_linksr   get_egg_cache_dirr   ensure_finalized)distreqZtmp_distoptslinksr   cmdr   r   r   _legacy_fetch_build_egg   s&    
r.   c          *   C   s  yt jd W n* t jk
r8   | jdtj t| |S X yt jd W n$ t jk
rl   | jdtj Y nX t|}| jd}d|krt	ddt
jksd	t
jkrd
}nd}dt
jkrd}nd|kr|d d }nd}d|krt|d d dd }ng }| jr|j| j t
jj| j }t j }x.t j|D ] }||kr6|j|r6|S q6W tj 2}	tjdddddd|	g}
|r|
jd |dk	r|
jd|f |dk	rx|D ]}|
jd|f qW |jr|
j|j n|
jt| ytj|
 W n4 tjk
r2 } zt	t||W Y dd}~X nX tt j t
jj!|	dd }t
jj!||j" }|j#| t j$|t
jj!|d}t j%j&||d} | S Q R X dS )zLFetch an egg needed for building.

    Use pip/wheel to fetch/build a wheel.pipzWARNING: The pip package is not available, falling back to EasyInstall for handling setup_requires/test_requires; this is deprecated and will be removed in a future version.wheelz,WARNING: The wheel package is not available.r   r   zQthe `allow-hosts` option is not supported when using pip to install requirements.Z	PIP_QUIETZPIP_VERBOSEFTZPIP_INDEX_URLNr   r   r   z-mz--disable-pip-version-checkz	--no-depsz-wz--quietz--index-urlz--find-linksz*.whlr   zEGG-INFO)metadata)'pkg_resourcesget_distributionDistributionNotFoundannouncer   WARNr.   strip_markerr"   r   osenvironr   r&   extendpathrealpathr'   Environmentfind_distributionscan_addtempfileTemporaryDirectorysys
executableappendurlr   
subprocess
check_callCalledProcessErrorr   globjoinegg_nameZinstall_as_eggPathMetadataDistributionfrom_filename)r)   r*   r+   quietr   r   Zeggs_direnvironmentZegg_distZtmpdirr-   linker0   dist_locationZdist_metadatar   r   r   fetch_build_egg6   sx    






 

rT   c             C   s   t jjt| } d| _| S )z
    Return a new requirement without the environment marker to avoid
    calling pip with something like `babel; extra == "i18n"`, which
    would always be ignored.
    N)r2   Requirementparser   marker)r*   r   r   r   r7      s    r7   )rI   r8   rF   rB   r@   	distutilsr   distutils.errorsr   r2   Zsetuptools.command.easy_installr   Zsetuptools.wheelr   r   r.   rT   r7   r   r   r   r   <module>   s    U