3
A|e3                 @   st  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ yd dlmZ ed
 W n ek
r   eZY nX ed d dlmZ dd ZdZdZdZejdkrdZn>e j dkr$yd dl!Z!e"e!d ZZW n ek
r"   Y nX dd Z#dd Z$G dd deZesVe j dkrbdddZ%ndZd ddZ%dS )!    N)EXTENSION_SUFFIXES)	build_ext)	copy_file)new_compiler)customize_compilerget_config_var)DistutilsError)log)LibraryzCython.Compiler.MainLDSHARED)_config_varsc             C   sZ   t jdkrNtj }z$dtd< dtd< dtd< t|  W d tj  tj| X nt|  d S )Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyr   clearupdate)compilertmp r   `/var/www/html/StaffProfile/staffvenv/lib/python3.6/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlib   s    
r   Fsharedr   TntRTLD_NOWc             C   s   t r| S dS )N )	have_rtld)sr   r   r   if_dl>   s    r!   c              C   s*   x$t D ]} d| kr| S | dkr| S qW dS )z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydN)r   )suffixr   r   r   get_abi3_suffixB   s
    
r#   c               @   sv   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdddZdS )r   c             C   s.   | j d }| _ tj|  || _ |r*| j  dS )z;Build extensions in build directory, then copy if --inplacer   N)Zinplace
_build_extruncopy_extensions_to_source)selfZold_inplacer   r   r   r%   L   s
    
zbuild_ext.runc       
      C   s   | j d}x| jD ]}| j|j}| j|}|jd}dj|d d }|j|}tj	j|tj	j
|}tj	j| j|}	t|	|| j| jd |jr| j|ptj|d qW d S )Nbuild_py.   )verbosedry_runT)get_finalized_command
extensionsget_ext_fullnamenameget_ext_filenamesplitjoinget_package_dirospathbasename	build_libr   r+   r,   _needs_stub
write_stubcurdir)
r'   r(   extfullnamefilenameZmodpathpackagepackage_dirZdest_filenameZsrc_filenamer   r   r   r&   T   s    




z#build_ext.copy_extensions_to_sourcec             C   s   t jd}|r&t jj|jd | }ntj| |}td}|| jkr| j| }t	|do\t
 }|r|d t|  }t
 }|| }t|trt jj|\}}| jj|tS tr|jrt jj|\}}t jj|d| S |S )NZSETUPTOOLS_EXT_SUFFIXr)   
EXT_SUFFIXpy_limited_apizdl-)r6   getenvr7   r4   r3   r$   r2   r   ext_mapgetattrr#   len
isinstancer
   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)r'   r>   Zso_extr?   r=   Zuse_abi3fndr   r   r   r2   j   s&    




zbuild_ext.get_ext_filenamec             C   s    t j|  d | _g | _i | _d S )N)r$   initialize_optionsrJ   shlibsrE   )r'   r   r   r   rQ      s    
zbuild_ext.initialize_optionsc             C   s2  t j|  | jpg | _| j| j dd | jD | _| jrB| j  x| jD ]}| j|j|_qJW x| jD ]}|j}|| j	|< || j	|j
dd < | jr| j|pd}|otot|t }||_||_| j| }|_tjjtjj| j|}|o||jkr|jj| |rhtrhtj|jkrh|jjtj qhW d S )Nc             S   s   g | ]}t |tr|qS r   )rH   r
   ).0r=   r   r   r   
<listcomp>   s    z.build_ext.finalize_options.<locals>.<listcomp>r)   r*   Fr-   )r$   finalize_optionsr/   Zcheck_extensions_listrR   setup_shlib_compilerr0   r1   
_full_namerE   r3   links_to_dynamicrM   rH   r
   rN   r:   r2   
_file_namer6   r7   dirnamer4   r9   library_dirsappendr<   runtime_library_dirs)r'   r=   r>   Zltdnsr?   Zlibdirr   r   r   rU      s,    

zbuild_ext.finalize_optionsc             C   s   t | j| j| jd }| _t| | jd k	r8|j| j | jd k	rbx| jD ]\}}|j	|| qJW | j
d k	rx| j
D ]}|j| qtW | jd k	r|j| j | jd k	r|j| j | jd k	r|j| j | jd k	r|j| j tj||_d S )N)r   r,   force)r   r   r,   r_   rJ   r   include_dirsset_include_dirsZdefinedefine_macroZundefundefine_macro	librariesset_librariesr[   set_library_dirsZrpathset_runtime_library_dirsZlink_objectsset_link_objectslink_shared_object__get__)r'   r   r1   valuemacror   r   r   rV      s(    






zbuild_ext.setup_shlib_compilerc             C   s   t |tr|jS tj| |S )N)rH   r
   export_symbolsr$   get_export_symbols)r'   r=   r   r   r   rn      s    
