U
    «ÃT_  ã                   @   sæ   d dl m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
 d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZ erÈd dlmZ d dlmZm Z  e !e"¡Z#G dd„ de
ƒZ$dS )é    )Úabsolute_importN)Ú
WheelCache)Ú
cmdoptions)ÚRequirementCommand)ÚCommandErrorÚPreviousBuildDirError)ÚRequirementSet)Úget_requirement_tracker)Ú
ensure_dirÚnormalize_path)ÚTempDirectory)ÚMYPY_CHECK_RUNNING)ÚbuildÚshould_build_for_wheel_command)ÚValues)ÚAnyÚListc                       s,   e Zd ZdZdZ‡ fdd„Zdd„ Z‡  ZS )ÚWheelCommanda´  
    Build Wheel archives for your requirements and dependencies.

    Wheel is a built-package format, and offers the advantage of not
    recompiling your software during every install. For more details, see the
    wheel docs: https://wheel.readthedocs.io/en/latest/

    Requirements: setuptools>=0.8, and wheel.

    'pip wheel' uses the bdist_wheel setuptools extension from the wheel
    package to build individual wheels.

    zõ
      %prog [options] <requirement specifier> ...
      %prog [options] -r <requirements file> ...
      %prog [options] [-e] <vcs project url> ...
      %prog [options] [-e] <local project path> ...
      %prog [options] <archive url/path> ...c                    sz  t t| ƒj||Ž | j}|jddddtjdd� | t ¡ ¡ | t 	¡ ¡ | t 
¡ ¡ |jddd	d
dd� | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ |jddd
d	dd� |jddddd� | t ¡ ¡ | t ¡ ¡ t tj| j¡}| j d|¡ | j d|¡ d S )Nz-wz--wheel-dirÚ	wheel_dirÚdirzLBuild wheels into <dir>, where the default is the current working directory.)ÚdestÚmetavarÚdefaultÚhelpz--build-optionÚbuild_optionsÚoptionsÚappendz9Extra arguments to be supplied to 'setup.py bdist_wheel'.)r   r   Úactionr   z--global-optionÚglobal_optionszZExtra global options to be supplied to the setup.py call before the 'bdist_wheel' command.)r   r   r   r   z--preÚ
store_trueFzYInclude pre-release and development versions. By default, pip only finds stable versions.)r   r   r   r   )Úsuperr   Ú__init__Úcmd_optsÚ
add_optionÚosÚcurdirr   Ú	no_binaryÚonly_binaryÚprefer_binaryÚno_build_isolationÚ
use_pep517Úno_use_pep517ÚconstraintsÚeditableÚrequirementsÚsrcÚignore_requires_pythonÚno_depsÚ	build_dirÚprogress_barÚno_cleanÚrequire_hashesÚmake_option_groupÚindex_groupÚparserÚinsert_option_group)ÚselfÚargsÚkwr"   Ú
index_opts©Ú	__class__© ú@/tmp/pip-unpacked-wheel-8u7dkzi1/pip/_internal/commands/wheel.pyr!   5   sh     ûûûüþzWheelCommand.__init__c                 C   s   t  |¡ |  |¡}|  ||¡}|jp*|j }t|j|jƒ}t	|j
ƒ|_
t|j
ƒ tƒ ��œ}t|j|dd���~}tƒ }	�zT�z.|  |	|||||¡ | j||||||j
dd�}
| j|
||||j|jd�}|  |¡ | |	¡ dd„ |	j ¡ D ƒ}t|||jpüg |j�pg d�\}}|D ]|}|j�r*|jj�s.t‚|j �s:t‚zt! "|j |j
¡ W n> t#k
�rŒ } zt$ %d	|j&|¡ | '|¡ W 5 d }~X Y nX �qt(|ƒd
k�r¨t)dƒ‚W n t*k
�rÈ   d|_‚ Y nX W 5 |j�sæ|	 ¡  | ¡  X W 5 Q R X W 5 Q R X d S )NÚwheel)ÚdeleteÚkindF)Útemp_build_dirr   Úreq_trackerÚsessionÚfinderÚwheel_download_dirÚuse_user_site)ÚpreparerrH   r   Úwheel_cacher0   r*   c                 S   s   g | ]}t |ƒr|‘qS r@   )r   )Ú.0Úrr@   r@   rA   Ú
<listcomp>£   s   ÿz$WheelCommand.run.<locals>.<listcomp>)rL   r   r   z Building wheel for %s failed: %sr   z"Failed to build one or more wheelsT)+r   Úcheck_install_build_globalÚget_default_sessionÚ_build_package_finderr4   r2   r   Ú	cache_dirÚformat_controlr   r   r
   r	   r   r   Úcleanup_filesÚcleanupÚpopulate_requirement_setÚmake_requirement_preparerÚmake_resolverr0   r*   Útrace_basic_infoÚresolver.   Úvaluesr   r   r   ÚlinkÚis_wheelÚAssertionErrorÚlocal_file_pathÚshutilÚcopyÚOSErrorÚloggerÚwarningÚnamer   Úlenr   r   )r:   r   r;   rG   rH   Úbuild_deleterL   rF   Ú	directoryÚrequirement_setrK   ÚresolverÚreqs_to_buildÚbuild_successesÚbuild_failuresÚreqÚer@   r@   rA   Úruns   s’    


  ÿ    þù
ú	

ÿ
ü
 þ ÿzWheelCommand.run)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusager!   rq   Ú__classcell__r@   r@   r>   rA   r      s   >r   )%Ú
__future__r   Úloggingr$   ra   Úpip._internal.cacher   Zpip._internal.clir   Úpip._internal.cli.req_commandr   Úpip._internal.exceptionsr   r   Zpip._internal.reqr   Úpip._internal.req.req_trackerr	   Úpip._internal.utils.miscr
   r   Úpip._internal.utils.temp_dirr   Úpip._internal.utils.typingr   Úpip._internal.wheel_builderr   r   Úoptparser   Útypingr   r   Ú	getLoggerrr   rd   r   r@   r@   r@   rA   Ú<module>   s$   
