a
    Ca3                  
   @   s  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mZ d dlmZ d dlmZ d dlmZ d d	lmZ ejrd dlZd
d e D Znd dlmZ zd dlmZ ed W n ey   eZY n0 ed d dl
mZ dd Z dZ!dZ"dZ#ej$dkrdZ"n<e j%dkrPzd dl&Z&e'e&d Z"Z!W n eyN   Y n0 dd Z(dd Z)G dd deZe"se j%dkrd"ddZ*nd Z#d#d!dZ*dS )$    N)	build_ext)	copy_file)new_compiler)customize_compilerget_config_var)DistutilsError)log)Library)sixc                 C   s    g | ]\}}}|t jkr|qS  )impC_EXTENSION).0s_tpr   r   l/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/setuptools/command/build_ext.py
<listcomp>   s   r   EXTENSION_SUFFIXESzCython.Compiler.MainLDSHARED)_config_varsc              	   C   sl   t jdkr`t }z6dtd< dtd< dtd< t|  W t  t| qht  t| 0 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tmpr   r   r   _customize_compiler_for_shlib$   s    

r#   FZsharedr   TntRTLD_NOWc                 C   s   t r| S dS )N )	have_rtld)r   r   r   r   if_dlF   s    r(   c                  C   s.   t D ]$} d| v r|   S | dkr|   S qdS )z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr   )suffixr   r   r   get_abi3_suffixJ   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|  || _ |r*|   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,   T   s
    
zbuild_ext.runc           
      C   s   |  d}| jD ]}| |j}| |}|d}d|d d }||}tj	|tj	
|}tj	| j|}	t|	|| j| jd |jr| |ptj|d qd S )Nbuild_py.)verbosedry_runT)get_finalized_command
extensionsget_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename	build_libr   r2   r3   _needs_stub
write_stubcurdir)
r.   r/   extfullnamefilenamemodpathpackagepackage_dirZdest_filenameZsrc_filenamer   r   r   r-   \   s"    





z#build_ext.copy_extensions_to_sourcec                 C   s   t | |}|| jv r| j| }tj o6t|do6t }|r`td}|d t|  }|t  }t	|t
rtj|\}}| j|tS tr|jrtj|\}}tj|d| S |S )NZpy_limited_api
EXT_SUFFIXzdl-)r+   r8   ext_mapr
   PY2getattrr*   r   len
isinstancer	   r;   r<   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamicr9   r:   )r.   rC   rD   rB   Zuse_abi3Zso_extfndr   r   r   r8   r   s&    




zbuild_ext.get_ext_filenamec                 C   s    t |  d | _g | _i | _d S N)r+   initialize_optionsrO   shlibsrI   r.   r   r   r   rW      s    
zbuild_ext.initialize_optionsc                 C   s,  t |  | jpg | _| | j dd | jD | _| jrB|   | jD ]}| |j|_qH| jD ]}|j}|| j	|< || j	|
dd < | jr| |pd}|otot|t }||_||_| | }|_tjtj| j|}|r||jvr|j| |rbtrbtj|jvrb|jtj qbd S )Nc                 S   s   g | ]}t |tr|qS r   )rM   r	   r   rB   r   r   r   r      s   
z.build_ext.finalize_options.<locals>.<listcomp>r0   r1   F)r+   finalize_optionsr5   Zcheck_extensions_listrX   setup_shlib_compilerr6   r7   
_full_namerI   r9   links_to_dynamicrR   rM   r	   rS   r?   r8   
_file_namer;   r<   dirnamer:   r>   library_dirsappendrA   runtime_library_dirs)r.   rB   rC   ZltdnsrD   libdirr   r   r   r[      s,    



zbuild_ext.finalize_optionsc                 C   s   t | j| j| jd }| _t| | jd ur8|| j | jd ur^| jD ]\}}|	|| qH| j
d ur~| j
D ]}|| qn| jd ur|| j | jd ur|| j | jd ur|| j | jd ur|| j t||_d S )N)r!   r3   force)r   r!   r3   rf   rO   r#   include_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macro	librariesZset_librariesra   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectslink_shared_object__get__)r.   r!   r7   valueZmacror   r   r   r\      s*    







