î
½1kdÏ.  ã            $   @   s  d  d l  m Z y d  d l m Z Wn e k
 r> e Z Yn Xd  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 y d  d l m Z Wn? e k
 rì d  d l m Z e d	 ƒ [ d  d
 l m Z Yn Xd  d l m Z d  d l m Z d Z d Z d Z e j d k r7d Z nG e j d k r~y  d  d l m Z d Z d Z Wq~e k
 rzYq~Xn  d d „  Z Gd d „  d e ƒ Z e sµe j d k râd d d d d d  d d d d d d „
 Z  n0 d Z d d d d d d  d d d d d d „
 Z  d S)é    )Ú	build_extN)Ú	copy_file)ÚLibrary)Únew_compiler)Úcustomize_compiler)Ú_CONFIG_VARS)Úget_config_varÚLDSHARED)Ú_config_vars)Úlog)ÚDistutilsErrorFZsharedÚdarwinTÚnt)ÚRTLD_NOWc             C   s   t  r
 |  Sd S)NÚ )Ú	have_rtld)Ús© r   úR/var/www/pythonscrapper/code/venv/build/setuptools/setuptools/command/build_ext.pyÚif_dl'   s    r   c               @   sÂ   e  Z d  Z d d „  Z d d „  Z e e k	 rO e e d ƒ rO d d „  Z n  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 ƒ  n  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   .   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 |	 | d |  j d |  j ƒ| j r |  j | pê t j | d ƒ q q Wd  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   r   r   Ú_needs_stubÚ
write_stubÚcurdir)
r   r   ÚextÚfullnameÚfilenameZmodpathÚpackageÚpackage_dirÚdest_filenameZsrc_filenamer   r   r   r   6   s    !
	z#build_ext.copy_extensions_to_sourceZpyrex_sourcesc             G   s+   t  j |  | ƒ p | } t j |  | | Œ S)N)r   Úswig_sourcesÚ_du_build_ext)r   ÚsourcesZ	otherargsr   r   r   r4   M   s    zbuild_ext.swig_sourcesc             C   s­   t  j |  | ƒ } | |  j k r© |  j | } t | t ƒ rh t j j | ƒ \ } } |  j j	 | t
 ƒ St r© | j r© t j j | ƒ \ } } t j j | d | ƒ Sn  | S)Nzdl-)r   r$   Úext_mapÚ
isinstancer   r'   r(   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamicr%   r&   )r   r/   r0   r.   ÚfnÚdr   r   r   r$   S   s    zbuild_ext.get_ext_filenamec             C   s,   t  j |  ƒ d  |  _ g  |  _ i  |  _ d  S)N)r   Úinitialize_optionsr:   Úshlibsr7   )r   r   r   r   rA   _   s    		zbuild_ext.initialize_optionsc             C   s©  t  j |  ƒ |  j p g  |  _ |  j |  j ƒ d d „  |  j Dƒ |  _ |  j r^ |  j ƒ  n  x& |  j D] } |  j | j ƒ | _ qh Wx|  j D]} | j } | |  j	 | <| |  j	 | j
 d ƒ d <|  j rß |  j | ƒ pâ d } | _ | ot ot | t ƒ | _ |  j | ƒ } | _ t j j t j j |  j | ƒ ƒ } | rm| | j k rm| j j | ƒ n  | r‘ t r‘ t j | j k r‘ | j j t j ƒ q‘ q‘ Wd  S)Nc             S   s%   g  |  ] } t  | t ƒ r | ‘ q Sr   )r8   r   )Ú.0r.   r   r   r   ú
<listcomp>i   s   	 z.build_ext.finalize_options.<locals>.<listcomp>r   r   Fr   )r   Úfinalize_optionsr!   Zcheck_extensions_listrB   Úsetup_shlib_compilerr"   r#   Ú
_full_namer7   r%   Úlinks_to_dynamicr>   r=   r8   r   r+   r$   Ú
_file_namer'   r(   Údirnamer&   r*   Úlibrary_dirsÚappendr-   Úruntime_library_dirs)r   r.   r/   Zltdr0   Zlibdirr   r   r   rE   e   s(    		%$zbuild_ext.finalize_optionsc             C   sÉ  t  d |  j d |  j d |  j ƒ } |  _ t j d k r� t j ƒ  } z, d t d <d t d <d	 t d
 <t	 | ƒ Wd  t j
 ƒ  t j | ƒ Xn
 t	 | ƒ |  j d  k	 r¼ | j |  j ƒ n  |  j d  k	 rø x* |  j D] \ } } | j | | ƒ qÕ Wn  |  j d  k	 r+x! |  j D] } | j | ƒ qWn  |  j d  k	 rM| j |  j ƒ n  |  j d  k	 ro| j |  j ƒ n  |  j d  k	 r‘| j |  j ƒ n  |  j d  k	 r³| j |  j ƒ n  t j | ƒ | _ d  S)NÚcompilerr   Úforcer   z0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr	   z -dynamiclibÚCCSHAREDz.dylibÚSO)r   rN   r   rO   r:   ÚsysÚplatformr   Úcopyr   ÚclearÚupdateÚinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macroÚ	librariesZset_librariesrK   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r   rN   Útmpr#   ÚvalueZmacror   r   r   rF   �   s:    %




