B
    ]                 @   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yd dlm	Z	 W n e
k
rt   dd Z	Y nX dd Zy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d ZdS )    N   )VerificationErrorsourcesZinclude_dirsZlibrary_dirsZextra_objectsZdepends c             K   sL   t   ddlm} | g}x|D ]}|tj| qW |f ||d|S )Nr   )	Extension)namer   )_hack_at_distutilsdistutils.corer   appendospathnormpath)Zsrcfilenamemodnamer   kwdsr   Z
allsourcessrcr   r   /lib/python3.7/site-packages/cffi/ffiplatform.pyget_extension   s    
r   c          
   C   sf   t   tj }zt| |||}tj|}W dx.| D ]"\}}tj||kr:|tj|< q:W X |S )z-Compile a C extension module using distutils.N)	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 krLtjj}d|f|d< d|d< d| f|d	< d| f|d
< yR|j	
dpd}z.|j	| |d |d}	|	 \}
W d |j	
| X W nD |jj|jjfk
r } ztd|jj|f W d d }~X Y nX |
S )Nr   )DistributionZext_modulesZ	build_extffiplatformr   )r!   TZ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distZ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)   A   s    r)   c             C   s   t j| s| S | }g }xl|}t j|\}}||ks:|s>| S || y$t|t jrj|  t jj| S W q t	k
r   Y qX qW d S )N)
r   r   isabssplitr
   r)   curdirreversejoinOSError)r   dirnamesZprevdirr   r   r   r   maybe_relative_pathD   s     
r4   c             C   s   t | tr"|dt| | f  nt | trrt|  }|dt|  x|D ]}t|| t| | | qPW ndt | tt	fr|dt|   xB| D ]}t|| qW 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 )N)	cStringIOStringIOr<   getvalue)rA   rB   r   r   r   flattenr   s    
rF   c              C   s0   t jdkr,ydd l} W n tk
r*   Y nX d S )NZwin32r   )r"   platform
setuptoolsImportError)rH   r   r   r   r   w   s
    
r   )r   )r   N)r   N)r"   r   errorr   ZLIST_OF_FILE_NAMESr   r   r   os.pathr)   rI   r4   intZlongr?   rC   	NameErrorior<   rF   r   r   r   r   r   <module>   s(   


