a
    ñ»j`E  ã                
   @  sš  d dl m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
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mZ zd dlmZ edƒ W n e yÒ   eZY n0 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�rJzd dl)Z)e*e)dƒ Z%Z$W n e �yH   Y n0 dd„ Z+dd„ Z,G dd„ deƒZe%�s|ej(dk�rˆd"dd„Z-nd Z&d#d!d„Z-dS )$é    )ÚannotationsN©ÚEXTENSION_SUFFIXES)Úcache_from_source)ÚIterator)ÚPath)Ú	build_ext)Únew_compiler)Úcustomize_compilerÚget_config_var)Úlog)Ú	BaseError)Ú	ExtensionÚLibraryzCython.Compiler.MainÚLDSHARED)Ú_config_varsc              	   C  sl   t jdkr`t ¡ }z6dtd< dtd< dtd< t| ƒ W t ¡  t |¡ qht ¡  t |¡ 0 nt| ƒ d S )NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibÚCCSHAREDz.dylibÚSO)ÚsysÚplatformÚ_CONFIG_VARSÚcopyr
   ÚclearÚupdate)ÚcompilerÚtmp© r   úBE:\soccer\ml_env\Lib\site-packages\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_dlH   s    r%   c                  C  s.   t D ]$} d| v 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_suffixL   s    
r'   c                   @  s  e Zd ZU dZded< dZded< dd„ Zddd	œd
d„Zdd„ Zddddœdd„Z	ddœ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%d&„Zd'dœd(d)„Zd$dœd*d+„Zd,dœd-d.„Zd/d0„ Zd1d2„ Zd<d3d4„Zd=ddd5œd6d7„Zdd8œd9d:„Zd;S )>r   FÚboolÚeditable_modeÚinplacec                 C  s.   | j d }| _ t | ¡ || _ |r*|  ¡  dS )z;Build extensions in build directory, then copy if --inplacer   N)r*   Ú
_build_extÚrunÚcopy_extensions_to_source)ÚselfZold_inplacer   r   r   r,   Z   s
    
zbuild_ext.runr   ztuple[str, str])ÚextÚreturnc           
      C  sj   |   |j¡}|  |¡}| d¡}d |d d… ¡}| |¡}tj |tj |¡¡}tj | j	|¡}	||	fS )NÚ.éÿÿÿÿ)
Úget_ext_fullnameÚnameÚget_ext_filenameÚsplitÚjoinZget_package_dirÚosÚpathÚbasenameÚ	build_lib)
r.   Úbuild_pyr/   ÚfullnameÚfilenameÚmodpathÚpackageÚpackage_dirÚinplace_fileÚregular_filer   r   r   Ú_get_inplace_equivalentb   s    


z!build_ext._get_inplace_equivalentc                 C  sp   |   d¡}| jD ]Z}|  ||¡\}}tj |¡s6|jsH| j||| jd� |j	r|  
||¡}| j||dd� qd S )Nr<   )ÚlevelT)Úcompile)Úget_finalized_commandÚ
extensionsrD   r8   r9   ÚexistsÚoptionalÚ	copy_fileÚverboseÚ_needs_stubÚ_get_equivalent_stubÚ_write_stub_file)r.   r<   r/   rB   rC   Úinplace_stubr   r   r   r-   l   s    

z#build_ext.copy_extensions_to_sourceÚstr)r/   Úoutput_filer0   c                 C  s2   t j |¡}|j d¡\}}}t j ||¡› d�S ©Nr1   ú.py)r8   r9   Údirnamer4   Ú
rpartitionr7   )r.   r/   rR   Zdir_Ú_r4   r   r   r   rN   }   s    zbuild_ext._get_equivalent_stubzIterator[tuple[str, str]])r0   c           
      c  sŽ   | j s
d S |  d¡}|  d¡jp"d}| jD ]^}|  ||¡\}}||fV  |jr*|  ||¡}|  ||¡}t||d�}t||d�}	|	|fV  q*d S )Nr<   Úinstall_libr"   )Úoptimization)r*   rG   ÚoptimizerH   rD   rM   rN   Ú_compiled_file_name)
r.   r<   Úoptr/   rB   rC   rP   Zregular_stubZinplace_cacheZoutput_cacher   r   r   Ú_get_output_mapping‚   s    


zbuild_ext._get_output_mappingc                 C  sÖ   t  d¡}|r&t jj| d¡Ž | }nt | |¡}tdƒ}|| jv rÒ| j| }|j	oXt
ƒ }|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_SUFFIXr1   Ú
EXT_SUFFIXzdl-)r8   Úgetenvr9   r7   r6   r+   r5   r   Úext_mapZpy_limited_apir'   ÚlenÚ
isinstancer   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamic)r.   r=   Zso_extr>   r/   Úuse_abi3ÚfnÚdr   r   r   r5   ›   s&    




