B
    Kkd
                 @   s   d 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ZddlZddl	Z	ddl
mZ ddlmZ eeZejdd Zd	d
 Zdd ZdddZe Zejddd ejddddd ejddddd ejdddd dd Zedkree  dS ) z%Build a project using PEP 517 hooks.
    N)pytoml   )BuildEnvironment)Pep517HookCallerc           	   c   s$   t  } z
| V  W d t|  X d S )N)tempfilemkdtempshutilrmtree)td r   9/tmp/pip-install-gxxfd9b7/pip/pip/_vendor/pep517/build.pytempdir   s    
r   c          
   C   s   dj f t }t| |}|i }td| || td t b}td|| dj f t }t| |}	|	|i }
tj	||
}t
|tj	|tj|
 W d Q R X d S )Nzget_requires_for_build_{dist}zGot build requires: %sz$Installed dynamic build dependencieszTrying to build %s in %szbuild_{dist})formatlocalsgetattrloginfopip_installr   ospathjoinr   movebasename)hooksenvdistdestZget_requires_nameget_requiresreqsr
   Z
build_namebuildfilenamesourcer   r   r   	_do_build   s    




r"   c           
   O   sB   yt j| |S  tk
r< } z|jtjkr, W dd}~X Y nX dS )zWLike `mkdir`, but does not raise an exception if the
    directory already exists.
    N)r   mkdirOSErrorerrnoEEXIST)argskwargsexcr   r   r   mkdir_p-   s
    r*   c          	   C   s   t j| d}t j| |pd}t| t|}t|}W d Q R X |d }|d }|d }t| |}	t }
|
	| t
|	|
|| W d Q R X d S )Nzpyproject.tomlr   zbuild-systemrequireszbuild-backend)r   r   r   r*   openr   loadr   r   r   r"   )
source_dirr   r   	pyprojectfZpyproject_dataZbuildsysr+   backendr   r   r   r   r   r   8   s    


r   r.   z%A directory containing pyproject.toml)helpz--binaryz-b
store_trueF)actiondefaultz--sourcez-sz	--out-dirz-oz>Destination in which to save the builds relative to source dirc             C   sT   t td | js| jsdnd | js$| js(dnd f}x|D ]}t| j|| j q8W d S )Nsdistwheel)listfilterr!   binaryr   r.   Zout_dir)r'   distsr   r   r   r   main`   s
    
r<   __main__)N)__doc__argparseloggingr   
contextlibpip._vendorr   r   r%   r   Zenvbuildr   wrappersr   	getLogger__name__r   contextmanagerr   r"   r*   r   ArgumentParserparseradd_argumentr<   
parse_argsr   r   r   r   <module>   sB   
	
