U
    Ê¹Öh   ã                   @   sÈ   d dl Z d dlZddlmZ dddddgZdd
d„Zddd„Zddd„Zzd dlm	Z	 W n e
k
rt   dd„ Z	Y nX dd„ ZzeefZd dlZW n  ek
r²   eZd dlZY nX dd„ Zdd„ ZdS )é    Né   )ÚVerificationErrorÚsourcesZinclude_dirsZlibrary_dirsZextra_objectsZdepends© c                 K   sB   ddl m} | g}|D ]}| tj |¡¡ q|f ||dœ|—ŽS )Nr   )Ú	Extension)Únamer   )Úcffi._shimmed_dist_utilsr   ÚappendÚosÚpathÚnormpath)ZsrcfilenameÚmodnamer   Úkwdsr   Z
allsourcesÚsrcr   r   ú6./venv/lib/python3.8/site-packages/cffi/ffiplatform.pyÚget_extension   s
    r   c              
   C   s\   t j ¡ }zt| |||ƒ}t j |¡}W 5 | ¡ D ]"\}}t j |¡|kr2|t j|< q2X |S )z-Compile a C extension module using distutils.)r
   ÚenvironÚcopyÚitemsÚgetÚ_buildr   Úabspath)ÚtmpdirÚextÚcompiler_verboseÚdebugZsaved_environÚkeyÚvalueZoutputfilenamer   r   r   Úcompile   s    
r   c              
   C   sþ   ddl m}m}m}m}m} |d|giƒ}	|	 ¡  |	 d¡}
|d krLtj	j
}d|f|
d< d|
d< d| f|
d	< d| f|
d
< zF|dƒp„d}z*||ƒ |	 d¡ |	 d¡}| ¡ \}W 5 ||ƒ X W n: ||fk
rø } ztd|jj|f ƒ‚W 5 d }~X Y nX |S )Nr   )ÚDistributionÚCompileErrorÚ	LinkErrorÚset_thresholdÚset_verbosityZext_modulesZ	build_extÚffiplatformr   )r$   TÚforceZ	build_libZ
build_tempz%s: %s)r   r   r    r!   r"   r#   Zparse_config_filesZget_option_dictÚsysÚflagsr   Zrun_commandZget_command_objZget_outputsr   Ú	__class__Ú__name__)r   r   r   r   r   r    r!   r"   r#   ZdistÚoptionsZ	old_levelZcmd_objZsonameÚer   r   r   r      s*    


&r   )Úsamefilec                 C   s   t j | ¡t j |¡kS ©N)r
   r   r   )Úf1Úf2r   r   r   r,   =   s    r,   c                 C   sˆ   t j | ¡s| S | }g }|}t j |¡\}}||ks8|s<| S | |¡ z&t|t jƒrj| ¡  t jj|Ž W S W q t	k
r€   Y qX qd S r-   )
r
   r   ÚisabsÚsplitr	   r,   ÚcurdirÚreverseÚjoinÚOSError)r   ÚdirÚnamesZprevdirr   r   r   r   Úmaybe_relative_path@   s    
r8   c                 C   sÒ   t | tƒr"| dt| ƒ| f ¡ n¬t | tƒrnt|  ¡ ƒ}| dt|ƒ ¡ |D ]}t||ƒ t| | |ƒ qNn`t | tt	fƒr¤| dt| ƒ ¡ | D ]}t||ƒ q’n*t | t
ƒrÀ| d| f ¡ ntd| f ƒ‚d S )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Úfr?   r   r   r   r   r   r@   [   s"    



ÿr@   c                 C   s   t  ¡ }t| |ƒ | ¡ S r-   )Ú	cStringIOÚStringIOr@   Úgetvalue)rE   rF   r   r   r   Úflattenn   s    
rJ   )r   )r   N)r   N)r&   r
   Úerrorr   ZLIST_OF_FILE_NAMESr   r   r   Zos.pathr,   ÚImportErrorr8   ÚintZlongrC   rG   Ú	NameErrorÚior@   rJ   r   r   r   r   Ú<module>   s*    ÿ