zbuild_ext.get_export_symbolsc             C   s\   |j   | j}z@t|tr"| j| _tj| | |jrL| jdj	}| j
|| W d || _X d S )Nr(   )_convert_pyx_sources_to_langr   rH   r
   rJ   r$   build_extensionr:   r.   r9   r;   )r'   r=   Z	_compilercmdr   r   r   rp      s    
zbuild_ext.build_extensionc                sP   t jdd | jD  dj|jjddd	 dg t fdd|jD S )
z?Return true if 'ext' links to a dynamic lib in the same packagec             S   s   g | ]
}|j qS r   )rW   )rS   libr   r   r   rT      s    z.build_ext.links_to_dynamic.<locals>.<listcomp>r)   Nr*   r   c             3   s   | ]}|  kV  qd S )Nr   )rS   libname)libnamespkgr   r   	<genexpr>   s    z-build_ext.links_to_dynamic.<locals>.<genexpr>r-   )dictfromkeysrR   r4   rW   r3   anyrd   )r'   r=   r   )rt   ru   r   rX      s     zbuild_ext.links_to_dynamicc             C   s   t j| | j  S )N)r$   get_outputs_build_ext__get_stubs_outputs)r'   r   r   r   rz      s    zbuild_ext.get_outputsc                s6    fdd j D }tj| j }tdd |D S )Nc             3   s0   | ](}|j rtjj jf|jjd  V  qdS )r)   N)r:   r6   r7   r4   r9   rW   r3   )rS   r=   )r'   r   r   rv      s   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c             s   s   | ]\}}|| V  qd S )Nr   )rS   baseZfnextr   r   r   rv      s    )r/   	itertoolsproduct!_build_ext__get_output_extensionslist)r'   Zns_ext_basespairsr   )r'   r   Z__get_stubs_outputs   s    

zbuild_ext.__get_stubs_outputsc             c   s"   dV  dV  | j djrdV  d S )Nz.pyz.pycr(   z.pyo)r.   optimize)r'   r   r   r   Z__get_output_extensions   s    z!build_ext.__get_output_extensionsFc             C   s4  t jd|j| tjj|f|jjd d }|rJtjj|rJt|d | j	st
|d}|jdjddd	td
 dtjj|j dddtddddtddddddtddddg |j  |r0ddlm} ||gdd| j	d  | jd!j}|dkr||g|d| j	d  tjj|r0| j	 r0tj| d S )"Nz writing stub loader for %s to %sr)   z.pyz already exists! Please delete.w
zdef __bootstrap__():z-   global __bootstrap__, __file__, __loader__z0   import sys, os, pkg_resources, importlib.utilz, dlz:   __file__ = pkg_resources.resource_filename(__name__,%r)z   del __bootstrap__z    if '__loader__' in globals():z       del __loader__z#   old_flags = sys.getdlopenflags()z   old_dir = os.getcwd()z   try:z(     os.chdir(os.path.dirname(__file__))z$     sys.setdlopenflags(dl.RTLD_NOW)z3     spec = importlib.util.spec_from_file_location(z#                __name__, __file__)z0     mod = importlib.util.module_from_spec(spec)z!     spec.loader.exec_module(mod)z   finally:z"     sys.setdlopenflags(old_flags)z     os.chdir(old_dir)z__bootstrap__()r   r   )byte_compileT)r   r_   r,   install_lib)r	   inforW   r6   r7   r4   r3   existsr   r,   openwriter!   r8   rY   closedistutils.utilr   r.   r   unlink)r'   
output_dirr=   compileZ	stub_filefr   r   r   r   r   r;      sX    



zbuild_ext.write_stubN)F)__name__
__module____qualname__r%   r&   r2   rQ   rU   rV   rn   rp   rX   rz   r{   r   r;   r   r   r   r   r   K   s   	r   c             C   s(   | j | j|||||||||	|
|| d S )N)linkSHARED_LIBRARY)r'   objectsoutput_libnamer   rd   r[   r]   rm   debugextra_preargsextra_postargs
build_temptarget_langr   r   r   ri   $  s
    ri   staticc             C   s^   |d kst tjj|\}}tjj|\}}| jdjdrH|dd  }| j||||| d S )Nxrr      )AssertionErrorr6   r7   r3   rI   rK   
startswithcreate_static_lib)r'   r   r   r   rd   r[   r]   rm   r   r   r   r   r   r?   r8   r=   r   r   r   ri   3  s    )
NNNNNr   NNNN)
NNNNNr   NNNN)&r6   r   r}   Zimportlib.machineryr   Zdistutils.command.build_extr   Z_du_build_extdistutils.file_utilr   distutils.ccompilerr   distutils.sysconfigr   r   distutils.errorsr   	distutilsr	   setuptools.extensionr
   ZCython.Distutils.build_extr$   
__import__ImportErrorr   r   r   r   rM   rL   r   r1   Zdlhasattrr!   r#   ri   r   r   r   r   <module>   sV   

	 W   	   