U
    aÊ¹j\G  ã                
   @  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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 erºd dlmZ n:zd dl mZ e!dƒ W n  e"k
rò   d dlm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�rlzd dl+Z+e,e+dƒ Z'Z&W n e"k
�rj   Y nX dd„ Z-dd„ Z.G dd„ deƒZe'�sžej*dk�r°d%dd œd!d"„Z/nd#Z(d&dd œd$d"„Z/dS )'é    )ÚannotationsN©ÚEXTENSION_SUFFIXES)Úcache_from_source)ÚPath)ÚTYPE_CHECKINGÚIterator)ÚDistribution)Ú	BaseError)Ú	ExtensionÚLibrary)Úlog)Únew_compiler)Úcustomize_compilerÚget_config_var)Ú	build_extz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   ú[/var/www/html/bwave/python/venv/lib/python3.8/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_dlL   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_suffixP   s    
r)   c                   @  s  e Zd ZU ded< dZdZ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dœ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   r	   ÚdistributionFc                 C  s.   | j d }| _ t | ¡ || _ |r*|  ¡  dS )z;Build extensions in build directory, then copy if --inplacer   N)ÚinplaceÚ
_build_extÚrunÚcopy_extensions_to_source)ÚselfZold_inplacer   r   r    r-   _   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_pyr0   ÚfullnameÚfilenameÚmodpathÚpackageÚpackage_dirÚinplace_fileÚregular_filer   r   r    Ú_get_inplace_equivalentg   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Ú
extensionsrE   r9   r:   ÚexistsÚoptionalÚ	copy_fileÚverboseÚ_needs_stubÚ_get_equivalent_stubÚ_write_stub_file)r/   r=   r0   rC   rD   Úinplace_stubr   r   r    r.   q   s    

z#build_ext.copy_extensions_to_sourceÚstr)r0   Úoutput_filer1   c                 C  s2   t j |¡}|j d¡\}}}t j ||¡› d�S ©Nr2   ú.py)r9   r:   Údirnamer5   Ú
rpartitionr8   )r/   r0   rS   Zdir_Ú_r5   r   r   r    rO   ‚   s    zbuild_ext._get_equivalent_stubzIterator[tuple[str, str]])r1   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+   rH   ÚoptimizerI   rE   rN   rO   Ú_compiled_file_name)
r/   r=   Úoptr0   rC   rD   rQ   Zregular_stubZinplace_cacheZoutput_cacher   r   r    Ú_get_output_mapping‡   s    


zbuild_ext._get_output_mapping)r>   r1   c           	      C  sâ   t  d¡}|r&t jj| d¡Ž | }n*t | |¡}tdƒ}t|t	ƒsLt
dƒ‚|}|| jkrÞ| j| }tƒ }|jrŠ|rŠ|d t|ƒ … | }t|tƒr²t j |¡\}}| j |t¡S trÞ|jrÞt j |¡\}}t j |d| ¡S |S )NZSETUPTOOLS_EXT_SUFFIXr2   Ú
EXT_SUFFIXzwConfiguration variable EXT_SUFFIX not found for this platform and environment variable SETUPTOOLS_EXT_SUFFIX is missingzdl-)r9   Úgetenvr:   r8   r7   r,   r6   r   Ú
isinstancerR   ÚOSErrorÚext_mapr)   Zpy_limited_apiÚlenr   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamic)	r/   r>   Zso_extr?   Ú
ext_suffixr0   Zabi3_suffixÚfnÚdr   r   r    r6       s,    

ÿ




zbuild_ext.get_ext_filenamec                 C  s&   t  | ¡ d | _g | _i | _d| _d S )NF)r,   Úinitialize_optionsrf   Úshlibsrc   Úeditable_mode©r/   r   r   r    rn   »   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¡ qb| j�r6d| _d S )Nc                 S  s   g | ]}t |tƒr|‘qS r   )ra   r   ©Ú.0r0   r   r   r    Ú
<listcomp>Æ   s     
 z.build_ext.finalize_options.<locals>.<listcomp>r2   r3   FT)r,   Úfinalize_optionsrI   Zcheck_extensions_listro   Úsetup_shlib_compilerr4   r5   Ú
_full_namerc   r7   Úlinks_to_dynamicri   ra   r   rj   rN   r6   Ú
_file_namer9   r:   rV   r8   r<   Úlibrary_dirsÚappendÚcurdirÚruntime_library_dirsrp   r+   )r/   r0   r>   ZltdÚnsr?   Zlibdirr   r   r    ru   Â   s0    



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   Údry_runÚforce)r   r   r   r€   rf   r!   Úinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macroÚ	librariesZset_librariesrz   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r/   r   r5   ÚvalueÚmacror   r   r    rv   á   s.      ÿ







