o
    (c<1                     @   s  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m	Z	m
Z
mZ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 ddlmZmZ zd dlmZ W n e yk   dZY nw deddfddZ!deded dee ddfddZ"dZ#dS )    N)log)clean)ListSetTupleTypecast)	build_ext)install)install_lib)install_scripts)sdist)Distribution)Literal   )RustBinRustExtension)bdist_wheeldistreturnc                    sh  t tt | jdt}|j 	|j |j 		ddg 
d dd< g }| jD ]	}|	|  q0|rc| jsEd|i| _n| jd}|r\|D ]}||vrZ|
| qOn|}|| jd< G 	fddd|}|| jd< t tt | jd	tj 
d
 G fddd}|| jd	< t tt | jdtG fddd}|| jd< t tt | jdtG fddd}	|	| jd< t tt | jdtG fddd}
|
| jd< t tt | jdtG fddd}|| jd< td ur2t tt | jdt}|j   
d
 G  fddd|}|| jd< d S d S )Nr   )vendor-cratesNzvendor Rust crates)no-vendor-cratesNz?don't vendor Rust crates.[default; enable with --vendor-crates]r   r   console_scriptsc                       s8   e Zd ZZZZd fddZd fddZ  ZS )z0add_rust_extension.<locals>.sdist_rust_extensionr   Nc                    s   t    d| _d S )Nr   )superinitialize_optionsvendor_cratesself	__class__ Busr/lib/python3.10/site-packages/setuptools_rust/setuptools_ext.pyr   B   s   

zCadd_rust_extension.<locals>.sdist_rust_extension.initialize_optionsc                    s  | j rg }t }| jjD ]}||j |jr||j q|r| j }t	j
|d}| | t	j
|d}t	j
|d}ddg}|rL|t| |dd  D ]}	|d ||	 qR|d|d |g tj|d	d
 t}
d }dt	j ddt	j dfD ]}|| jjv r|} nq|rt	j
||}t|d}|
| d 7 }
W d    n1 sw   Y  t|d}||
 W d    n1 sw   Y  t   d S )Nz.cargozconfig.tomlvendorZcargor   z--syncz--manifest-pathr   T)checkconfigrb   
wb)r   setdistributionrust_extensionsappendpathcargo_manifest_argsupdateget_fullnameosjoinmkpathextendsorted
subprocessrun_CARGO_VENDOR_CONFIGsepfilelistfilesopenreadwriter   make_distribution)r   Zmanifest_pathsr-   extbase_dirZdot_cargo_pathZcargo_config_pathZvendor_pathcommand
extra_pathZcargo_configZexisting_cargo_configfilenamefr   r    r!   r>   F   sT   


zBadd_rust_extension.<locals>.sdist_rust_extension.make_distributionr   N)	__name__
__module____qualname__user_optionsboolean_optionsnegative_optr   r>   __classcell__r    )sdist_boolean_optionssdist_negative_optsdist_optionsr   r!   sdist_rust_extension=   s    rP   r	   )targetNzBuild for the target triplec                       s0   e Zd ZZd fddZdfddZ  ZS )z4add_rust_extension.<locals>.build_ext_rust_extensionr   Nc                       t    td| _d S NZCARGO_BUILD_TARGETr   r   r0   getenvrQ   r   r   r    r!   r         
zGadd_rust_extension.<locals>.build_ext_rust_extension.initialize_optionsc                    sr   | j jr2td | d}| j|_| j|_| j|_| j  	di }|	dp*| j
}||_
|   |  d S )Nzrunning build_rust
build_rustr   z	plat-name)r)   r*   r   infoget_finalized_commandZinplacerQ   verboseget_cmdline_optionsget	plat_namer6   )r   rW   optionsr]   )build_ext_base_classr    r!   r6      s   

z8add_rust_extension.<locals>.build_ext_rust_extension.runrE   )rF   rG   rH   rI   r   r6   rL   r    )r_   build_ext_optionsr   r!   build_ext_rust_extension   s    ra   r   c                          e Zd Zd fddZdS )z0add_rust_extension.<locals>.clean_rust_extensionr   Nc                    s"     |  | js| d d S d S )NZ
clean_rust)r6   dry_runrun_commandr   clean_base_classr    r!   r6      s   
z4add_rust_extension.<locals>.clean_rust_extension.runrE   rF   rG   rH   r6   r    re   r    r!   clean_rust_extension       rh   r
   c                       rb   )z2add_rust_extension.<locals>.install_rust_extensionr   Nc                    sB     |  d}| jjrtdd | jjD }|r| d d S d S )NFc                 s   s    | ]}t |tV  qd S N)
