B
    ãUvgi  ã               @   sL   d dl mZ d dlZd dlZd dlmZmZ d dlmZ dd„ Z	dd„ Z
dS )	é    )Úabsolute_importN)ÚpytomlÚsix)ÚInstallationErrorc             C   s   t | tƒotdd„ | D ƒƒS )Nc             s   s   | ]}t |tjƒV  qd S )N)Ú
isinstancer   Ústring_types)Ú.0Úitem© r
   ú8/tmp/pip-install-r_9ig3yj/pip/pip/_internal/pyproject.pyú	<genexpr>   s    z"_is_list_of_str.<locals>.<genexpr>)r   ÚlistÚall)Úobjr
   r
   r   Ú_is_list_of_str   s    
r   c          	   C   sL  t j |¡}t j |¡}|rLtj|dd��}t |¡}W dQ R X | d¡}nd}|rn|sn| dkrhtdƒ‚d} n8|ršd|krš| dkr”td	 	|d ¡ƒ‚d} n| dkr¦|} | dk	s²t
‚| sºdS |dkrÐd
dgddœ}|dk	sÜt
‚d}	d|krút|	j	|dd�ƒ‚|d }
t|
ƒ�st|	j	|dd�ƒ‚| d¡}g }|dk�rBd}d
dg}|
||fS )aÍ  Load the pyproject.toml file.

    Parameters:
        use_pep517 - Has the user requested PEP 517 processing? None
                     means the user hasn't explicitly specified.
        pyproject_toml - Location of the project's pyproject.toml file
        setup_py - Location of the project's setup.py file
        req_name - The name of the requirement we're processing (for
                   error reporting)

    Returns:
        None if we should use the legacy code path, otherwise a tuple
        (
            requirements from pyproject.toml,
            name of PEP 517 backend,
            requirements we should check are installed after setting
                up the build environment
        )
    zutf-8)ÚencodingNzbuild-systemFzIDisabling PEP 517 processing is invalid: project does not have a setup.pyTzbuild-backendzbDisabling PEP 517 processing is invalid: project specifies a build backend of {} in pyproject.tomlzsetuptools>=38.2.5Úwheelzsetuptools.build_meta)Úrequireszbuild-backendzO{package} has a pyproject.toml file that does not comply with PEP 518: {reason}r   z]it has a 'build-system' table but not 'build-system.requires' which is mandatory in the table)ÚpackageÚreasonz1'build-system.requires' is not a list of strings.)ÚosÚpathÚisfileÚioÚopenr   ÚloadÚgetr   ÚformatÚAssertionErrorr   )Ú
use_pep517Úpyproject_tomlÚsetup_pyÚreq_nameÚhas_pyprojectÚ	has_setupÚfÚpp_tomlÚbuild_systemÚerror_templater   ÚbackendÚcheckr
   r
   r   Úload_pyproject_toml   sV    




r+   )Ú
__future__r   r   r   Úpip._vendorr   r   Úpip._internal.exceptionsr   r   r+   r
   r
   r
   r   Ú<module>   s   