a
    ßðïa™  ã                   @   sZ   d dl Zd dlmZmZ d dlZd dlZd dlmZ ej	j
j
Zdd„ ZG dd„ deƒZ
dS )é    N)ÚnewerÚnewer_group)Úsha1c                 C   s   t j | ¡d | S ©Nr   ©ÚosÚpathÚsplitext)r   Z
new_suffix© r
   ú+lib/python3.9/site-packages/sipdistutils.pyÚreplace_suffix   s    r   c                   @   s˜   e Zd ZdZejdd… Zdd„ eD ƒZedg7 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d„ ZdS )Ú	build_extzWCompile SIP descriptions, then build C/C++ extensions (compile/link to build directory)Nc                 C   s   g | ]}|d    d¡s|‘qS )r   Zswig)Ú
startswith)Ú.0Zoptr
   r
   r   Ú
<listcomp>$   ó    zbuild_ext.<listcomp>)z	sip-opts=Nz list of sip command line optionsc                 C   s   t  | ¡ d | _d S ©N)Úbuild_ext_baseÚinitialize_optionsÚsip_opts©Úselfr
   r
   r   r   *   s    
zbuild_ext.initialize_optionsc                 C   s.   t  | ¡ | jd u rg | _n| j d¡| _d S )Nú )r   Úfinalize_optionsr   Úsplitr   r
   r
   r   r   .   s    

zbuild_ext.finalize_optionsc                 C   sp   t |ƒ ¡ D ]R}| dd¡\}}| ¡ dkrg }| ¡ D ]}| tj |  ¡ |¡¡ q8|  S qt	d| ƒ‚dS )z¨
        Parse the sbf file specified to extract the name of the generated source
        files. Make them absolute assuming they reside in the temp directory.
        ú=é   Úsourceszcannot parse SIP-generated '%s'N)
ÚopenÚ	readlinesr   ÚstripÚappendr   r   ÚjoinÚ_sip_output_dirÚRuntimeError)r   ÚsbfÚLÚkeyÚvalueÚoutÚor
   r
   r   Ú_get_sip_output_list5   s    
zbuild_ext._get_sip_output_listc                 C   sD   dd l }| ¡ }tjdkr>tj tj |j¡¡d s>|jd S |jS )Nr   Úntr   z.exe)Ú	sipconfigÚConfigurationr   Únamer   r	   ÚbasenameÚsip_bin©r   r-   Zcfgr
   r
   r   Ú	_find_sipD   s    

zbuild_ext._find_sipc                 C   s   dd l }| ¡ }|jS r   )r-   r.   Zsip_inc_dirr2   r
   r
   r   Ú_sip_inc_dirL   s    zbuild_ext._sip_inc_dirc                 C   s   dd l }| ¡ }|jS r   )r-   r.   Zdefault_sip_dirr2   r
   r
   r   Ú_sip_sipfiles_dirQ   s    zbuild_ext._sip_sipfiles_dirc                 C   s   |   ¡ }tt|dƒ ¡ ƒ ¡ S )NÚrb)r3   r   r   ÚreadZ	hexdigest)r   r1   r
   r
   r   Ú_sip_calc_signatureV   s    zbuild_ext._sip_calc_signaturec                 C   s   t j |  ¡ d¡S )Nzsip.signature)r   r   r"   r#   r   r
   r
   r   Ú_sip_signature_fileZ   s    zbuild_ext._sip_signature_filec                 C   s   | j S r   )Z
build_tempr   r
   r
   r   r#   ]   s    zbuild_ext._sip_output_dirc                 C   st   | j }| j s^dd„ |jD ƒ}|r^|  ¡ }tj |¡s<d| _ n"t|ƒ ¡ }|  ¡ }||kr^d| _ t	 
| |¡ || _ d S )Nc                 S   s   g | ]}|  d ¡r|‘qS ©ú.sip©Úendswith©r   Úsourcer
   r
   r   r   d   r   z-build_ext.build_extension.<locals>.<listcomp>T)Úforcer   r9   r   r   Úisfiler   r7   r8   r   Úbuild_extension)r   ZextZoldforceÚsip_sourcesZsigfileZold_sigZnew_sigr
   r
   r   rB   `   s    zbuild_ext.build_extensionc                 C   s:  | j s
d S |d urFt| jƒdkr.| j |j¡ |j |  ¡ ¡ |j}n| j |  ¡ ¡ g }dd„ |D ƒ}t	j
 |  ¡ ¡s†t	 |  ¡ ¡ g }dd„ |D ƒ}dd„ |D ƒ}g }|  ¡ }|D ]z}t	j
 |¡}	t	j
 |  ¡ t|	dƒ¡}
t|g| |
ƒsö| jr|  |||
¡ t|  ¡ dƒ |  ¡ ¡ |  |
¡}| |¡ q¶|| S )Nr   c                 S   s$   g | ]}t j |¡d  dkr|‘qS )r   r;   r   )r   Úfr
   r
   r   r   ˆ   r   z*build_ext.swig_sources.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡r|‘qS r:   r<   r>   r
   r
   r   r      r   c                 S   s   g | ]}|  d ¡s|‘qS r:   r<   r>   r
   r
   r   r   ‘   r   z.sbfÚw)Ú
extensionsÚlenr   ÚextendZ	swig_optsZinclude_dirsr!   r4   Údependsr   r   Úisdirr#   Úmakedirsr3   r0   r"   r   r   r@   Ú_sip_compiler   r9   Úwriter8   r+   )r   r   Ú	extensionrI   rC   Zother_sourcesZgenerated_sourcesr1   ZsipZsipbasenamer%   r)   r
   r
   r   Úswig_sourcess   s4    
zbuild_ext.swig_sourcesc              
   C   s0   |   |g| j d|  ¡ d|d|  ¡ |g ¡ d S )Nz-cz-bz-I)Zspawnr   r#   r5   )r   r1   r?   r%   r
   r
   r   rL   ¢   s    ýÿzbuild_ext._sip_compile)N)Ú__name__Ú
__module__Ú__qualname__Zdescriptionr   Zuser_optionsr   r   r+   r3   r4   r5   r8   r9   r#   rB   rO   rL   r
   r
   r
   r   r      s$   ÿ
/r   )Zdistutils.command.build_extZ	distutilsZdistutils.dep_utilr   r   r   ÚsysZhashlibr   Zcommandr   r   r   r
   r
   r
   r   Ú<module>   s   
