£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
     fC                 @   s~   d Z ddlZddlZddlZddlmZ ddlmZ ddlT ddl	m
Z
mZ ddlmZ G dd	 d	eZG d
d deeZdS )zHdistutils.command.build_py

Implements the Distutils 'build_py' command.    N)glob)Command)*)convert_path	Mixin2to3)logc               @   s   e Zd ZdZdddddgZddgZd	di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d2d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1S )3build_pyz5"build" pure Python modules (copy to build directory))z
build-lib=dzdirectory to "build" (copy) to)compileczcompile .py to .pyc)z
no-compileNz!don't compile .py files [default])z	optimize=Ozlalso compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0])forcefz2forcibly build everything (ignore file timestamps)r
   r   z
no-compilec             C   s4   d | _ d | _d | _d | _d | _d| _d| _d | _d S )Nr   )	build_lib
py_modulespackagepackage_datapackage_dirr
   optimizer   )self r   ?/opt/alt/python37/lib64/python3.7/distutils/command/build_py.pyinitialize_options    s    zbuild_py.initialize_optionsc          	   C   s   |  ddd | jj| _| jj| _| jj| _i | _| jjrbx&| jj D ]\}}t|| j|< qHW |  | _	t
| jtsyt| j| _W n  ttfk
r   tdY nX d S )NZbuild)r   r   )r   r   zoptimize must be 0, 1, or 2)Zset_undefined_optionsdistributionpackagesr   r   r   itemsr   get_data_files
data_files
isinstancer   int
ValueErrorAssertionErrorZDistutilsOptionError)r   namepathr   r   r   finalize_options*   s"    



zbuild_py.finalize_optionsc             C   s:   | j r|   | jr$|   |   | | jdd d S )Nr   )include_bytecode)r   build_modulesr   build_packagesbuild_package_databyte_compileget_outputs)r   r   r   r   runC   s    zbuild_py.runc                s   g }| j s|S xr| j D ]h}| |}tjj| jg|d  }d |rRt|d   fdd| ||D }|	||||f qW |S )z?Generate list of '(package,src_dir,build_dir,filenames)' tuples.r      c                s   g | ]}| d  qS )Nr   ).0file)plenr   r   
<listcomp>t   s    z+build_py.get_data_files.<locals>.<listcomp>)
r   get_package_dirosr#   joinr   splitlenfind_data_filesappend)r   datar   src_dir	build_dir	filenamesr   )r0   r   r   a   s    
zbuild_py.get_data_filesc                s`   | j dg | j |g  }g  x:|D ]2}ttj|t|}  fdd|D  q&W  S )z6Return filenames for package's data files in 'src_dir' c                s$   g | ]}| krt j|r|qS r   )r3   r#   isfile)r.   fn)filesr   r   r1      s    
z,build_py.find_data_files.<locals>.<listcomp>)r   getr   r3   r#   r4   r   extend)r   r   r:   ZglobspatternZfilelistr   )r@   r   r7   y   s    
zbuild_py.find_data_filesc             C   sh   d}x^| j D ]T\}}}}xF|D ]>}tj||}| tj| | jtj|||dd qW qW dS )z$Copy data files into build directoryNF)preserve_mode)r   r3   r#   r4   mkpathdirname	copy_file)r   Zlastdirr   r:   r;   r<   filenametargetr   r   r   r(      s    
zbuild_py.build_package_datac             C   s   | d}| js&|r tjj| S dS ng }x|ry| jd| }W n* tk
rn   |d|d  |d= Y q,X |d| tjj| S q,W | jd}|dk	r|d| |rtjj| S dS dS )zReturn the directory, relative to the top of the source
           distribution, where package 'package' should be found
           (at least according to the 'package_dir' option, if any).r,   r=   r   N)r5   r   r3   r#   r4   KeyErrorinsertrA   )r   r   r#   tailZpdirr   r   r   r2      s(    
	zbuild_py.get_package_dirc             C   sj   |dkr8t j|s td| t j|s8td| |rft j|d}t j|rZ|S td| d S )Nr=   z%package directory '%s' does not existz>supposed package directory '%s' exists, but is not a directoryz__init__.pyz8package init file '%s' not found (or not a regular file))	r3   r#   existsZDistutilsFileErrorisdirr4   r>   r   warn)r   r   r   init_pyr   r   r   check_package   s    
zbuild_py.check_packagec             C   s&   t j|std|| dS dS d S )Nz!file %s (for module %s) not foundFT)r3   r#   r>   r   rP   )r   modulemodule_filer   r   r   check_module   s    zbuild_py.check_modulec       	      C   s   |  || ttj|d}g }tj| jj}xX|D ]P}tj|}||krztjtj	|d }|
|||f q8| d|  q8W |S )Nz*.pyr   zexcluding %s)rR   r   r3   r#   r4   abspathr   Zscript_namesplitextbasenamer8   Zdebug_print)	r   r   r   Zmodule_filesmodulesZsetup_scriptr   Zabs_frS   r   r   r   find_package_modules   s    
zbuild_py.find_package_modulesc          	   C   s   i }g }x| j D ]}|d}d|dd }|d }y|| \}}W n" tk
rj   | |}d}Y nX |s| ||}	|df||< |	r||d|	f tj||d }
| 	||
sq||||
f qW |S )a  Finds individually-specified Python modules, ie. those listed by
        module name in 'self.py_modules'.  Returns a list of tuples (package,
        module_base, filename): 'package' is a tuple of the path through
        package-space to the module; 'module_base' is the bare (no
        packages, no dots) module name, and 'filename' is the path to the
        ".py" file (relative to the distribution root) that implements the
        module.
        r,   r   rJ   r-   __init__z.py)
r   r5   r4   rK   r2   rR   r8   r3   r#   rU   )r   r   rY   rS   r#   r   Zmodule_baser   checkedrQ   rT   r   r   r   find_modules   s*    


zbuild_py.find_modulesc             C   sR   g }| j r||   | jrNx.| jD ]$}| |}| ||}|| q&W |S )a4  Compute the list of all modules that will be built, whether
        they are specified one-module-at-a-time ('self.py_modules') or
        by whole packages ('self.packages').  Return a list of tuples
        (package, module, module_file), just like 'find_modules()' and
        'find_package_modules()' do.)r   rB   r]   r   r2   rZ   )r   rY   r   r   mr   r   r   find_all_modules  s    
zbuild_py.find_all_modulesc             C   s   dd |   D S )Nc             S   s   g | ]}|d  qS )rJ   r   )r.   rS   r   r   r   r1   -  s    z-build_py.get_source_files.<locals>.<listcomp>)r_   )r   r   r   r   get_source_files,  s    zbuild_py.get_source_filesc             C   s$   |gt | |d g }tjj| S )Nz.py)listr3   r#   r4   )r   r;   r   rS   Zoutfile_pathr   r   r   get_module_outfile/  s    zbuild_py.get_module_outfiler-   c             C   s   |   }g }xx|D ]p\}}}|d}| | j||}|| |r| jr`|tjj|dd | j	dkr|tjj|| j	d qW |dd | j
D 7 }|S )Nr,   r=   )optimizationr   c             S   s,   g | ]$\}}}}|D ]}t j||qqS r   )r3   r#   r4   )r.   r   r:   r;   r<   rH   r   r   r   r1   C  s   
z(build_py.get_outputs.<locals>.<listcomp>)r_   r5   rb   r   r8   r
   	importlibutilcache_from_sourcer   r   )r   r%   rY   Zoutputsr   rS   rT   rH   r   r   r   r*   3  s"    




