o
     JAf9                     @   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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 )
    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r'd
ged
< g dZdZdZ	dZ
dZdZd Z ZZeZejdkrDd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 )+UnixCCompilerZunixNZ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 |r'||
d d< |r.|
| |
| | js?|d u s?t||rc|rJ| tj	
| z| |
 W d S  tyb } zt|d }~ww d S )N-or   )Z_fix_compile_argsr   r   extendappendforcer   mkpathospathdirnamespawnr   r   )selfsourceZoutput_fileZmacrosZinclude_dirsextra_preargsextra_postargs
fixed_argsignorepp_optsZpp_argsmsg r*   ./usr/lib/python3.10/distutils/unixccompiler.py
preprocessU   s*   




zUnixCCompiler.preprocessc           	   
   C   sd   | j }tjdkrt||| }z| || |d|g |  W d S  ty1 } zt|d }~ww )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}| ||rN| tj| | | j|g | | j	  | j
rLz| | j
|g  W d S  tyK } zt|d }~ww d S 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_libnamer5   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s(td|d ur3tj	||}| 
||r|| j | d|g }|	rMdg|d d< |
rU|
|d d< |r\|| | tj| zf|tjkrs| jd d  }n| jd d  }|dkr| jrd}tj|d dkrd}d|| v r|d7 }d|| v stj|| d	krd}nd}| j| ||| < tjd
krt||}| ||  W d S  ty } zt|d }~ww td| d S )Nz%'output_dir' must be a string or Noner   z-gr   zc++env   =Z	ld_so_aixr   r6   )r7   Z_fix_lib_argsr   
isinstancestrtype	TypeErrorr   r   joinr9   r:   r   r   r    r   Z
EXECUTABLEr   r   r   basenamer-   r.   r/   r0   r!   r   r
   r   r;   )r"   Ztarget_descr:   r=   r5   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr;   r$   r%   Z
build_tempr<   r&   Zlib_optsZld_argsZlinkerioffsetr)   r*   r*   r+   link   s`   



zUnixCCompiler.linkc                 C      d| S )N-Lr*   )r"   dirr*   r*   r+   library_dir_option      z UnixCCompiler.library_dir_optionc                    s   t  fdddD S )Nc                 3   s    | ]}| v V  qd S )Nr*   ).0namecompiler_namer*   r+   	<genexpr>   s    z(UnixCCompiler._is_gcc.<locals>.<genexpr>)Zgcczg++Zclang)any)r"   rS   r*   rR   r+   _is_gcc   s   zUnixCCompiler._is_gccc                 C   s   t jtd}tjd d dkrd| S tjd d dkr#d| S tjd d d	kr=| |r7d
d| gS dd| gS | |rQtddkrMd| S d| S d| S )NCCr   r   rL      Zfreebsdz-Wl,-rpath=   zhp-uxz-Wl,+sz+sZGNULDZyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)r   r   rG   r   get_config_varr-   r.   rV   )r"   rM   r   r*   r*   r+   runtime_library_dir_option   s   

z(UnixCCompiler.runtime_library_dir_optionc                 C   rK   )Nz-lr*   )r"   libr*   r*   r+   library_option  rO   zUnixCCompiler.library_optionc                 C   s  | j |dd}| j |dd}| j |dd}| j |dd}tjdkr>td}td|}	|	d u r9ttd	}
n|		d
}
|D ]}t
j||}t
j||}t
j||}t
j||}tjdkr|dsr|dr|dst
j|
|d
d  |}t
j|
|d
d  |}t
j|
|d
d  |}t
j|
|d
d  |}t
j|r|  S t
j|r|  S t
j|r|  S t
j|r|  S q@d S )Nshared)Zlib_typedylib
xcode_stubstaticr   ZCFLAGSz-isysroot\s*(\S+)rW   r@   z/System/z/usr/z/usr/local/)r8   r-   r.   r   rZ   researchr/   Z_default_sysrootgroupr   r   rF   
startswithexists)r"   dirsr\   r;   Zshared_fZdylib_fZxcode_stub_fZstatic_fZcflagsmZsysrootrM   r^   r_   ra   r`   r*   r*   r+   find_library_file
  sH   



zUnixCCompiler.find_library_file)NNNNN)Nr   N)
NNNNNr   NNNN)r   )__name__
__module____qualname__Zcompiler_typeZexecutablesr-   r.   Zsrc_extensionsZobj_extensionZstatic_lib_extensionZ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,   r4   r>   rJ   rN   rV   r[   r]   ri   r*   r*   r*   r+   r   -   sN    





B*r   )r   r-   rb   Z	distutilsr   Zdistutils.dep_utilr   Zdistutils.ccompilerr   r   r   Zdistutils.errorsr   r   r	   r
   r   r.   r/   r   r*   r*   r*   r+   <module>   s    