isinstancer   ).0r?   r    r    r!   	<genexpr>   s
    
zIadd_rust_extension.<locals>.install_rust_extension.run.<locals>.<genexpr>r   )r6   r)   r*   anyrd   )r   Zinstall_rustbininstall_base_classr    r!   r6      s   
z6add_rust_extension.<locals>.install_rust_extension.runrE   rg   r    ro   r    r!   install_rust_extension   ri   rq   r   c                       s"   e Zd Zdee f fddZdS )z6add_rust_extension.<locals>.install_lib_rust_extensionr   c                    s     | }| d}tj| j|jd}| jjr>t	
d}| jjD ]}|j}|d ur.||7 }t|tr=|tj|| q!|S )NrW   scriptsEXE)get_exclusionsrY   r0   r,   r1   install_dirdata_dirr)   r*   	sysconfigget_config_varnamerk   r   add)r   Z
exclusionsrW   scripts_pathexer?   Zexecutable_nameinstall_lib_base_classr    r!   rt      s   




zEadd_rust_extension.<locals>.install_lib_rust_extension.get_exclusionsN)rF   rG   rH   r   strrt   r    r}   r    r!   install_lib_rust_extension   s    r   r   c                       rb   )z:add_rust_extension.<locals>.install_scripts_rust_extensionr   Nc              	      s     |  | d}| d}tj|j|jd}tj|rWt|D ]4}tj||}tj	|rVt
tj|d}| j|| dd W d    n1 sQw   Y  q$d S d S )Nr	   rW   rr   r%   b)mode)r6   rY   r0   r,   r1   	build_librv   isdirlistdirisfiler;   Zwrite_scriptr<   )r   r	   rW   r{   fileZscript_pathZscript_readerinstall_scripts_base_classr    r!   r6      s    



z>add_rust_extension.<locals>.install_scripts_rust_extension.runrE   rg   r    r   r    r!   install_scripts_rust_extension   ri   r   r   c                       s>   e Zd ZZd fddZdeeeef f fddZ  ZS )z6add_rust_extension.<locals>.bdist_wheel_rust_extensionr   Nc                    rR   rS   rT   r   r   r    r!   r      rV   zIadd_rust_extension.<locals>.bdist_wheel_rust_extension.initialize_optionsc                    s   t   \}}}td}d}| jdr|rd|v od|v }|rJ|drJddlm} td	}|d u rAd
|	ddd }|| j
d|}|||fS )NZ	ARCHFLAGSFzmacosx-x86_64arm64Zmacosx_r   )calculate_macosx_platform_tagMACOSX_DEPLOYMENT_TARGET._r      zmacosx-{}-universal2)r   get_tagr0   rU   r]   
startswithZwheel.macosx_libfiler   r1   splitZ	bdist_dirformat)r   pythonabiplatZ
arch_flags
universal2r   Zmacos_targetr   r    r!   r      s   


z>add_rust_extension.<locals>.bdist_wheel_rust_extension.get_tagrE   )	rF   rG   rH   rI   r   r   r   r   rL   r    )bdist_wheel_optionsr   r!   bdist_wheel_rust_extension   s    $r   )r   r   r   cmdclassr\   rI   copyrJ   rK   r3   r+   r*   entry_pointsr	   r   r
   r   r   r   )r   Zsdist_base_classr   r?   Z
ep_scriptsscriptrP   ra   rh   rq   r   r   Zbdist_wheel_base_classr   r    )
r   r_   r`   rf   rp   r~   r   rM   rN   rO   r!   add_rust_extension   sx   








F









r   attrr*   valuec                    sB   |dksJ t |dk | j fdd| _ rt|  d S d S )Nr*   r   c                      s
    p S rj   r    r    Zhas_rust_extensionsZorig_has_ext_modulesr    r!   <lambda>  s   
 z!rust_extensions.<locals>.<lambda>)lenhas_ext_modulesr   )r   r   r   r    r   r!   r*     s   sm   
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = ".cargo/vendor"
)$r0   r5   rw   	distutilsr   Zdistutils.command.cleanr   typingr   r   r   r   r   Zsetuptools.command.build_extr	   Zsetuptools.command.installr
   Zsetuptools.command.install_libr   Z"setuptools.command.install_scriptsr   Zsetuptools.command.sdistr   setuptools.distr   typing_extensionsr   	extensionr   r   Zwheel.bdist_wheelr   ImportErrorr   r*   r7   r    r    r    r!   <module>   s>     x