zbuild_ext.setup_shlib_compilerc                 C   s   t |tr|jS t| |S rV   )rM   r	   export_symbolsr+   get_export_symbolsr.   rB   r   r   r   rm      s    
zbuild_ext.get_export_symbolsc                 C   sb   |   | j}zFt|tr"| j| _t| | |jrL| dj	}| 
|| W || _n|| _0 d S )Nr/   )Z_convert_pyx_sources_to_langr!   rM   r	   rO   r+   build_extensionr?   r4   r>   r@   )r.   rB   Z	_compilercmdr   r   r   ro      s    
zbuild_ext.build_extensionc                    sP   t dd | jD  d|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   )r]   )r   libr   r   r   r          z.build_ext.links_to_dynamic.<locals>.<listcomp>r0   Nr1   r&   c                 3   s   | ]}|  v V  qd S rV   r   )r   ZlibnameZlibnamespkgr   r   	<genexpr>   rr   z-build_ext.links_to_dynamic.<locals>.<genexpr>)dictfromkeysrX   r:   r]   r9   anyrh   rn   r   rs   r   r^      s     zbuild_ext.links_to_dynamicc                 C   s   t | |   S rV   )r+   get_outputs_build_ext__get_stubs_outputsrY   r   r   r   ry      s    zbuild_ext.get_outputsc                    s6    fdd j D }t|  }tdd |D S )Nc                 3   s2   | ]*}|j rtjj jg|jd R  V  qdS )r0   N)r?   r;   r<   r:   r>   r]   r9   rZ   rY   r   r   ru      s   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S rV   r   )r   baseZfnextr   r   r   ru      rr   )r5   	itertoolsproduct!_build_ext__get_output_extensionslist)r.   Zns_ext_basespairsr   rY   r   Z__get_stubs_outputs   s
    
zbuild_ext.__get_stubs_outputsc                 c   s"   dV  dV  |  djrdV  d S )N.pyz.pycr/   z.pyo)r4   optimizerY   r   r   r   Z__get_output_extensions   s    z!build_ext.__get_output_extensionsFc                 C   s2  t d|j| tjj|g|jdR  d }|rLtj|rLt|d | j	st
|d}|dddd	td
 ddtj|j dddtddddtddddtddddg |  |r.ddlm} ||gdd| j	d | d j}|dkr||g|d| j	d tj|r.| j	s.t| d S )!Nz writing stub loader for %s to %sr0   r   z already exists! Please delete.w
zdef __bootstrap__():z-   global __bootstrap__, __file__, __loader__z    import sys, os, pkg_resourcesz, dlz6   from importlib.machinery import ExtensionFileLoaderz:   __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)z"     ExtensionFileLoader(__name__,z0                         __file__).load_module()z   finally:z"     sys.setdlopenflags(old_flags)z     os.chdir(old_dir)z__bootstrap__()r&   r   )byte_compileT)r   rf   r3   install_lib)r   infor]   r;   r<   r:   r9   existsr   r3   openwriter(   r=   r_   closedistutils.utilr   r4   r   unlink)r.   
output_dirrB   compileZ	stub_filefr   r   r   r   r   r@      sb    



zbuild_ext.write_stubN)F)__name__
__module____qualname__r,   r-   r8   rW   r[   r\   rm   ro   r^   ry   rz   r~   r@   r   r   r   r   r   S   s   	r   c                 C   s(   |  | j|||||||||	|
|| d S rV   )linkZSHARED_LIBRARY)r.   objectsoutput_libnamer   rh   ra   rc   rl   debugextra_preargsextra_postargs
build_temptarget_langr   r   r   ri   (  s    ri   Zstaticc                 C   s^   |d u sJ t j|\}}t j|\}}| ddrH|dd  }| ||||| d S )Nxrq      )r;   r<   r9   rN   rP   
startswithZcreate_static_lib)r.   r   r   r   rh   ra   rc   rl   r   r   r   r   r   rD   r=   rB   r   r   r   ri   7  s    
)
NNNNNr   NNNN)
NNNNNr   NNNN)+r;   r   r|   Zdistutils.command.build_extr   Z_du_build_extdistutils.file_utilr   distutils.ccompilerr   distutils.sysconfigr   r   distutils.errorsr   	distutilsr   Zsetuptools.extensionr	   Zsetuptools.externr
   rJ   r   Zget_suffixesr   importlib.machineryZCython.Distutils.build_extr+   
__import__ImportErrorr   r   r#   r'   rR   rQ   r   r7   dlhasattrr(   r*   ri   r   r   r   r   <module>   sf   
	 S        