zbuild_ext.get_ext_filenamec                 C  s&   t  | ¡ d | _g | _i | _d| _d S )NF)r+   Úinitialize_optionsrd   Úshlibsr`   r)   ©r.   r   r   r   rl   ²   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v�r|j |¡ |rbtrbtj|jvrb|j tj¡ qb| j�r6d| _d S )Nc                 S  s   g | ]}t |tƒr|‘qS r   )rb   r   ©Ú.0r/   r   r   r   Ú
<listcomp>½   ó    z.build_ext.finalize_options.<locals>.<listcomp>r1   r2   FT)r+   Úfinalize_optionsrH   Zcheck_extensions_listrm   Úsetup_shlib_compilerr3   r4   Ú
_full_namer`   r6   Úlinks_to_dynamicrg   rb   r   rh   rM   r5   Ú
_file_namer8   r9   rU   r7   r;   Úlibrary_dirsÚappendÚcurdirÚruntime_library_dirsr)   r*   )r.   r/   r=   ZltdÚnsr>   Úlibdirr   r   r   rs   ¹   s0    



zbuild_ext.finalize_optionsc                 C  sæ   t | j| j| jd� }| _t|ƒ | jd ur8| | j¡ | jd ur^| jD ]\}}| 	||¡ qH| j
d ur~| j
D ]}| |¡ qn| jd ur”| | j¡ | jd urª| | j¡ | jd urÀ| | j¡ | jd urÖ| | j¡ t |¡|_d S )N)r   Údry_runÚforce)r	   r   r~   r   rd   r   Úinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macroÚ	librariesZset_librariesrx   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r.   r   r4   ÚvalueÚmacror   r   r   rt   Ø   s*    ÿ







zbuild_ext.setup_shlib_compilerc                 C  s   t |tƒr|jS t | |¡S ©N)rb   r   Úexport_symbolsr+   Úget_export_symbols©r.   r/   r   r   r   rˆ   ó   s    
zbuild_ext.get_export_symbolsc                 C  sb   |  ¡  | j}zFt|tƒr"| j| _t | |¡ |jrL|  d¡j	}|  
||¡ W || _n|| _0 d S )Nr<   )Z_convert_pyx_sources_to_langr   rb   r   rd   r+   Úbuild_extensionrM   rG   r;   Ú
write_stub)r.   r/   Z	_compilerr;   r   r   r   rŠ   ø   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   )ru   )rp   Úlibr   r   r   rq   
  rr   z.build_ext.links_to_dynamic.<locals>.<listcomp>r1   Nr2   r"   c                 3  s   | ]}ˆ| ˆ v V  qd S r†   r   )rp   Zlibname©ZlibnamesÚpkgr   r   Ú	<genexpr>  rr   z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysrm   r7   ru   r6   Úanyr�   r‰   r   r�   r   rv     s     zbuild_ext.links_to_dynamicz	list[str]c                 C  s   g t  | ¡¢|  ¡ ¢S r†   )r+   Úget_source_filesÚ_get_internal_dependsrn   r   r   r   r“     s    zbuild_ext.get_source_fileszIterator[str]c              	   c  sè   t | jjptjƒ ¡ }dd„ | jD ƒ}ddddœdd„}|D ]¦}t |ƒ}| ¡ r\||dƒ q<d	|jv rr||d
ƒ q<z|| jdd�}W n  t	y¦   ||dƒ Y q<Y n0 z| 
|¡ W n  tyÖ   ||dƒ Y q<Y n0 | ¡ V  q<dS )zAYield ``ext.depends`` that are contained by the project directoryc                 s  s   | ]}|j D ]
}|V  qqd S r†   )Údepends)rp   r/   Údepr   r   r   r�     rr   z2build_ext._get_internal_depends.<locals>.<genexpr>rQ   ÚNone)Ú	orig_pathÚreasonr0   c                 S  s   t  d| |¡ d S )NzJdependency %s won't be automatically included in the manifest: the path %s)r   Úinfo)r˜   r™   r   r   r   Úskip  s
    üz-build_ext._get_internal_depends.<locals>.skipzmust be relativez..zcan't have `..` segmentsT)Ústrictzdoesn't existzmust be inside the project rootN)r   ÚdistributionZsrc_rootr8   rz   ÚresolverH   Úis_absoluteÚpartsÚOSErrorÚrelative_toÚ
ValueErrorÚas_posix)r.   Zproject_rootr•   r›   r–   r9   Zresolvedr   r   r   r”     s,    






