
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    š’aœ3  ã                
   @   st  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m	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ zd dlmZ ed
ƒ W n ek
r¬   eZY nX edƒ d dlmZ dd„ ZdZdZdZejdkrædZn>e j dk�r$zd dl!Z!e"e!dƒ ZZW n ek
�r"   Y nX dd„ Z#dd„ Z$G dd„ deƒZe�sVe j dk�rbddd„Z%ndZd dd„Z%dS )!é    N©ÚEXTENSION_SUFFIXES)Ú	build_ext)Ú	copy_file)Únew_compiler)Úcustomize_compilerÚget_config_var)ÚDistutilsError)Úlog)ÚLibraryzCython.Compiler.MainÚLDSHARED)Ú_config_varsc              	   C   sZ   t jdkrNt ¡ }z$dtd< dtd< dtd< t| ƒ W 5 t ¡  t |¡ X nt| ƒ d S )NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibÚCCSHAREDz.dylibÚSO)ÚsysÚplatformÚ_CONFIG_VARSÚcopyÚclearÚupdater   )ÚcompilerÚtmp© r   úD/tmp/pip-install-7tp5dx2w/setuptools/setuptools/command/build_ext.pyÚ_customize_compiler_for_shlib   s    
ÿr   FZsharedr   TÚntÚRTLD_NOWc                 C   s   t r| S dS )NÚ )Ú	have_rtld)Úsr   r   r   Úif_dl>   s    r!   c                  C   s.   t D ]$} d| kr|   S | dkr|   S qdS )z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr   )Úsuffixr   r   r   Úget_abi3_suffixB   s
    r#   c                   @   sv   e 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d„ZdS )r   c                 C   s.   | j d }| _ t | ¡ || _ |r*|  ¡  dS )z;Build extensions in build directory, then copy if --inplacer   N)ZinplaceÚ
_build_extÚrunÚcopy_extensions_to_source)ÚselfZold_inplacer   r   r   r%   L   s
    
zbuild_ext.runc           
      C   sª   |   d¡}| jD ]”}|  |j¡}|  |¡}| d¡}d |d d… ¡}| |¡}tj	 |tj	 
|¡¡}tj	 | j|¡}	t|	|| j| jd� |jr|  |pœtj|d¡ qd S )NÚbuild_pyÚ.éÿÿÿÿ)ÚverboseÚdry_runT)Úget_finalized_commandÚ
extensionsÚget_ext_fullnameÚnameÚget_ext_filenameÚsplitÚjoinZget_package_dirÚosÚpathÚbasenameÚ	build_libr   r+   r,   Ú_needs_stubÚ
write_stubÚcurdir)
r'   r(   ÚextÚfullnameÚfilenameÚmodpathÚpackageÚpackage_dirZdest_filenameZsrc_filenamer   r   r   r&   T   s&    





ÿ  þz#build_ext.copy_extensions_to_sourcec                 C   sÚ   t  d¡}|r&t jj| d¡Ž | }nt | |¡}tdƒ}|| jkrÖ| j| }t	|dƒo\t
ƒ }|r‚|d t|ƒ … }t
ƒ }|| }t|tƒrªt j |¡\}}| j |t¡S trÖ|jrÖt j |¡\}}t j |d| ¡S |S )NZSETUPTOOLS_EXT_SUFFIXr)   Ú
EXT_SUFFIXZpy_limited_apizdl-)r4   Úgetenvr5   r3   r2   r$   r1   r   Úext_mapÚgetattrr#   ÚlenÚ
isinstancer   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamic)r'   r<   Zso_extr=   r;   Zuse_abi3ÚfnÚdr   r   r   r1   j   s&    




