U
    ™P^=  ã                   @   sì   d Z ddlZddlZddlZddlmZmZ ddlm	Z	m
Z ddlZddlmZ ddlZddlZddlmZ ddlZddlmZ dd	lmZ dd
lmZ e e¡Zdd„ Zdd„ Zdd„ Zddd„Z dddddœZ!dd„ Z"edkrèe ƒ  dS )zHCheck a project and backend by attempting to build using PEP 517 hooks.
é    N)ÚisfileÚjoin)ÚTomlDecodeErrorÚload)ÚCalledProcessError)Úmkdtempé   )Úenable_colourful_output)ÚBuildEnvironment)ÚPep517HookCallerc              
   C   s  t ƒ ö}z| |¡ t d¡ W n* tk
rL   t d¡ Y W 5 Q R £ dS X z|  i ¡}t d|¡ W n. tk
r–   tjddd Y W 5 Q R £ dS X z| |¡ t d¡ W n* tk
rÚ   t d	¡ Y W 5 Q R £ dS X tƒ }t d
|¡ zôz|  |i ¡}t d|¡ W n4 tk
r@   tjddd Y W ¢²W 5 Q R £ dS X | d¡slt d|¡ W ¢†W 5 Q R £ dS t||ƒ}t|ƒrŽt d|¡ nt d|¡ W ¢FW 5 Q R £ dS t |¡rÄt d¡ nt d¡ W ¢W 5 Q R £ dS W 5 t	 
|¡ X W 5 Q R £ dS Q R X d S )Nú#Installed static build dependenciesú+Failed to install static build dependenciesFúGot build requires: %sú'Failure in get_requires_for_build_sdistT©Úexc_infoú$Installed dynamic build dependenciesú,Failed to install dynamic build dependencieszTrying to build sdist in %szbuild_sdist returned %rzFailure in build_sdistz.tar.gzz*Filename %s doesn't have .tar.gz extensionúOutput file %s existsúOutput file %s does not existzOutput file is a tar filezOutput file is not a tar file)r
   Úpip_installÚlogÚinfor   ÚerrorÚget_requires_for_build_sdistÚ	Exceptionr   ÚshutilÚrmtreeÚbuild_sdistÚendswithÚpjoinr   ÚtarfileÚ
is_tarfile©ÚhooksZbuild_sys_requiresÚenvÚreqsÚtdÚfilenameÚpath© r*   ú9/tmp/pip-install-220asx0h/pip/pip/_vendor/pep517/check.pyÚcheck_build_sdist   sZ    





 ÿ


r,   c              
   C   s  t ƒ ö}z| |¡ t d¡ W n* tk
rL   t d¡ Y W 5 Q R £ dS X z|  i ¡}t d|¡ W n. tk
r–   tjddd Y W 5 Q R £ dS X z| |¡ t d¡ W n* tk
rÚ   t d	¡ Y W 5 Q R £ dS X tƒ }t d
|¡ zôz|  |i ¡}t d|¡ W n4 tk
r@   tjddd Y W ¢²W 5 Q R £ dS X | d¡slt d|¡ W ¢†W 5 Q R £ dS t||ƒ}t|ƒrŽt d|¡ nt d|¡ W ¢FW 5 Q R £ dS t |¡rÄt d¡ nt d¡ W ¢W 5 Q R £ dS W 5 t	 
|¡ X W 5 Q R £ dS Q R X d S )Nr   r   Fr   r   Tr   r   r   zTrying to build wheel in %szbuild_wheel returned %rzFailure in build_wheelz.whlz'Filename %s doesn't have .whl extensionr   r   zOutput file is a zip filezOutput file is not a zip file)r
   r   r   r   r   r   Úget_requires_for_build_wheelr   r   r   r   Úbuild_wheelr   r    r   ÚzipfileÚ
is_zipfiler#   r*   r*   r+   Úcheck_build_wheelO   sT    








r1   c              	   C   sâ   t | dƒ}t|ƒrt d¡ nt d¡ dS zLt|ƒ}t|ƒ}W 5 Q R X |d }|d }|d }| d¡}t d	¡ W n( tt	fk
r    tjd
dd Y dS X t
| ||ƒ}t||ƒ}	t||ƒ}
|	sÐt d¡ |
sÞt d¡ |	S )Nzpyproject.tomlzFound pyproject.tomlzMissing pyproject.tomlFzbuild-systemÚrequireszbuild-backendzbackend-pathzLoaded pyproject.tomlzInvalid pyproject.tomlTr   z%Sdist checks failed; scroll up to seezWheel checks failed)r    r   r   r   r   ÚopenÚ	toml_loadÚgetr   ÚKeyErrorr   r,   r1   Úwarning)Ú
source_dirÚ	pyprojectÚfZpyproject_dataZbuildsysr2   ÚbackendZbackend_pathr$   Zsdist_okZwheel_okr*   r*   r+   Úcheck‡   s0    







r<   c                 C   s`   t  ¡ }|jddd | | ¡}tƒ  t|jƒ}|rDttddƒƒ nttddƒƒ t	 
d¡ d S )	Nr8   z%A directory containing pyproject.toml)ÚhelpzChecks passedÚgreenzChecks failedÚredr   )ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr	   r<   r8   ÚprintÚansiÚsysÚexit)ÚargvZapÚargsÚokr*   r*   r+   Úmain©   s    þ

rK   z[0mz[1mz[31mz[32m)ÚresetZboldr?   r>   c                 C   s8   t jdkr,tj ¡ r,t| t| ƒ td  S t| ƒS d S )NÚntrL   )ÚosÚnamerF   ÚstdoutÚisattyÚ
ansi_codesÚstr)ÚsÚattrr*   r*   r+   rE   Ã   s    rE   Ú__main__)N)#Ú__doc__r@   ÚloggingrN   Úos.pathr   r   r    Ztomlr   r   r4   r   Ú
subprocessr   rF   r!   Útempfiler   r/   Zcolorlogr	   Zenvbuildr
   Úwrappersr   Ú	getLoggerÚ__name__r   r,   r1   r<   rK   rR   rE   r*   r*   r*   r+   Ú<module>   s6   
98"
ü