zbuild_ext.setup_shlib_compilerc             C   s&   t  | t ƒ r | j St j |  | ƒ S)N)r8   r   Úexport_symbolsr   Úget_export_symbols)r   r.   r   r   r   r^   ¨   s    zbuild_ext.get_export_symbolsc             C   st   |  j  } zZ t | t ƒ r* |  j |  _  n  t j |  | ƒ | j rb |  j |  j d ƒ j	 | ƒ n  Wd  | |  _  Xd  S)Nr   )
rN   r8   r   r:   r   Úbuild_extensionr+   r,   r    r*   )r   r.   Z	_compilerr   r   r   r_   ­   s    		zbuild_ext.build_extensionc             C   sw   t  j d d „  |  j Dƒ ƒ } d j | j j d ƒ d d	 … d g ƒ } x% | j D] } | | | k rU d SqU Wd S)
z?Return true if 'ext' links to a dynamic lib in the same packagec             S   s   g  |  ] } | j  ‘ q Sr   )rG   )rC   Úlibr   r   r   rD   ¿   s   	 z.build_ext.links_to_dynamic.<locals>.<listcomp>r   Nr   r   TFr   )ÚdictÚfromkeysrB   r&   rG   r%   rX   )r   r.   ZlibnamesÚpkgÚlibnamer   r   r   rH   º   s    , zbuild_ext.links_to_dynamicc             C   s¥   t  j |  ƒ } |  j d ƒ j } x} |  j D]r } | j r+ t j j |  j	 | j
 j d ƒ Œ } | j | d ƒ | j | d ƒ | r� | j | d ƒ q� q+ q+ W| S)Nr   r   z.pyz.pycz.pyo)r   Úget_outputsr    Úoptimizer!   r+   r'   r(   r&   r*   rG   r%   rL   )r   Úoutputsrf   r.   Úbaser   r   r   re   Å   s    	$zbuild_ext.get_outputsFc             C   s´  t  j d | j | ƒ t j j | | j j d ƒ Œ d } | rf t j j | ƒ rf t | d ƒ ‚ n  |  j	 st
 | 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 t d ƒ d d d g ƒ ƒ | j ƒ  n  | r°d d l m } | | g d d d d d |  j	 ƒ|  j d  ƒ j } | d k r�| | g d | d d d |  j	 ƒn  t j j | ƒ r°|  j	 r°t j | ƒ q°n  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__z%   import sys, os, pkg_resources, impz, 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)z(     imp.load_dynamic(__name__,__file__)z   finally:z"     sys.setdlopenflags(old_flags)z     os.chdir(old_dir)z__bootstrap__()r   r   )Úbyte_compilerf   rO   Tr   Úinstall_lib)r   ÚinforG   r'   r(   r&   r%   Úexistsr   r   ÚopenÚwriter   r)   rI   ÚcloseÚdistutils.utilrk   r    rf   Úunlink)r   Ú
output_dirr.   ÚcompileZ	stub_fileÚfrk   rf   r   r   r   r,   Ñ   sL    %				zbuild_ext.write_stubN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r5   Úhasattrr4   r$   rA   rE   rF   r^   r_   rH   re   r,   r   r   r   r   r   -   s   'r   c             C   s8   |  j  |  j | | | | | | | | |	 |
 | | ƒ d  S)N)ÚlinkZSHARED_LIBRARY)r   ÚobjectsÚoutput_libnamert   rX   rK   rM   r]   ÚdebugÚextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r   rY   ÿ   s
    rY   Zstaticc             C   sŠ   | d  k s t  ‚ t j j | ƒ \ } } t j j | ƒ \ } } |  j d ƒ j d ƒ rm | d d  … } n  |  j | | | | | ƒ d  S)NÚxr`   é   )ÚAssertionErrorr'   r(   r%   r9   r;   Ú
startswithZcreate_static_lib)r   r|   r}   rt   rX   rK   rM   r]   r~   r   r€   r�   r‚   r0   r)   r.   r   r   r   rY     s    
)!Zdistutils.command.build_extr   r5   ZPyrex.Distutils.build_extr   ÚImportErrorr'   rR   Údistutils.file_utilr   Zsetuptools.extensionr   Údistutils.ccompilerr   Údistutils.sysconfigr   Ú	sysconfigr   r   r
   Ú	distutilsr   Zdistutils.errorsr   r   r=   r<   rS   r#   Údlr   r   rY   r   r   r   r   Ú<module>   sV   
	
Ï					