zbuild_ext.get_ext_filenamec                 C   s    t  | ¡ d | _g | _i | _d S ©N)r$   Úinitialize_optionsrH   ÚshlibsrC   ©r'   r   r   r   rP   �   s    
zbuild_ext.initialize_optionsc                 C   s,  t  | ¡ | jpg | _|  | j¡ dd„ | jD ƒ| _| jrB|  ¡  | jD ]}|  |j¡|_qH| jD ]Ä}|j}|| j	|< || j	| 
d¡d < | jrš|  |¡pœd}|o°to°t|tƒ }||_||_|  |¡ }|_tj tj | j|¡¡}|�r||jk�r|j |¡ |rbtrbtj|jkrb|j tj¡ qbd S )Nc                 S   s   g | ]}t |tƒr|‘qS r   )rF   r   ©Ú.0r;   r   r   r   Ú
<listcomp>‹   s    
ÿz.build_ext.finalize_options.<locals>.<listcomp>r)   r*   F)r$   Úfinalize_optionsr.   Zcheck_extensions_listrQ   Úsetup_shlib_compilerr/   r0   Ú
_full_namerC   r2   Úlinks_to_dynamicrK   rF   r   rL   r8   r1   Ú
_file_namer4   r5   Údirnamer3   r7   Úlibrary_dirsÚappendr:   Úruntime_library_dirs)r'   r;   r<   ZltdÚnsr=   Zlibdirr   r   r   rV   ‡   s,    



zbuild_ext.finalize_optionsc                 C   sæ   t | j| j| jd� }| _t|ƒ | jd k	r8| | j¡ | jd k	r^| jD ]\}}| 	||¡ qH| j
d k	r~| j
D ]}| |¡ qn| jd k	r”| | j¡ | jd k	rª| | j¡ | jd k	rÀ| | j¡ | jd k	rÖ| | j¡ t |¡|_d S )N)r   r,   Úforce)r   r   r,   r`   rH   r   Úinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macroÚ	librariesZset_librariesr\   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r'   r   r0   ÚvalueZmacror   r   r   rW   ¤   s.      ÿ







zbuild_ext.setup_shlib_compilerc                 C   s   t |tƒr|jS t | |¡S rO   )rF   r   Úexport_symbolsr$   Úget_export_symbols©r'   r;   r   r   r   rg   ¿   s    
zbuild_ext.get_export_symbolsc                 C   s\   |  ¡  | j}z@t|tƒr"| j| _t | |¡ |jrL|  d¡j	}|  
||¡ W 5 || _X d S )Nr(   )Z_convert_pyx_sources_to_langr   rF   r   rH   r$   Úbuild_extensionr8   r-   r7   r9   )r'   r;   Z	_compilerÚcmdr   r   r   ri   Ä   s    
zbuild_ext.build_extensionc                    sP   t  dd„ | jD ƒ¡‰ d |j d¡dd… dg ¡‰t‡ ‡fdd„|jD ƒƒS )	z?Return true if 'ext' links to a dynamic lib in the same packagec                 S   s   g | ]
}|j ‘qS r   )rX   )rT   Úlibr   r   r   rU   Ö   s     z.build_ext.links_to_dynamic.<locals>.<listcomp>r)   Nr*   r   c                 3   s   | ]}ˆ| ˆ kV  qd S rO   r   )rT   Zlibname©ZlibnamesÚpkgr   r   Ú	<genexpr>Ø   s     z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysrQ   r3   rX   r2   Úanyrb   rh   r   rl   r   rY   Ñ   s     zbuild_ext.links_to_dynamicc                 C   s   t  | ¡|  ¡  S rO   )r$   Úget_outputsÚ_build_ext__get_stubs_outputsrR   r   r   r   rr   Ú   s    zbuild_ext.get_outputsc                    s6   ‡ fdd„ˆ j D ƒ}t |ˆ  ¡ ¡}tdd„ |D ƒƒS )Nc                 3   s0   | ](}|j rtjjˆ jf|j d ¡žŽ V  qdS )r)   N)r8   r4   r5   r3   r7   rX   r2   rS   rR   r   r   rn   ß   s   þz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S rO   r   )rT   ÚbaseZfnextr   r   r   rn   æ   s     )r.   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsÚlist)r'   Zns_ext_basesÚpairsr   rR   r   Z__get_stubs_outputsÝ   s
    
þzbuild_ext.__get_stubs_outputsc                 c   s"   dV  dV  |   d¡jrdV  d S )Nú.pyz.pycr(   z.pyo)r-   ÚoptimizerR   r   r   r   Z__get_output_extensionsè   s    z!build_ext.__get_output_extensionsFc                 C   s2  t  d|j|¡ tjj|f|j d¡žŽ d }|rJtj |¡rJt|d ƒ‚| j	s¾t
|dƒ}| d ddd	td
ƒ dtj |j¡ dddtdƒdddtdƒdddddtdƒdddg¡¡ | ¡  |�r.ddlm} ||gdd| j	d � |  d!¡j}|dk�r||g|d| j	d � tj |¡�r.| j	�s.t |¡ d S )"Nz writing stub loader for %s to %sr)   rz   z already exists! Please delete.ÚwÚ
zdef __bootstrap__():z-   global __bootstrap__, __file__, __loader__z0   import sys, os, pkg_resources, importlib.utilz, dlz:   __file__ = pkg_resources.resource_filename(__name__,%r)z   del __bootstrap__z    if '__loader__' in globals():z       del __loader__z#   old_flags = sys.getdlopenflags()z   old_dir = os.getcwd()z   try:z(     os.chdir(os.path.dirname(__file__))z$     sys.setdlopenflags(dl.RTLD_NOW)z3     spec = importlib.util.spec_from_file_location(z#                __name__, __file__)z0     mod = importlib.util.module_from_spec(spec)z!     spec.loader.exec_module(mod)z   finally:z"     sys.setdlopenflags(old_flags)z     os.chdir(old_dir)z__bootstrap__()r   r   )Úbyte_compileT)r{   r`   r,   Úinstall_lib)r
   ÚinforX   r4   r5   r3   r2   Úexistsr	   r,   ÚopenÚwriter!   r6   rZ   ÚcloseÚdistutils.utilr~   r-   r{   Úunlink)r'   Ú
