3
;p_h9                 @   s   d Z 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	m
Z
mZ ddlmZmZmZmZ ddlmZ ejdkr~ddlZG d	d
 d
e	ZdS )a9  distutils.unixccompiler

Contains the UnixCCompiler class, a subclass of CCompiler that handles
the "typical" Unix-style command-line C compiler:
  * macros defined with -Dname[=value]
  * macros undefined with -Uname
  * include search directories specified with -Idir
  * libraries specified with -lllib
  * library search directories specified with -Ldir
  * compile handled by 'cc' (or similar) executable with -c option:
    compiles .c to .o
  * link static library handled by 'ar' command (possibly with 'ranlib')
  * link shared library handled by 'cc -shared'
    N)	sysconfig)newer)	CCompilergen_preprocess_optionsgen_lib_options)DistutilsExecErrorCompileErrorLibError	LinkError)logdarwinc            
   @   s   e Zd ZdZddgdgdgddgdgddgddZejdd d	krNd
ged
< ddddddgZdZdZ	dZ
dZdZd Z ZZeZejdkrdZd,ddZdd Zd-ddZd.d d!Zd"d# Zd$d% Zd&d' Zd(d) Zd/d*d+ZdS )0UnixCCompilerunixNccz-sharedarz-cr)preprocessorcompilercompiler_socompiler_cxx	linker_so
linker_exearchiverranlib   r   r   z.cz.Cz.ccz.cxxz.cppz.mz.oz.az.soz.dylibz.tbdzlib%s%scygwinz.exec             C   s   | j d ||}|\}}}t||}	| j|	 }
|r>|
jd|g |rN||
d d< |r\|
j| |
j| | js~|d ks~t||r|r| jtj	j
| y| j|
 W n* tk
r } zt|W Y d d }~X nX d S )Nz-or   )Z_fix_compile_argsr   r   extendappendforcer   mkpathospathdirnamespawnr   r   )selfsourceZoutput_filemacrosinclude_dirsextra_preargsextra_postargs
fixed_argsignorepp_optsZpp_argsmsg r-   K/tmp/pip-install-ofl94hr3/setuptools/setuptools/_distutils/unixccompiler.py
preprocessU   s$    




zUnixCCompiler.preprocessc       	      C   sp   | j }tjdkr tj||| }y | j|| |d|g |  W n* tk
rj } zt|W Y d d }~X nX d S )Nr   z-o)r   sysplatform_osx_supportcompiler_fixupr"   r   r   )	r#   objsrcextZcc_argsr(   r+   r   r,   r-   r-   r.   _compileo   s    

zUnixCCompiler._compiler   c             C   s   | j ||\}}| j||d}| j||r| jtjj| | j| j|g | | j	  | j
ry| j| j
|g  W q tk
r } zt|W Y d d }~X qX ntjd| d S )N)
output_dirzskipping %s (up-to-date))_fix_object_argslibrary_filename
_need_linkr   r   r    r!   r"   r   objectsr   r   r	   r   debug)r#   r<   Zoutput_libnamer8   r=   target_langoutput_filenamer,   r-   r-   r.   create_static_libz   s    zUnixCCompiler.create_static_libc             C   s  | j ||\}}| j|||}|\}}}t| |||}t|ttd fsPtd|d k	rftjj	||}| j
||r|| j | d|g }|	rdg|d d< |
r|
|d d< |r|j| | jtjj| y|tjkr| jd d  }n| jd d  }|dkrv| jrvd}tjj|d dkrDd}xd|| krB|d7 }q(W tjj|| d	kr`d}nd}| j| ||| < tjd
krtj||}| j||  W n, tk
r } zt|W Y d d }~X nX ntjd| d S )Nz%'output_dir' must be a string or Nonez-oz-gr   zc++env   =Z	ld_so_aixr   zskipping %s (up-to-date))r9   Z_fix_lib_argsr   
isinstancestrtype	TypeErrorr   r    joinr;   r<   r   r   r!   r   Z
EXECUTABLEr   r   r   basenamer0   r1   r2   r3   r"   r   r
   r   r=   )r#   Ztarget_descr<   r?   r8   	librarieslibrary_dirsruntime_library_dirsexport_symbolsr=   r'   r(   
build_tempr>   r)   Zlib_optsZld_argsZlinkerioffsetr,   r-   r-   r.   link   sN    


zUnixCCompiler.linkc             C   s   d| S )Nz-Lr-   )r#   dirr-   r-   r.   library_dir_option   s    z UnixCCompiler.library_dir_optionc             C   s   d|kpd|kS )NZgcczg++r-   )r#   Zcompiler_namer-   r-   r.   _is_gcc   s    zUnixCCompiler._is_gccc             C   s   t jjtjd}tjd d dkr,d| S tjd d dkrFd| S tjd d d	krz| j|rnd
d| gS dd| gS | j|rtjddkrd| S d| S nd| S d S )NCCr   r   z-L   Zfreebsdz-Wl,-rpath=   zhp-uxz-Wl,+sz+sGNULDyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)r   r    rI   r   get_config_varr0   r1   rT   )r#   rR   r   r-   r-   r.   runtime_library_dir_option   s    


z(UnixCCompiler.runtime_library_dir_optionc             C   s   d| S )Nz-lr-   )r#   libr-   r-   r.   library_option  s    zUnixCCompiler.library_optionc             C   s  | j |dd}| j |dd}| j |dd}| j |dd}tjdkrptjd}tjd|}	|	d krfd	}
n
|	jd
}
x|D ]}tj	j
||}tj	j
||}tj	j
||}tj	j
||}tjdko|jds|jdo|jd rBtj	j
|
|d
d  |}tj	j
|
|d
d  |}tj	j
|
|d
d  |}tj	j
|
|d
d  |}tj	j|rT|S tj	j|rf|S tj	j|rx|S tj	j|rx|S qxW d S )Nshared)Zlib_typedylib
xcode_stubstaticr   CFLAGSz-isysroot\s*(\S+)/rB   z/System/z/usr/z/usr/local/)r:   r0   r1   r   rZ   researchgroupr   r    rH   
startswithexists)r#   dirsr\   r=   Zshared_fZdylib_fZxcode_stub_fZstatic_fcflagsmZsysrootrR   r^   r_   ra   r`   r-   r-   r.   find_library_file	  s>    




zUnixCCompiler.find_library_file)NNNNN)Nr   N)
NNNNNr   NNNN)r   )__name__
__module____qualname__compiler_typeZexecutablesr0   r1   Zsrc_extensionsZobj_extensionZstatic_lib_extensionshared_lib_extensionZdylib_lib_extensionZxcode_stub_lib_extensionZstatic_lib_formatZshared_lib_formatZdylib_lib_formatZxcode_stub_lib_formatZexe_extensionr/   r7   r@   rQ   rS   rT   r[   r]   rl   r-   r-   r-   r.   r   -   sD   

 

   
>*r   )__doc__r   r0   rd   	distutilsr   distutils.dep_utilr   distutils.ccompilerr   r   r   distutils.errorsr   r   r	   r
   r   r1   r2   r   r-   r-   r-   r.   <module>   s   
