509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
Ävh|%  ã               @   sÒ   d dl m Z  d dlmZ d dljjZ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 d dlmZmZmZ yd dlmZ W n" ek
r¦   G dd„ dƒZY nX G d	d
„ d
ejeƒZddd„Zdd„ ZdS )é    )Úglob)Úconvert_pathN)Úsix)ÚmapÚfilterÚfilterfalse)Ú	Mixin2to3c               @   s   e Zd Zddd„ZdS )r   Tc             C   s   dS )z
do nothingN© )ÚselfÚfilesZdoctestsr	   r	   ú/usr/lib/python3.6/build_py.pyÚrun_2to3   s    zMixin2to3.run_2to3N)T)Ú__name__Ú
__module__Ú__qualname__r   r	   r	   r	   r   r      s   r   c               @   sŒ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZd S )!Úbuild_pyaX  Enhanced 'build_py' command that includes data files with packages

    The data files are specified via a 'package_data' argument to 'setup()'.
    See 'setuptools.dist.Distribution' for more details.

    Also, this version of the 'build_py' command allows you to specify both
    'py_modules' and 'packages' in the same setup operation.
    c             C   sF   t jj| ƒ | jj| _| jjp i | _d| jkr6| jd= g | _g | _d S )NÚ
data_files)	Úorigr   Úfinalize_optionsÚdistributionÚpackage_dataÚexclude_package_dataÚ__dict__Ú_build_py__updated_filesÚ_build_py__doctests_2to3)r
   r	   r	   r   r   !   s    

zbuild_py.finalize_optionsc             C   s|   | j  r| j rdS | j r"| jƒ  | jr8| jƒ  | jƒ  | j| jdƒ | j| jdƒ | j| jdƒ | jt	j
j| dd�ƒ dS )z?Build modules, packages, and copy data files to build directoryNFTr   )Zinclude_bytecode)Z
py_modulesÚpackagesZbuild_modulesZbuild_packagesÚbuild_package_datar   r   r   Zbyte_compiler   r   Zget_outputs)r
   r	   r	   r   Úrun+   s    zbuild_py.runc             C   s&   |dkr| j ƒ | _| jS tjj| |ƒS )zlazily compute data filesr   )Ú_get_data_filesr   r   r   Ú__getattr__)r
   Úattrr	   r	   r   r   ?   s    
zbuild_py.__getattr__c             C   sJ   t jrt|t jƒr|jdƒ}tjj| |||ƒ\}}|rB| jj	|ƒ ||fS )NÚ.)
r   ZPY2Ú
isinstanceZstring_typesÚsplitr   r   Úbuild_moduler   Úappend)r
   ÚmoduleZmodule_fileÚpackageZoutfileÚcopiedr	   r	   r   r$   F   s    

zbuild_py.build_modulec             C   s   | j ƒ  tt| j| jpf ƒƒS )z?Generate list of '(package,src_dir,build_dir,filenames)' tuples)Úanalyze_manifestÚlistr   Ú_get_pkg_data_filesr   )r
   r	   r	   r   r   P   s    zbuild_py._get_data_filesc                sJ   | j |ƒ‰ tjj| jg|jdƒ Ž }‡ fdd„| j|ˆ ƒD ƒ}|ˆ ||fS )Nr!   c                s   g | ]}t jj|ˆ ƒ‘qS r	   )ÚosÚpathÚrelpath)Ú.0Úfile)Úsrc_dirr	   r   ú
<listcomp>^   s   z0build_py._get_pkg_data_files.<locals>.<listcomp>)Úget_package_dirr,   r-   ÚjoinZ	build_libr#   Úfind_data_files)r
   r'   Ú	build_dirÚ	filenamesr	   )r1   r   r+   U   s
    

zbuild_py._get_pkg_data_filesc             C   sX   | j | j||ƒ}tt|ƒ}tjj|ƒ}ttj	j
|ƒ}tj| jj|g ƒ|ƒ}| j|||ƒS )z6Return filenames for package's data files in 'src_dir')Ú_get_platform_patternsr   r   r   Ú	itertoolsÚchainÚfrom_iterabler   r,   r-   ÚisfileÚmanifest_filesÚgetÚexclude_data_files)r
   r'   r1   ÚpatternsZglobs_expandedZglobs_matchesZ
glob_filesr   r	   r	   r   r5   c   s    
zbuild_py.find_data_filesc       
      C   s�   xŠ| j D ]€\}}}}xr|D ]j}tjj||ƒ}| jtjj|ƒƒ tjj||ƒ}| j||ƒ\}}	tjj|ƒ}|	r|| jj	kr| j
j|ƒ qW qW dS )z$Copy data files into build directoryN)r   r,   r-   r4   ZmkpathÚdirnameZ	copy_fileÚabspathr   Zconvert_2to3_doctestsr   r%   )
r
   r'   r1   r6   r7   ÚfilenameÚtargetZsrcfileZoutfr(   r	   r	   r   r   t   s    