output_dirr;   ÚcompileZ	stub_fileÚfr~   r{   r   r   r   r9   î   sl    
ÿÿ
ÿþèÿ ÿ
 ÿzbuild_ext.write_stubN)F)Ú__name__Ú
__module__Ú__qualname__r%   r&   r1   rP   rV   rW   rg   ri   rY   rr   rs   rw   r9   r   r   r   r   r   K   s   	r   c                 C   s(   |   | j|||||||||	|
||¡ d S rO   )ÚlinkZSHARED_LIBRARY)r'   ÚobjectsÚoutput_libnamer‡   rb   r\   r^   rf   ÚdebugÚextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r   rc   $  s             ürc   Zstaticc                 C   s^   |d kst ‚tj |¡\}}tj |¡\}}|  d¡ d¡rH|dd … }|  |||||¡ d S )NÚxrk   é   )ÚAssertionErrorr4   r5   r2   rG   rI   Ú
startswithZcreate_static_lib)r'   rŽ   r�   r‡   rb   r\   r^   rf   r�   r‘   r’   r“   r”   r=   r6   r;   r   r   r   rc   3  s        ÿ)
NNNNNr   NNNN)
NNNNNr   NNNN)&r4   r   ru   Zimportlib.machineryr   Zdistutils.command.build_extr   Z_du_build_extÚdistutils.file_utilr   Údistutils.ccompilerr   Údistutils.sysconfigr   r   Údistutils.errorsr	   Ú	distutilsr
   Zsetuptools.extensionr   ZCython.Distutils.build_extr$   Ú
__import__ÚImportErrorr   r   r   r   rK   rJ   r   r0   ÚdlÚhasattrr!   r#   rc   r   r   r   r   Ú<module>   sr   

	 W                ü                ü