3
.W                 @   sf   d dl Z ye W n ek
r(   eZY nX dd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )    Nc             C   s   ddl m} || d S )Nr   )DistutilsSetupError)distutils.errorsr   )msgr    r   S/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cffi/setuptools_ext.pyerror	   s    r   c             C   s@   t | }|j }W d Q R X |d7 }t|| d}t||| d S )N
exec)openreadcompiler	   )filenameglobfsrccoder   r   r   execfile   s
    
r   c             C   s  ddl m} t|ts*tdt|jf  t|}y|jd\}}W n" t	k
rf   td|f  Y nX t
jj|sd}|jddd	 }t
jj|rd
|d | f }td||f  d|d}t|| y|| }W n$ tk
r   td||f  Y nX t||s| }t||s0td|t|jf  t|dsJtd|f  |j\}	}
}}|jrr|j }|j| |
d krt| ||	 nt| ||	|
|| d S )Nr   )FFIzEargument to 'cffi_modules=...' must be a str or a list of str, not %r:z3%r must be of the form 'path/build.py:ffi_variable' ./z.pyz (rewrite cffi_modules to [%r])z#%r does not name an existing file%sZ__cffi__)__name____file__z!%r: object %r not found in modulez"%r is not an FFI instance (got %r)_assigned_sourcez*%r: the set_source() method was not called)Zcffi.apir   
isinstance
basestringr   typer   strsplit
ValueErrorospathexistsreplacer   KeyErrorhasattrr   Z_windows_unicodecopyZ_apply_windows_unicode_add_py_module_add_c_module)distZmod_specr   Zbuild_file_nameZffi_var_nameextZ	rewrittenZmod_varsffimodule_namesourcesource_extensionkwdsr   r   r   add_cffi_module   sL    




r1   c             C   sZ   d|krVddl }y(t|jjdd }|dkr6d|d< W n tk
rT   d|d< Y nX |S )z
    Add py_limited_api to kwds if setuptools >= 26 is in use.
    Do not alter the setting if it already exists.
    Setuptools takes care of ignoring the flag on Python 2 and PyPy.
    py_limited_apir   Nr      T)
setuptoolsint__version__	partitionr    )	Extensionr0   r4   Zsetuptools_major_versionr   r   r   _set_py_limited_apiH   s    r9   c       
   	      s   ddl m} ddlm} ddlm ddlm ddlm	 dg}|j
|jdg  t||}|f |d	|d	fd
d	| jd krg | _| jj | jjd| G  fddd }	|	| jd< d S )Nr   )r8   )	build_ext)mkpath)log)
recompilerz$PLACEHOLDERsources)namer>   c                s\   t jj|  }jd|  |  |d k	r:|  j|}|sXjd |S )Nzgenerating cffi module %rzalready up-to-date)r!   r"   joininfoZmake_c_source)Ztmpdirpre_runZc_fileupdated)r+   r,   r<   r;   r-   r=   r.   r/   r   r   make_modh   s    

z_add_c_module.<locals>.make_modr:   c                   s   e Zd Z fddZdS )z)_add_c_module.<locals>.build_ext_make_modc                s:   j d dkr,t| dd }| j|j d<  j|  d S )Nr   z$PLACEHOLDERrB   )r>   getattr
build_temprun)selfrB   )
base_classr+   rD   r   r   rG   }   s    z-_add_c_module.<locals>.build_ext_make_mod.runN)r   
__module____qualname__rG   r   )rI   r+   rD   r   r   build_ext_make_mod|   s   rL   )N)distutils.corer8   Zsetuptools.command.build_extr:   distutils.dir_utilr;   	distutilsr<   cffir=   extendpopr9   ext_modulesappendcmdclassget)
r*   r,   r-   r.   r/   r0   r8   r:   Z
allsourcesrL   r   )
rI   r+   r,   r<   rD   r;   r-   r=   r.   r/   r   r)   [   s     

r)   c                s   ddl m ddlm} ddlm} ddlm ddlm	 fdd| j
jd	| G  fd
dd }|| j
d	< | j
jd|G fddd}|| j
d< d S )Nr   )r;   )build_py)r:   )r<   )r=   c                s>   j d|   tjj|  j | }|s:j d d S )Nzgenerating cffi module %rzalready up-to-date)rA   r!   r"   dirnameZmake_py_source)py_filerC   )r,   r<   r;   r-   r=   r   r   generate_mod   s
    z$_add_py_module.<locals>.generate_modrW   c                   s   e Zd Z fddZdS )z)_add_py_module.<locals>.build_py_make_modc                s@    j |  jd}|d  d7  < tjj| jf|  d S )Nr      z.py)rG   r   r!   r"   r@   	build_lib)rH   module_path)rI   rZ   r-   r   r   rG      s    

z-_add_py_module.<locals>.build_py_make_mod.runN)r   rJ   rK   rG   r   )rI   rZ   r-   r   r   build_py_make_mod   s   r_   r:   c                   s   e Zd Z fddZdS )z*_add_py_module.<locals>.build_ext_make_modc                sb    j |  | jr^jd}dj|d d }| jd}|j|}|d d }tjj|| d S )Nr   r[   rW   z.pyr\   r\   )rG   inplacer   r@   get_finalized_commandget_package_dirr!   r"   )rH   r^   packagerW   package_dir	file_name)base_class_2rZ   r-   r   r   rG      s    



z._add_py_module.<locals>.build_ext_make_mod.runN)r   rJ   rK   rG   r   )rf   rZ   r-   r   r   rL      s   rL   )rN   r;   distutils.command.build_pyrW   distutils.command.build_extr:   rO   r<   rP   r=   rU   rV   )r*   r,   r-   rW   r:   r_   rL   r   )rI   rf   r,   rZ   r<   r;   r-   r=   r   r(      s    
r(   c             C   s8   |dkst t|tr|g}x|D ]}t| | q"W d S )Ncffi_modules)AssertionErrorr   r   r1   )r*   attrvalueZcffi_moduler   r   r   ri      s
    

ri   )r!   r   	NameErrorr   r   r   r1   r9   r)   r(   ri   r   r   r   r   <module>   s   
-.&