a
   2TE@                   @   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
yl   dd Z	Y n0 dd ZzeefZd dlZW n ey   eZd dlZY n0 dd Zdd Zdd ZdS )    N   )VerificationError)sourcesZinclude_dirsZlibrary_dirsZextra_objectsZdepends c                 K   sH   t   ddlm} | g}|D ]}|tj| q|f ||d|S )Nr   )	Extension)namer   )_hack_at_distutilsdistutils.corer   appendospathnormpath)Zsrcfilenamemodnamer   kwdsr   Z
allsourcessrcr   r   4/usr/lib/python3.9/site-packages/cffi/ffiplatform.pyget_extension   s    r   c              
   C   s   t   tj }zJt| |||}tj|}W | D ]"\}}tj||kr6|tj|< q6n.| D ]"\}}tj||krd|tj|< qd0 |S )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 rLtjj}d|f|d< d|d< d| f|d	< d| f|d
< z^|j	
dpd}z:|j	| |d |d}	|	 \}
W |j	
| n|j	
| 0 W nF |jj|jjfy } z td|jj|f W Y d }~n
d }~0 0 |
S )Nr   )DistributionZext_modulesZ	build_extffiplatformr   )r!   TforceZ	build_libZ
build_tempz%s: %s)r	   r    Zdistutils.errorsZdistutils.logZparse_config_filesZget_option_dictsysflagsr   logZset_thresholdZset_verbosityZrun_commandZget_command_objZget_outputserrorsZCompileErrorZ	LinkErrorr   	__class____name__)r   r   r   r   r    Z	distutilsZdistoptionsZ	old_levelZcmd_objZsonameer   r   r   r       s0    


 *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s8|s<| S || z&t|t jrj|  t jj| W S W q t	y~   Y q0 qd S r,   )
r   r   isabssplitr
   r+   curdirreversejoinOSError)r   dirnamesZprevdirr   r   r   r   maybe_relative_pathD   s    
r7   c                 C   s   t | tr"|dt| | f  nt | trnt|  }|dt|  |D ]}t|| t| | | qNn`t | tt	fr|dt|   | D ]}t|| qn*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)rD   rE   r   r   r   flattenr   s    
rI   c                  C   s.   t jdkr*zdd l} W n ty(   Y n0 d S )Nwin32r   )r#   platform
setuptoolsImportError)rL   r   r   r   r   w   s
    
r   )r   )r   N)r   N)r#   r   errorr   ZLIST_OF_FILE_NAMESr   r   r   Zos.pathr+   rM   r7   intZlongrB   rF   	NameErrorior?   rI   r   r   r   r   r   <module>   s&   


