
0c@_                 @   sv  d  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 m Z d d l	 m
 Z
 d d l m Z m Z d d l m Z e j e  Z d	 d
   Z d d   Z d d   Z d d   Z d d d d  Z e j   Z e j d d d e j d d d d d d e j d d d d d d e j d d d d  d! d"   Z e d# k rre e j    d S)$z%Build a project using PEP 517 hooks.
    N)toml   )BuildEnvironment)Pep517HookCaller)tempdirmkdir_p)FileNotFoundErrorc             C   sJ   d d h } | t  |   k sF d j d | t  |    } t |   d S)z7
    Ensure build system has the requisite fields.
    requireszbuild-backendz"Missing required fields: {missing}missingN)setformat
ValueError)systemrequiredmessage r   7/tmp/pip-build-jynh7p1z/pip/pip/_vendor/pep517/build.pyvalidate_system   s
    	r   c          	   C   sB   t  j j |  d  } t |   } t j |  } Wd QRX| d S)zC
    Load the build system from a source dir (pyproject.toml).
    zpyproject.tomlNzbuild-system)ospathjoinopenr   load)
source_dirZ	pyprojectfZpyproject_datar   r   r   load_system   s    r   c             C   s[   y t  |   } Wn t t f k
 r0 i  } Yn X| j d d  | j d d d g  | S)z
    Given a source dir, attempt to get a build system backend
    and requirements from pyproject.toml. Fallback to
    setuptools but only if the file was not found or a build
    system was not indicated.
    zbuild-backendz setuptools.build_meta:__legacy__r	   
setuptoolswheel)r   r   KeyError
setdefault)r   r   r   r   r   compat_system'   s    r    c             C   s   d j  t     } t |  |  } | i   } t j d |  | j |  t j d  t    } t j d | |  d j  t     } t |  |  }	 |	 | i   }
 t j j	 | |
  } t
 j | t j j	 | t j j |
    Wd  QRXd  S)Nzget_requires_for_build_{dist}zGot build requires: %sz$Installed dynamic build dependencieszTrying to build %s in %szbuild_{dist})r   localsgetattrloginfopip_installr   r   r   r   shutilmovebasename)hooksenvdistdestZget_requires_nameget_requiresreqstdZ
build_namebuildfilenamesourcer   r   r   	_do_build:   s    r3   c             C   s   | p t  |   } t j j |  | p' d  } t |  t |  t |  | d | j d   } t   + } | j	 | d  t
 | | | |  Wd  QRXd  S)Nr+   zbuild-backendzbackend-pathr	   )r   r   r   r   r   r   r   getr   r%   r3   )r   r+   r,   r   r)   r*   r   r   r   r0   L   s    

r0   r   helpz%A directory containing pyproject.tomlz--binaryz-baction
store_truedefaultFz--sourcez-sz	--out-dirz-oz>Destination in which to save the builds relative to source dirc             C   sx   t  t d  |  j s |  j r" d n d  |  j s8 |  j r> d n d  f   } x$ | D] } t |  j | |  j  qT Wd  S)Nsdistr   )listfilterr2   binaryr0   r   Zout_dir)argsdistsr+   r   r   r   mainp   s
    	(r?   __main__)__doc__argparseloggingr   Zpip._vendorr   r&   Zenvbuildr   Zwrappersr   Zdirtoolsr   r   compatr   	getLogger__name__r#   r   r   r    r3   r0   ArgumentParserparseradd_argumentr?   
parse_argsr   r   r   r   <module>   sB   
			