zbuild_py.get_outputsc             C   sb   t |tr|d}nt |ttfs,td| | j||}tj	
|}| | | j||ddS )Nr,   z:'package' must be a string (dot-separated), list, or tupler   )rD   )r   strr5   ra   tuple	TypeErrorrb   r   r3   r#   rF   rE   rG   )r   rS   rT   r   Zoutfiledirr   r   r   build_moduleJ  s    

zbuild_py.build_modulec             C   s.   |   }x |D ]\}}}| ||| qW d S )N)r]   rk   )r   rY   r   rS   rT   r   r   r   r&   Y  s    zbuild_py.build_modulesc             C   sL   xF| j D ]<}| |}| ||}x |D ]\}}}| ||| q(W qW d S )N)r   r2   rZ   rk   )r   r   r   rY   Zpackage_rS   rT   r   r   r   r'   b  s
    

zbuild_py.build_packagesc             C   s   t jr| d d S ddlm} | j}|d tjkr>|tj }| jrZ||d| j	|| j
d | jdkr|||| j| j	|| j
d d S )Nz%byte-compiling is disabled, skipping.r   )r)   rJ   )r   r   prefixdry_run)sysdont_write_bytecoderP   distutils.utilr)   r   r3   sepr
   r   rm   r   )r   r@   r)   rl   r   r   r   r)   v  s    


zbuild_py.byte_compileN)r-   )__name__
__module____qualname__ZdescriptionZuser_optionsZboolean_optionsZnegative_optr   r$   r+   r   r7   r(   r2   rR   rU   rZ   r]   r_   r`   rb   r*   rk   r&   r'   r)   r   r   r   r   r      s6   

'4
	r   c               @   s   e Zd Zdd Zdd ZdS )build_py_2to3c             C   sL   g | _ | jr|   | jr*|   |   | | j  | | jdd d S )Nr   )r%   )	updated_filesr   r&   r   r'   r(   Zrun_2to3r)   r*   )r   r   r   r   r+     s    zbuild_py_2to3.runc             C   s,   t | |||}|d r(| j|d  |S )Nr-   r   )r   rk   rv   r8   )r   rS   rT   r   Zresr   r   r   rk     s    zbuild_py_2to3.build_moduleN)rr   rs   rt   r+   rk   r   r   r   r   ru     s   ru   )__doc__r3   importlib.utilrd   rn   r   Zdistutils.corer   Zdistutils.errorsrp   r   r   Z	distutilsr   r   ru   r   r   r   r   <module>   s     }