zbuild_ext.setup_shlib_compilerc                 C  s   t |tƒr|jS t | |¡S ©N)ra   r   Úexport_symbolsr,   Úget_export_symbols©r/   r0   r   r   r    r‰   ü   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   ra   r   rf   r,   Úbuild_extensionrN   rH   r<   Ú
write_stub)r/   r0   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   )rw   )rs   Úlibr   r   r    rt     s     z.build_ext.links_to_dynamic.<locals>.<listcomp>r2   Nr3   r$   c                 3  s   | ]}ˆ| ˆ kV  qd S r‡   r   )rs   Úlibname©ZlibnamesÚpkgr   r    Ú	<genexpr>  s     z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysro   r8   rw   r7   Úanyr‚   rŠ   r   r�   r    rx     s     zbuild_ext.links_to_dynamicz	list[str]c                 C  s   t  | ¡|  ¡ •S r‡   )r,   Úget_source_filesÚ_get_internal_dependsrq   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krr||d
ƒ q<z|| jdd�}W n" t	k
r¨   ||dƒ Y q<Y nX z| 
|¡ W n" tk
rÚ   ||dƒ Y q<Y nX | ¡ 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)rs   r0   Údepr   r   r    r‘     s       z2build_ext._get_internal_depends.<locals>.<genexpr>rR   ÚNone)Ú	orig_pathÚreasonr1   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   r*   Zsrc_rootr9   r|   ÚresolverI   Úis_absoluteÚpartsrb   Úrelative_toÚ
ValueErrorÚas_posix)r/   Zproject_rootr—   r�   r˜   r:   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_outputsrq   r   r   r    r©   @  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>H  ó    z.build_ext.get_output_mapping.<locals>.<lambda>)Úkey)r^   r’   r¨   )r/   Úmappingr   r   r    r¦   E  s    zbuild_ext.get_output_mappingc                   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 )r2   N)rN   r9   r:   r8   r<   rw   r7   rr   rq   r   r    r‘   L  s   þz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s  s   | ]\}}|| V  qd S r‡   r   )rs   ÚbaseZfnextr   r   r    r‘   S  s     )rI   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsr¥   )r/   Zns_ext_basesÚpairsr   rq   r    Z__get_stubs_outputsJ  s
    
þzbuild_ext.__get_stubs_outputsc                 c  s"   dV  dV  |   d¡jrdV  d S )NrU   z.pycr=   z.pyo)rH   r[   rq   r   r   r    Z__get_output_extensionsU  s    z!build_ext.__get_output_extensionsc                 C  s0   t jj|f|j d¡žŽ d }|  |||¡ d S rT   )r9   r:   r8   rw   r7   rP   )r/   Ú
output_dirr0   rG   Ú	stub_filer   r   r    rŒ   [  s    zbuild_ext.write_stub)r¶   r0   c                 C  s¾   t  d|j|¡ |r,tj |¡r,t|d ƒ‚| js¬t|ddd��f}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 5 Q R X |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œ   rw   r9   r:   rJ   r
   r   Úopenr8   r'   r;   ry   ÚwriteÚ_compile_and_remove_stub)r/   r¶   r0   rG   ÚfÚcontentr   r   r    rP   _  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)r[   r€   r   rY   )	Údistutils.utilr¿   r   rH   r[   r9   r:   rJ   Úunlink)r/   r¶   r¿   r[   r   r   r    r¼   �  s    üz"build_ext._compile_and_remove_stubN)F)F)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rp   r+   r-   rE   r.   rO   r^   r6   rn   ru   rv   r‰   r‹   rx   r•   r–   r©   r¦   rª   r³   rŒ   rP   r¼   r   r   r   r    r   Z   s0   

	&
"r   Úbool)Údebugc                 C  s(   |   | j|||||||||	|
||¡ d S r‡   )ÚlinkZSHARED_LIBRARY)r/   ÚobjectsÚoutput_libnamerµ   r‚   rz   r}   rˆ   rÇ   Úextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r    rƒ   ”  s    órƒ   Zstaticc                 C  s^   |d kst ‚tj |¡\}}tj |¡\}}|  d¡ d¡rH|dd … }|  |||||¡ d S )Nr«   r�   é   )ÚAssertionErrorr9   r:   r7   re   rg   Ú
startswithZcreate_static_lib)r/   rÉ   rÊ   rµ   r‚   rz   r}   rˆ   rÇ   rË   rÌ   rÍ   rÎ   r?   r;   r0   r   r   r    rƒ   ·  s    )
NNNNNFNNNN)
NNNNNFNNNN)0Ú
__future__r   r±   r9   r   Zimportlib.machineryr   Zimportlib.utilr   r\   Úpathlibr   Útypingr   r   Zsetuptools.distr	   Zsetuptools.errorsr
   Zsetuptools.extensionr   r   Ú	distutilsr   Údistutils.ccompilerr   Údistutils.sysconfigr   r   Zdistutils.command.build_extr   r,   ZCython.Distutils.build_extÚ
__import__ÚImportErrorr   r   r!   r%   ri   rh   r   r5   ÚdlÚhasattrr'   r)   rƒ   r   r   r   r    Ú<module>   s~   
  9          ó!          ó