o
    5‘ði^G  ã                   @  sì  d dl m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
 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 erid dl m!Z" nzd dl#m!Z" e$dƒ W n e%y„   d dl m!Z" Y nw 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%y¼   Y nw dd„ Z0G dd„ de"ƒZ!e*sÐej-dkrâ										d&d'd"d#„Z1dS d$Z+										d&d'd%d#„Z1dS )(é    )ÚannotationsN)ÚIterator©ÚEXTENSION_SUFFIXES)Úcache_from_source)ÚPath)ÚTYPE_CHECKING)ÚDistribution)Ú	BaseError)Ú	ExtensionÚLibrary)Úlog)Únew_compiler)Úcustomize_compilerÚget_config_var)Ú	build_extzCython.Compiler.MainÚLDSHARED)Ú_config_varsc              	   C  sl   t jdkr0t ¡ }zdtd< dtd< dtd< t| ƒ W t ¡  t |¡ d S t ¡  t |¡ w 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   ú[/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/command/build_ext.pyÚ_customize_compiler_for_shlib+   s   
ÿ
ÿr!   FÚsharedr   TÚntÚRTLD_NOWc                  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_suffixO   s   ÿr&   c                   @  sê   e Zd ZU ded< dZdZd<dd„Zd=dd„Zd<dd„Zd>dd„Z	d?dd„Z
d@dd„Zdd„ Zd<dd„Zd<dd„Zdd „ Zd<d!d"„Zd#d$„ ZdAd&d'„ZdBd)d*„ZdAd+d,„ZdCd.d/„Zd0d1„ Zd2d3„ ZdDd<d4d5„ZdDdEd7d8„ZdFd9d:„Zd;S )Gr   r	   ÚdistributionFÚreturnÚNonec                 C  s2   | j d}| _ t | ¡ || _ |r|  ¡  dS dS )z;Build extensions in build directory, then copy if --inplaceFN)ÚinplaceÚ
_build_extÚrunÚcopy_extensions_to_source)ÚselfÚold_inplacer   r   r    r,   ^   s   
ÿzbuild_ext.runÚextr   útuple[str, str]c           
      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ÚjoinÚ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_equivalentf   s   


z!build_ext._get_inplace_equivalentc                 C  sp   |   d¡}| jD ]-}|  ||¡\}}tj |¡s|js$| j||| jd� |j	r5|  
||¡}| j||dd� qd S )Nr>   )ÚlevelT)Úcompile)Úget_finalized_commandÚ
extensionsrF   r:   r;   ÚexistsÚoptionalÚ	copy_fileÚverboseÚ_needs_stubÚ_get_equivalent_stubÚ_write_stub_file)r.   r>   r0   rD   rE   Úinplace_stubr   r   r    r-   p   s   

€õz#build_ext.copy_extensions_to_sourceÚoutput_fileÚstrc                 C  s2   t j |¡}|j d¡\}}}t j ||¡› d�S ©Nr2   ú.py)r:   r;   Údirnamer5   Ú
rpartitionr8   )r.   r0   rS   Údir_Ú_r5   r   r   r    rP   �   s   zbuild_ext._get_equivalent_stubúIterator[tuple[str, str]]c           
      c  s�   � | j sd S |  d¡}|  d¡jpd}| jD ]/}|  ||¡\}}||fV  |jrE|  ||¡}|  ||¡}t||d�}t||d�}	|	|fV  qd S )Nr>   Úinstall_libÚ )Úoptimization)r*   rI   ÚoptimizerJ   rF   rO   rP   Ú_compiled_file_name)
r.   r>   Úoptr0   rD   rE   rR   Úregular_stubÚinplace_cacheÚoutput_cacher   r   r    Ú_get_output_mapping†   s    €



€ðzbuild_ext._get_output_mappingr?   c           	      C  sâ   t  d¡}|rt jj| d¡Ž | }nt | |¡}tdƒ}t|t	ƒs&t
dƒ‚|}|| jv ro| j| }tƒ }|jrE|rE|d t|ƒ … | }t|tƒrYt j |¡\}}| j |t¡S tro|jrot j |¡\}}t j |d| ¡S |S )NÚSETUPTOOLS_EXT_SUFFIXr2   Ú
EXT_SUFFIXzwConfiguration variable EXT_SUFFIX not found for this platform and environment variable SETUPTOOLS_EXT_SUFFIX is missingzdl-)r:   Úgetenvr;   r8   r7   r+   r6   r   Ú
isinstancerT   ÚOSErrorÚext_mapr&   Úpy_limited_apiÚlenr   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamic)	r.   r?   Úso_extr@   Ú
ext_suffixr0   Ú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_optionsro   Úshlibsrk   Úeditable_mode©r.   r   r   r    ry   º   s
   

