B
    Uvg                 @   sP   d dl Z d dlZd dlZd dlmZmZ d dlm  mZ	 G dd de	jZdS )    N)productstarmapc               @   sj   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
dd Ze	dd ZdddZdd ZdS )install_libz9Don't add compiled flags to filenames of non-Python filesc             C   s   t j|  d | _d | _d S )N)origr   initialize_options	multiarchinstall_layout)self r
   F/tmp/pip-install-r_9ig3yj/setuptools/setuptools/command/install_lib.pyr      s    zinstall_lib.initialize_optionsc             C   sL   t j|  | dd | jdkrHtjd d dkrHdd l}|d| _	d S )Ninstall)r   r   deb   )   r   r   	MULTIARCH)
r   r   finalize_optionsset_undefined_optionsr   sysversion_info	sysconfigget_config_varr   )r	   r   r
   r
   r   r      s
    zinstall_lib.finalize_optionsc             C   s&   |    |  }|d k	r"| | d S )N)buildr   byte_compile)r	   outfilesr
   r
   r   run   s    zinstall_lib.runc                s4    fdd   D }t|  }tt j|S )z
        Return a collections.Sized collections.Container of paths to be
        excluded for single_version_externally_managed installations.
        c             3   s"   | ]}  |D ]
}|V  qqd S )N)_all_packages).0Zns_pkgpkg)r	   r
   r   	<genexpr>$   s   z-install_lib.get_exclusions.<locals>.<genexpr>)_get_SVEM_NSPsr   _gen_exclusion_pathssetr   _exclude_pkg_path)r	   Zall_packagesZ
excl_specsr
   )r	   r   get_exclusions   s    
zinstall_lib.get_exclusionsc             C   s$   | d|g }tjj| jf| S )zw
        Given a package name and exclusion path within that package,
        compute the full exclusion path.
        .)splitospathjoinZinstall_dir)r	   r   Zexclusion_pathpartsr
   r
   r   r"   ,   s    zinstall_lib._exclude_pkg_pathc             c   s$   x| r| V  |  d\} }}qW dS )zn
        >>> list(install_lib._all_packages('foo.bar.baz'))
        ['foo.bar.baz', 'foo.bar', 'foo']
        r$   N)
rpartition)pkg_namesepchildr
   r
   r   r   4   s    zinstall_lib._all_packagesc             C   s,   | j jsg S | d}|j}|r(| j jS g S )z
        Get namespace packages (list) but only for
        single_version_externally_managed installations and empty otherwise.
        r   )distributionZnamespace_packagesget_finalized_commandZ!single_version_externally_managed)r	   Zinstall_cmdZsvemr
   r
   r   r   >   s
    
zinstall_lib._get_SVEM_NSPsc              c   sb   dV  dV  dV  t tds dS tjddt  } | d V  | d	 V  | d
 V  | d V  dS )zk
        Generate file paths to be excluded for namespace packages (bytecode
        cache files).
        z__init__.pyz__init__.pycz__init__.pyoget_tagN__pycache__z	__init__.z.pycz.pyoz
.opt-1.pycz
.opt-2.pyc)hasattrimpr&   r'   r(   r0   )baser
   r
   r   r    N   s    



z install_lib._gen_exclusion_paths   r   c                s   |r|r|rt    s>dd l}j|j_tj||S ddl	m
} ddlm g jrdd l}	|	djdd   rd n dd d jdd  f  fdd}
||||
 S )	Nr   )unpack_directory)log
EXT_SUFFIXz%s-%s%sc                sz   | kr d| dS jrVrV|rV|sV|}dtj| d| tj| 	| |S )Nz/Skipping installation of %s (namespace package)Fzrenaming extension to %szcopying %s -> %s)
warnr   endswithreplaceinfor&   r'   basenamedirnameappend)srcdst)exclude
ext_suffixr7   
new_suffixr   r	   r
   r   pf~   s    
z!install_lib.copy_tree.<locals>.pf)AssertionErrorr#   distutils.dir_utilr   dir_util
_multiarchr   r   	copy_treeZsetuptools.archive_utilr6   	distutilsr7   r   r   r;   )r	   infileoutfilepreserve_modepreserve_timespreserve_symlinkslevelrL   r6   r   rF   r
   )rC   rD   r7   rE   r   r	   r   rK   c   s$    

 zinstall_lib.copy_treec                s.   t j| }|    r* fdd|D S |S )Nc                s   g | ]}| kr|qS r
   r
   )r   f)rC   r
   r   
<listcomp>   s    z+install_lib.get_outputs.<locals>.<listcomp>)r   r   get_outputsr#   )r	   outputsr
   )rC   r   rU      s
    zinstall_lib.get_outputsN)r5   r5   r   r5   )__name__
__module____qualname____doc__r   r   r   r#   r"   staticmethodr   r   r    rK   rU   r
   r
   r
   r   r      s   

*r   )
r&   r   r3   	itertoolsr   r   Zdistutils.command.install_libcommandr   r   r
   r
   r
   r   <module>   s
   