U
    ÚHam:  ã                   @   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Ò   |   d ||¡}|\}}}t||ƒ}	| j|	 }
|r>|
 d|g¡ |rN||
d d…< |r\|
 |¡ |
 |¡ | js~|d ks~t||ƒrÎ|r”|  tj	 
|¡¡ z|  |
¡ W n* tk
rÌ } zt|ƒ‚W 5 d }~X Y nX d S )Nú-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.   úG/tmp/pip-unpacked-wheel-i11yjail/setuptools/_distutils/unixccompiler.pyÚ
preprocessU   s$    




zUnixCCompiler.preprocessc           	   
   C   sp   | j }tjdkr t ||| ¡}z |  || |d|g | ¡ W n* tk
rj } zt|ƒ‚W 5 d }~X Y nX d S )Nr   r   )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||d}|  ||¡r¢|  tj |¡¡ |  | j|g | | j	 ¡ | j
r®z|  | j
|g ¡ W q® tk
rž } zt|ƒ‚W 5 d }~X Y q®X nt d|¡ d S )N)Ú
output_dirú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_libnamer9   r?   Útarget_langÚoutput_filenamer-   r.   r.   r/   Úcreate_static_libz   s$    ÿÿþþ	zUnixCCompiler.create_static_libc              
   C   sÚ  |   ||¡\}}|  |||¡}|\}}}t| |||ƒ}t|ttd ƒfƒsPtdƒ‚|d k	rftj 	||¡}|  
||¡rÊ|| j | d|g }|	rœdg|d d…< |
r¬|
|d d…< |rº| |¡ |  tj |¡¡ zÎ|tjkrè| jd d … }n| jd d … }|dkrr| jrrd}tj |d ¡dkr@d}d|| kr@|d7 }q&tj || ¡d	kr\d}nd}| j| ||| < tjd
krŠt ||¡}|  || ¡ W n, tk
rÆ } zt|ƒ‚W 5 d }~X Y nX nt d|¡ d S )Nz%'output_dir' must be a string or Noner   z-gr   zc++Úenvé   ú=Z	ld_so_aixr   r:   )r;   Z_fix_lib_argsr   Ú
isinstanceÚstrÚtypeÚ	TypeErrorr    r!   Újoinr=   r>   r   r   r"   r   Z
EXECUTABLEr   r   r   Úbasenamer1   r2   r3   r4   r#   r   r
   r   r?   )r$   Ztarget_descr>   rA   r9   Ú	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”   sZ    ÿ
ÿÿÿ

zUnixCCompiler.linkc                 C   s   d| S )Nú-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 t d¡¡}tjd d… dkr`ddlm}m	} |ƒ }|rV||ƒddgkrVd| S d	| S n€tjd d
… dkrzd| S tjd d… dkr®|  
|¡r¢dd	| gS dd	| gS |  
|¡rØt d¡dkrÎd| S d| S nd| S d S )NÚCCr   r   r   )Úget_macosx_target_verÚsplit_versioné
   é   z-Wl,-rpath,rT   é   Zfreebsdz-Wl,-rpath=zhp-uxz-Wl,+sz+sÚGNULDÚyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)r    r!   rK   r   Úget_config_varr1   r2   Údistutils.utilrY   rZ   rW   )r$   rU   r   rY   rZ   Zmacosx_target_verr.   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 d¡}t d|¡}	|	d krfd	}
n
|	 d
¡}
|D ] }tj	 
||¡}tj	 
||¡}tj	 
||¡}tj	 
||¡}tjdkr@| d¡sà| d¡r@| d¡s@tj	 
|
|d
d … |¡}tj	 
|
|d
d … |¡}tj	 
|
|d
d … |¡}tj	 
|
|d
d … |¡}tj	 |¡rV|  S tj	 |¡rl|  S tj	 |¡r‚|  S tj	 |¡rt|  S qtd S )NÚshared)Zlib_typeÚdylibÚ
xcode_stubÚstaticr   ÚCFLAGSz-isysroot\s*(\S+)ú/rD   z/System/z/usr/z/usr/local/)r<   r1   r2   r   r`   ÚreÚsearchÚgroupr    r!   rJ   Ú
startswithÚexists)r$   Údirsrc   r?   Zshared_fZdylib_fZxcode_stub_fZstatic_fÚcflagsÚmZsysrootrU   re   rf   rh   rg   r.   r.   r/   Úfind_library_file  sF    



ÿþþ
zUnixCCompiler.find_library_file)NNNNN)Nr   N)
NNNNNr   NNNN)r   )Ú__name__Ú
__module__Ú__qualname__Úcompiler_typeZexecutablesr1   r2   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_extensionr0   r8   rB   rS   rV   rW   rb   rd   rs   r.   r.   r.   r/   r   -   s`   ù


      ÿ
     ÿ
                ü
B.r   )Ú__doc__r    r1   rk   Ú	distutilsr   Údistutils.dep_utilr   Údistutils.ccompilerr   r   r   Údistutils.errorsr   r   r	   r
   r   r2   r3   r   r.   r.   r.   r/   Ú<module>   s   
