o
    “Ñ½bÎ  ã                   @   sÆ   d dl Z d dlZddlmZ g d¢Zddd„Zddd	„Zdd
d„Zzd dlm	Z	 W n e
y6   dd„ Z	Y nw dd„ Zz
eefZd dlZW n eyT   eZd dlZY nw dd„ Zdd„ Zdd„ ZdS )é    Né   )ÚVerificationError)ÚsourcesÚinclude_dirsÚlibrary_dirsÚextra_objectsÚdepends© c                 K   sH   t ƒ  ddlm} | g}|D ]}| tj |¡¡ q|d||dœ|¤ŽS )Nr   )Ú	Extension)Únamer   r	   )Ú_hack_at_distutilsÚdistutils.corer
   ÚappendÚosÚpathÚnormpath)ZsrcfilenameÚmodnamer   Úkwdsr
   Z
allsourcesÚsrcr	   r	   ú4usr/lib/python3.10/site-packages/cffi/ffiplatform.pyÚget_extension   s   r   c              
   C   sŒ   t ƒ  tj ¡ }z&t| |||ƒ}tj |¡}W | ¡ D ]\}}tj |¡|kr,|tj|< q|S | ¡ D ]\}}tj |¡|krD|tj|< q3w )z-Compile a C extension module using distutils.)	r   r   ÚenvironÚcopyÚ_buildr   ÚabspathÚitemsÚget)ÚtmpdirÚextÚcompiler_verboseÚdebugZsaved_environZoutputfilenameÚkeyÚvaluer	   r	   r   Úcompile   s   

€ý
€þr#   c              
   C   s  ddl m} dd l}dd l}|d|giƒ}| ¡  | d¡}|d u r&tjj}d|f|d< d|d< d| f|d	< d| f|d
< z/|j	 
d¡pDd}z|j	 |¡ | d¡ | d¡}	|	 ¡ \}
W |j	 
|¡ W |
S |j	 
|¡ w  |jj|jjfy‡ } z
td|jj|f ƒ‚d }~ww )Nr   )ÚDistributionÚext_modulesÚ	build_extÚffiplatformr    )r'   TÚforceÚ	build_libÚ
build_tempz%s: %s)r   r$   Údistutils.errorsZdistutils.logÚparse_config_filesÚget_option_dictÚsysÚflagsr    ÚlogÚset_thresholdÚset_verbosityÚrun_commandÚget_command_objÚget_outputsÚerrorsÚCompileErrorÚ	LinkErrorr   Ú	__class__Ú__name__)r   r   r   r    r$   Ú	distutilsÚdistÚoptionsZ	old_levelÚcmd_objZsonameÚer	   r	   r   r       s6   


ûÿ€þr   )Úsamefilec                 C   s   t j | ¡t j |¡kS ©N)r   r   r   )Úf1Úf2r	   r	   r   r@   A   s   r@   c                 C   s„   t j | ¡s| S | }g }	 |}t j |¡\}}||ks|s| S | |¡ zt|t jƒr6| ¡  t jj|Ž W S W n	 t	y@   Y nw qrA   )
r   r   ÚisabsÚsplitr   r@   ÚcurdirÚreverseÚjoinÚOSError)r   ÚdirÚnamesZprevdirr   r	   r	   r   Úmaybe_relative_pathD   s&   
þÿörL   c                 C   sÖ   t | tƒr| dt| ƒ| f ¡ d S t | tƒr9t|  ¡ ƒ}| dt|ƒ ¡ |D ]}t||ƒ t| | |ƒ q(d S t | tt	fƒrU| dt| ƒ ¡ | D ]}t||ƒ qKd S t | t
ƒrd| d| f ¡ d S td| f ƒ‚)Nz%ds%sz%ddz%dlz%diz7the keywords to verify() contains unsupported object %r)Ú
isinstanceÚstrÚwriteÚlenÚdictÚsortedÚkeysÚ_flattenÚlistÚtupleÚint_or_longÚ	TypeError)ÚxÚfrS   r!   r"   r	   r	   r   rT   _   s&   


þÿ
ÿrT   c                 C   s   t  ¡ }t| |ƒ | ¡ S rA   )Ú	cStringIOÚStringIOrT   Úgetvalue)rY   rZ   r	   r	   r   Úflattenr   s   
r^   c                  C   s2   t jdkrzdd l} W d S  ty   Y d S w d S )NÚwin32r   )r.   ÚplatformÚ
setuptoolsÚImportError)ra   r	   r	   r   r   w   s   
ÿýr   )r	   )r   N)r.   r   Úerrorr   ZLIST_OF_FILE_NAMESr   r#   r   Úos.pathr@   rb   rL   ÚintÚlongrW   r[   Ú	NameErrorÚiorT   r^   r   r	   r	   r	   r   Ú<module>   s,    


ÿþ