zbuild_py.build_package_datac             C   sô   i  | _ }| jjsd S i }x$| jp$f D ]}||t| j|ƒƒ< q&W | jdƒ | jdƒ}xš|jj	D ]Ž}t
jjt|ƒƒ\}}d }|}	x:|r¸||kr¸||kr¸|}t
jj|ƒ\}}
t
jj|
|ƒ}q€W ||kr^|jdƒrÖ||	krÖq^|j|| g ƒj|ƒ q^W d S )NZegg_infoz.py)r=   r   Zinclude_package_datar   Úassert_relativer3   Zrun_commandZget_finalized_commandZfilelistr   r,   r-   r#   r4   ÚendswithÚ
setdefaultr%   )r
   ZmfZsrc_dirsr'   Zei_cmdr-   ÚdÚfÚprevZoldfZdfr	   r	   r   r)   �   s(    


zbuild_py.analyze_manifestc             C   s   d S )Nr	   )r
   r	   r	   r   Úget_data_files™   s    zbuild_py.get_data_filesc             C   sº   y
| j | S  tk
r   Y nX tjj| ||ƒ}|| j |< | sJ| jj rN|S x,| jjD ]}||ksr|j|d ƒrXP qXW |S tj	|dƒ�}|j
ƒ }W dQ R X d|kr¶tjjd|f ƒ‚|S )z8Check namespace packages' __init__ for declare_namespacer!   ÚrbNs   declare_namespacezÁNamespace package problem: %s is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)
")Úpackages_checkedÚKeyErrorr   r   Úcheck_packager   Znamespace_packagesÚ
startswithÚioÚopenÚreadÚ	distutilsÚerrorsZDistutilsError)r
   r'   Zpackage_dirZinit_pyZpkgrI   Úcontentsr	   r	   r   rO   œ   s&    


zbuild_py.check_packagec             C   s   i | _ tjj| ƒ d S )N)rM   r   r   Úinitialize_options)r
   r	   r	   r   rW   º   s    zbuild_py.initialize_optionsc             C   s0   t jj| |ƒ}| jjd k	r,tjj| jj|ƒS |S )N)r   r   r3   r   Zsrc_rootr,   r-   r4   )r
   r'   Úresr	   r	   r   r3   ¾   s    zbuild_py.get_package_dirc                s\   t ˆƒ‰| j| j||ƒ}‡fdd„|D ƒ}tjj|ƒ}t|ƒ‰ ‡ fdd„ˆD ƒ}t t|ƒƒS )z6Filter filenames for package's data files in 'src_dir'c             3   s   | ]}t jˆ |ƒV  qd S )N)Úfnmatchr   )r/   Úpattern)r   r	   r   ú	<genexpr>Í   s   z.build_py.exclude_data_files.<locals>.<genexpr>c             3   s   | ]}|ˆ kr|V  qd S )Nr	   )r/   Úfn)Úbadr	   r   r[   Ô   s   )r*   r8   r   r9   r:   r;   ÚsetÚ_unique_everseen)r
   r'   r1   r   r@   Zmatch_groupsZmatchesZkeepersr	   )r]   r   r   r?   Ä   s    

zbuild_py.exclude_data_filesc                s.   t j| jdg ƒ| j|g ƒƒ}‡ fdd„|D ƒS )zÜ
        yield platform-specific path patterns (suitable for glob
        or fn_match) from a glob-based spec (such as
        self.package_data or self.exclude_package_data)
        matching package in src_dir.
        Ú c             3   s    | ]}t jjˆ t|ƒƒV  qd S )N)r,   r-   r4   r   )r/   rZ   )r1   r	   r   r[   é   s   z2build_py._get_platform_patterns.<locals>.<genexpr>)r9   r:   r>   )Úspecr'   r1   Zraw_patternsr	   )r1   r   r8   Û   s
    

zbuild_py._get_platform_patternsN)r   r   r   Ú__doc__r   r   r   r$   r   r+   r5   r   r)   rK   rO   rW   r3   r?   Ústaticmethodr8   r	   r	   r	   r   r      s    

r   c             c   sj   t ƒ }|j}|dkr:xPt|j| ƒD ]}||ƒ |V  q"W n,x*| D ]"}||ƒ}||kr@||ƒ |V  q@W dS )zHList unique elements, preserving order. Remember all elements ever seen.N)r^   Úaddr   Ú__contains__)ÚiterableÚkeyÚseenZseen_addÚelementÚkr	   r	   r   r_   ï   s    
r_   c             C   s:   t jj| ƒs| S ddlm} tjdƒjƒ |  }||ƒ‚d S )Nr   )ÚDistutilsSetupErrorzÓ
        Error: setup script specifies an absolute path:

            %s

        setup() arguments must *always* be /-separated paths relative to the
        setup.py directory, *never* absolute paths.
        )r,   r-   ÚisabsÚdistutils.errorsrk   ÚtextwrapÚdedentÚlstrip)r-   rk   Úmsgr	   r	   r   rE     s    rE   )N)r   Zdistutils.utilr   Zdistutils.command.build_pyZcommandr   r   r,   rY   rn   rQ   rm   rT   r9   Zsetuptools.externr   Zsetuptools.extern.six.movesr   r   r   Zsetuptools.lib2to3_exr   ÚImportErrorr_   rE   r	   r	   r	   r   Ú<module>   s$    Y