zbuild_ext.initialize_optionsc                 C  s8  t  | ¡ | jp	g | _|  | j¡ dd„ | jD ƒ| _| jr!|  ¡  | jD ]	}|  |j¡|_q$| jD ]`}|j}|| j	|< || j	| 
d¡d < | jrM|  |¡pNd}|oXtoXt|tƒ }||_||_|  |¡ }|_tj tj | j|¡¡}|r€||jvr€|j |¡ |r‘tr‘tj|jvr‘|j tj¡ q1| jršd| _d S d S )Nc                 S  s   g | ]	}t |tƒr|‘qS r   )ri   r   ©Ú.0r0   r   r   r    Ú
<listcomp>Å   s    z.build_ext.finalize_options.<locals>.<listcomp>r2   r3   FT)r+   Úfinalize_optionsrJ   Úcheck_extensions_listrz   Úsetup_shlib_compilerr4   r5   Ú
_full_namerk   r7   Úlinks_to_dynamicrr   ri   r   rs   rO   r6   Ú
_file_namer:   r;   rW   r8   r=   Úlibrary_dirsÚappendÚcurdirÚruntime_library_dirsr{   r*   )r.   r0   r?   ÚltdÚnsr@   Úlibdirr   r   r    r€   Á   s4   



€
ÿzbuild_ext.finalize_optionsc                 C  sâ   t | j| jd� }| _t|ƒ | jd ur| | j¡ | jd ur-| jD ]
\}}| ||¡ q"| j	d ur=| j	D ]}| 
|¡ q5| jd urH| | j¡ | jd urS| | j¡ | jd ur^| | j¡ | jd uri| | j¡ t |¡|_d S )N)r   Úforce)r   r   r�   ro   r!   Úinclude_dirsÚset_include_dirsÚdefineÚdefine_macroÚundefÚundefine_macroÚ	librariesÚset_librariesr†   Úset_library_dirsÚrpathÚset_runtime_library_dirsÚlink_objectsÚset_link_objectsÚlink_shared_objectÚ__get__)r.   r   r5   ÚvalueÚmacror   r   r    r‚   à   s*   ÿ







zbuild_ext.setup_shlib_compilerc                 C  s   t |tƒr|jS t | |¡S ©N)ri   r   Úexport_symbolsr+   Úget_export_symbols©r.   r0   r   r   r    r¡   û   s   
zbuild_ext.get_export_symbolsc                 C  sl   |  ¡  | j}z*t|tƒr| j| _t | |¡ |jr,|  d¡j	}|  
||¡ W || _d S W || _d S || _w )Nr>   )Ú_convert_pyx_sources_to_langr   ri   r   ro   r+   Úbuild_extensionrO   rI   r=   Ú
write_stub)r.   r0   Ú	_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   )rƒ   )r~   Úlibr   r   r    r     s    z.build_ext.links_to_dynamic.<locals>.<listcomp>r2   Nr3   r]   c                 3  s   � | ]	}ˆ| ˆ v V  qd S rŸ   r   )r~   Úlibname©ÚlibnamesÚpkgr   r    Ú	<genexpr>  ó   € z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysrz   r8   rƒ   r7   Úanyr”   r¢   r   r©   r    r„     s    zbuild_ext.links_to_dynamicú	list[str]c                 C  s   g t  | ¡¢|  ¡ ¢S rŸ   )r+   Úget_source_filesÚ_get_internal_dependsr|   r   r   r    r²     s   zbuild_ext.get_source_filesúIterator[str]c              	   c  sÚ   � t | jjptjƒ ¡ }dd„ | jD ƒ}ddd	„}|D ]O}t |ƒ}| ¡ r+||d
ƒ qd|jv r6||dƒ qz
|| jdd�}W n t	yN   ||dƒ Y qw z| 
|¡ W n tyd   ||dƒ Y qw | ¡ 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)r~   r0   Údepr   r   r    r¬     s   € z2build_ext._get_internal_depends.<locals>.<genexpr>Ú	orig_pathrT   Úreasonr(   r)   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·   rT   r¸   rT   r(   r)   )r   r'   Úsrc_rootr:   rˆ   ÚresolverJ   Úis_absoluteÚpartsrj   Úrelative_toÚ
ValueErrorÚas_posix)r.   Úproject_rootrµ   rº   r¶   r;   Úresolvedr   r   r    r³     s4   €




þ
þé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_outputsr|   r   r   r    rÉ   ?  s   zbuild_ext.get_outputsúdict[str, str]c                 C  s   |   ¡ }tt|t d¡d�ƒS )z1See :class:`setuptools.commands.build.SubCommand`r   )Úkey)re   r®   rÈ   ÚoperatorÚ
itemgetter)r.   Úmappingr   r   r    rÆ   D  s   zbuild_ext.get_output_mappingc                   s6   ‡ fdd„ˆ j D ƒ}t |ˆ  ¡ ¡}tdd„ |D ƒƒS )Nc                 3  s4   � | ]}|j rtjjˆ jg|j d ¡¢R Ž V  qdS )r2   N)rO   r:   r;   r8   r=   rƒ   r7   r}   r|   r   r    r¬   K  s   € ý
ÿz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s  s   � | ]	\}}|| V  qd S rŸ   r   )r~   ÚbaseÚfnextr   r   r    r¬   R  r­   )rJ   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsrÅ   )r.   Úns_ext_basesÚpairsr   r|   r    Ú__get_stubs_outputsI  s
   
þzbuild_ext.__get_stubs_outputsc                 c  s(   � dV  dV  |   d¡jrdV  d S d S )NrV   z.pycr>   z.pyo)rI   r_   r|   r   r   r    Ú__get_output_extensionsT  s   €
ÿz!build_ext.__get_output_extensionsc                 C  s2   t jj|g|j d¡¢R Ž d }|  |||¡ d S rU   )r:   r;   r8   rƒ   r7   rQ   )r.   Ú
output_dirr0   rH   Ú	stub_filer   r   r    r¥   Z  s    zbuild_ext.write_stubrÚ   c                 C  s¨   t  d|j|¡ |rtj |¡rt|d ƒ‚t|ddd��$}t 	dtj 
|j¡›d�¡ ¡  ddt  ¡}| |¡ W d   ƒ n1 sDw   Y  |rR|  |¡ d S d S )	Nz writing stub loader for %s to %sz already exists! Please delete.Úwzutf-8)Úencodinga  
                def __bootstrap__():
                   global __bootstrap__, __file__, __loader__
                   import sys, os, importlib.resources as irs, importlib.util
                #rtld   import dl
                   with irs.files(__name__).joinpath(
                     a;  ) as __file__:
                      del __bootstrap__
                      if '__loader__' in globals():
                          del __loader__
                #rtld      old_flags = sys.getdlopenflags()
                      old_dir = os.getcwd()
                      try:
                        os.chdir(os.path.dirname(__file__))
                #rtld        sys.setdlopenflags(dl.RTLD_NOW)
                        spec = importlib.util.spec_from_file_location(
                                   __name__, __file__)
                        mod = importlib.util.module_from_spec(spec)
                        spec.loader.exec_module(mod)
                      finally:
                #rtld        sys.setdlopenflags(old_flags)
                        os.chdir(old_dir)
                __bootstrap__()
                z#rtld)r   r¹   rƒ   r:   r;   rK   r
   ÚopenÚtextwrapÚdedentr<   r…   ÚlstripÚreplaceÚ	have_rtldÚwriteÚ_compile_and_remove_stub)r.   rÚ   r0   rH   ÚfÚcontentr   r   r    rQ   ^  s    úåâÿzbuild_ext._write_stub_filec                 C  s^   ddl m} ||gddd� |  d¡j}|dkr ||g|dd� tj |¡r-t |¡ d S d S )Nr   )Úbyte_compileT)r_   r�   r\   )Údistutils.utilrç   rI   r_   r:   r;   rK   Úunlink)r.   rÚ   rç   r_   r   r   r    rä   „  s   ýÿz"build_ext._compile_and_remove_stubN)r(   r)   )r0   r   r(   r1   )r0   r   rS   rT   r(   rT   )r(   r[   )r?   rT   r(   rT   )r(   r±   )r(   r´   )r(   rË   )F)rÚ   rT   r0   r   )rÚ   rT   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r{   r*   r,   rF   r-   rP   re   r6   ry   r€   r‚   r¡   r¤   r„   r²   r³   rÉ   rÆ   rÊ   rÔ   r¥   rQ   rä   r   r   r   r    r   Y   s2   
 










	

&
&r   ÚdebugÚboolr(   r)   c                 C  s(   |   | j|||||||||	|
||¡ d S rŸ   )ÚlinkÚSHARED_LIBRARY)r.   ÚobjectsÚoutput_libnamerÙ   r”   r†   r‰   r    rî   Úextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r    r›   –  s   ór›   Ústaticc                 C  s^   |d u sJ ‚t j |¡\}}t j |¡\}}|  d¡ d¡r$|dd … }|  |||||¡ d S )NÚxr§   é   )r:   r;   r7   rn   rp   Ú
startswithÚcreate_static_lib)r.   rò   ró   rÙ   r”   r†   r‰   r    rî   rô   rõ   rö   r÷   r@   r<   Ú_extr   r   r    r›   ¹  s   )
NNNNNFNNNN)rî   rï   r(   r)   )2Ú
__future__r   rÒ   rÍ   r:   r   rÞ   Úcollections.abcr   Úimportlib.machineryr   Úimportlib.utilr   r`   Úpathlibr   Útypingr   Úsetuptools.distr	   Úsetuptools.errorsr
   Úsetuptools.extensionr   r   Ú	distutilsr   Údistutils.ccompilerr   Údistutils.sysconfigr   r   Údistutils.command.build_extr   r+   ÚCython.Distutils.build_extÚ
__import__ÚImportErrorr   r   r!   râ   rr   rq   r   r5   ÚdlÚhasattrr&   r›   r   r   r   r    Ú<module>   sˆ    ÿ

ÿ
  <ó!ó