zbuild_ext._get_internal_dependsc                 C  s,   | j rt|  ¡  ¡ ƒS tt | ¡|  ¡  ƒS r†   )r*   ÚlistÚget_output_mappingÚkeysÚsortedr+   Úget_outputsÚ_build_ext__get_stubs_outputsrn   r   r   r   r©   7  s    zbuild_ext.get_outputszdict[str, str]c                 C  s   |   ¡ }tt|dd„ d�ƒS )z1See :class:`setuptools.commands.build.SubCommand`c                 S  s   | d S )Nr   r   )Úxr   r   r   Ú<lambda>?  rr   z.build_ext.get_output_mapping.<locals>.<lambda>)Úkey)r]   r�   r¨   )r.   Úmappingr   r   r   r¦   <  s    zbuild_ext.get_output_mappingc                   s6   ‡ fdd„ˆ j D ƒ}t |ˆ  ¡ ¡}tdd„ |D ƒƒS )Nc                 3  s2   | ]*}|j rtjjˆ jg|j d ¡¢R Ž V  qdS )r1   N)rM   r8   r9   r7   r;   ru   r6   ro   rn   r   r   r�   C  s   þz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s  s   | ]\}}|| V  qd S r†   r   )rp   ÚbaseZfnextr   r   r   r�   J  rr   )rH   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsr¥   )r.   Zns_ext_basesÚpairsr   rn   r   Z__get_stubs_outputsA  s
    
þzbuild_ext.__get_stubs_outputsc                 c  s"   dV  dV  |   d¡jrdV  d S )NrT   z.pycr<   z.pyo)rG   rZ   rn   r   r   r   Z__get_output_extensionsL  s    z!build_ext.__get_output_extensionsc                 C  s2   t jj|g|j d¡¢R Ž d }|  |||¡ d S rS   )r8   r9   r7   ru   r6   rO   )r.   Ú
output_dirr/   rF   Ú	stub_filer   r   r   r‹   R  s     zbuild_ext.write_stub)rµ   r/   c                 C  sÒ   t  d|j|¡ |r,tj |¡r,t|d ƒ‚| jsÀt|ddd��p}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¡}| |¡ W d   ƒ n1 s¶0    Y  |rÎ|  |¡ d S )Nz writing stub loader for %s to %sz already exists! Please delete.Úwzutf-8)ÚencodingÚ
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   rš   ru   r8   r9   rI   r   r~   Úopenr7   r%   r:   rw   ÚwriteÚ_compile_and_remove_stub)r.   rµ   r/   rF   ÚfÚcontentr   r   r   rO   V  sB    
ÿê(zbuild_ext._write_stub_file)rµ   c                 C  sh   ddl m} ||gdd| jd� |  d¡j}|dkrH||g|d| jd� tj |¡rd| jsdt |¡ d S )Nr   )Úbyte_compileT)rZ   r   r~   rX   )	Údistutils.utilr¾   r~   rG   rZ   r8   r9   rI   Úunlink)r.   rµ   r¾   rZ   r   r   r   r»   x  s    üz"build_ext._compile_and_remove_stubN)F)F)Ú__name__Ú
__module__Ú__qualname__r)   Ú__annotations__r*   r,   rD   r-   rN   r]   r5   rl   rs   rt   rˆ   rŠ   rv   r“   r”   r©   r¦   rª   r²   r‹   rO   r»   r   r   r   r   r   V   s.   

	&
"r   c                 C  s(   |   | j|||||||||	|
||¡ d S r†   )ÚlinkZSHARED_LIBRARY)r.   ÚobjectsÚoutput_libnamer´   r�   rx   r{   r‡   ÚdebugÚextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r   r‚   ‹  s    ór‚   Zstaticc                 C  s^   |d u sJ ‚t j |¡\}}t j |¡\}}|  d¡ d¡rH|dd … }|  |||||¡ d S )Nr«   rŒ   é   )r8   r9   r6   rc   re   Ú
startswithZcreate_static_lib)r.   rÆ   rÇ   r´   r�   rx   r{   r‡   rÈ   rÉ   rÊ   rË   rÌ   r>   r:   r/   r   r   r   r‚   ®  s    )
NNNNNFNNNN)
NNNNNFNNNN).Ú
__future__r   r8   r   r°   Úimportlib.machineryr   Úimportlib.utilr   r[   Útypingr   Úpathlibr   Zdistutils.command.build_extr   Z_du_build_extÚdistutils.ccompilerr	   Údistutils.sysconfigr
   r   Ú	distutilsr   Zsetuptools.errorsr   Zsetuptools.extensionr   r   ZCython.Distutils.build_extr+   Ú
__import__ÚImportErrorr   r   r   r#   rg   rf   r   r4   ÚdlÚhasattrr%   r'   r‚   r   r   r   r   Ú<module>   sz   

  4          ó!          ó