
 X.              $   @   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   N/home/ubuntu/projects/ifolica/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   distutils.errorsr   r   r=   r<   rS   r#   dlr   r   rY   r   r   r   r   <module>   sV   
	
					