3
ûâdeî  ã            	   @   sd  d dl Zd dlZd dl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mZ ddlmZmZ ejeƒZeejƒ ƒZeeddƒZedœd	d
„Zedœdd„Zedœdd„Zedœdd„ZddddddgZ ej!dƒdk	rîe j"dƒ d%eeej#e ej#e eej#e edœdd„Z$edœdd„Z%edœdd„Z&edœd d!„Z'eej(eef d"œd#d$„Z)dS )&é    N)ÚInvalidSchemeCombinationÚUserInstallationInvalid)ÚSCHEME_KEYSÚScheme)Úrunning_under_virtualenvé   )Úget_major_minor_versionÚis_osx_frameworkZget_preferred_scheme)Úreturnc               C   s   dt kotƒ  otƒ S )a°  Check for Apple's ``osx_framework_library`` scheme.

    Python distributed by Apple's Command Line Tools has this special scheme
    that's used when:

    * This is a framework build.
    * We are installing into the system prefix.

    This does not account for ``pip install --prefix`` (also means we're not
    installing to the system prefix), which should use ``posix_prefix``, but
    logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But
    since ``prefix`` is not available for ``sysconfig.get_default_scheme()``,
    which is the stdlib replacement for ``_infer_prefix()``, presumably Apple
    wouldn't be able to magically switch between ``osx_framework_library`` and
    ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library``
    means its behavior is consistent whether we use the stdlib implementation
    or our own, and we deal with this special case in ``get_scheme()`` instead.
    Úosx_framework_library)Ú_AVAILABLE_SCHEMESr   r	   © r   r   úA/tmp/pip-build-red6nood/pip/pip/_internal/locations/_sysconfig.pyÚ _should_use_osx_framework_prefix   s    r   c              C   sv   t rt dƒS tƒ rdS tjj› dtj› �} | tkr6| S tjjtkrJtjjS tj› d�}|tkrb|S tjtkrrtjS dS )a!  Try to find a prefix scheme for the current platform.

    This tries:

    * A special ``osx_framework_library`` for Python distributed by Apple's
      Command Line Tools, when not running in a virtual environment.
    * Implementation + OS, used by PyPy on Windows (``pypy_nt``).
    * Implementation without OS, used by PyPy on POSIX (``pypy``).
    * OS + "prefix", used by CPython on POSIX (``posix_prefix``).
    * Just the OS name, used by CPython on Windows (``nt``).

    If none of the above works, fall back to ``posix_prefix``.
    Úprefixr   Ú_Ú_prefixÚposix_prefix)Ú_PREFERRED_SCHEME_APIr   ÚsysÚimplementationÚnameÚosr   )Zimplementation_suffixedÚsuffixedr   r   r   Ú_infer_prefix8   s    
r   c              C   sJ   t rt dƒS tƒ r tƒ  r d} ntj› d�} | tkr8| S dtkrFtƒ ‚dS )z3Try to find a user scheme for the current platform.ÚuserÚosx_framework_userÚ_userÚ
posix_user)r   r	   r   r   r   r   r   )r   r   r   r   Ú_infer_userW   s    r   c              C   s(   t rt dƒS tj› d�} | tkr$| S dS )z,Try to find a home for the current platform.ÚhomeÚ_homeÚ
posix_home)r   r   r   r   )r   r   r   r   Ú_infer_homef   s    r#   Úinstalled_baseÚbaseÚinstalled_platbaseÚplatbaser   Úexec_prefixÚuserbaseF)Ú	dist_namer   r    ÚrootÚisolatedr   r
   c                sf  |rˆrt ddƒ‚ˆ r$ˆr$t ddƒ‚ˆ dk	r4tƒ }n|r@tƒ }ntƒ }ˆdk	rZ|dkrZd}ˆ dk	rv‡ fdd„tD ƒ}n ˆdk	r’‡fd	d„tD ƒ}ni }tj||d
�}tƒ rð|r¾|jdt	j
ƒ}	n|jdt	j
ƒ}	dtƒ › �}
tjj|	dd|
ƒ|d< n| sød} t|d |d tjj|d | ƒ|d |d d�}|dk	�rbx.tD ]&}tjj|t||ƒƒ}t|||ƒ �q8W |S )a\  
    Get the "scheme" corresponding to the input parameters.

    :param dist_name: the name of the package to retrieve the scheme for, used
        in the headers scheme path
    :param user: indicates to use the "user" scheme
    :param home: indicates to use the "home" scheme
    :param root: root under which other directories are re-based
    :param isolated: ignored, but kept for distutils compatibility (where
        this controls whether the user-site pydistutils.cfg is honored)
    :param prefix: indicates to use the "prefix" scheme and provides the
        base directory for the same
    z--userz--prefixz--homeNr   r   c                s   i | ]
}ˆ |“qS r   r   )Ú.0Úk)r    r   r   ú
<dictcomp>¥   s    zget_scheme.<locals>.<dictcomp>c                s   i | ]
}ˆ |“qS r   r   )r-   r.   )r   r   r   r/   §   s    )ÚschemeÚvarsr)   r%   ÚpythonÚincludeÚsiteÚUNKNOWNÚplatlibÚpurelibÚscriptsÚdata)r6   r7   Úheadersr8   r9   )r   r#   r   r   Ú
_HOME_KEYSÚ	sysconfigÚ	get_pathsr   Úgetr   r   r   r   ÚpathÚjoinr   r   Ú	distutilsÚutilÚchange_rootÚgetattrÚsetattr)r*   r   r    r+   r,   r   Zscheme_nameÚ	variablesÚpathsr%   Z	python_xyr0   ÚkeyÚvaluer   )r    r   r   Ú
get_scheme}   sH    



rJ   c               C   s4   t jd d… dkr(t jd d… dkr(dS tjƒ d S )Né   Údarwiné   z/System/Library/z/usr/local/binr8   )r   Úplatformr   r<   r=   r   r   r   r   Úget_bin_prefixÊ   s    $rO   c               C   s   t jƒ d S )Nr7   )r<   r=   r   r   r   r   Úget_purelibÑ   s    rP   c               C   s   t jƒ d S )Nr6   )r<   r=   r   r   r   r   Úget_platlibÕ   s    rQ   )r   r
   c             C   s"   t j| | dœd�}|d |d fS )N)r%   r'   )r1   r7   r6   )r<   r=   )r   rG   r   r   r   Úget_prefixed_libsÙ   s    rR   )FNNFN)*Údistutils.utilrA   Úloggingr   r   r<   ÚtypingZpip._internal.exceptionsr   r   Zpip._internal.models.schemer   r   Zpip._internal.utils.virtualenvr   r%   r   r	   Ú	getLoggerÚ__name__ÚloggerÚsetÚget_scheme_namesr   rD   r   Úboolr   Ústrr   r   r#   r;   Úget_config_varÚappendÚOptionalrJ   rO   rP   rQ   ÚTuplerR   r   r   r   r   Ú<module>   sD   

     F