U &�.e�;�@s�dZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZmZmZddlmZejdkr~ddlZGd d �d e �ZdS) a9distutils.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�eZdZdZddgdgdgddgdgddgdd�Zejdd�d krNd ged <d d d dddgZdZdZ dZ dZ dZ dZ ZZeZejdkr�dZ�fdd�Zd.dd�Zdd�Zd/d d!�Zd0d"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd1d,d-�Z�ZS)2� UnixCCompilerZunixNZccz-sharedZarz-cr)� preprocessor�compiler� compiler_so� compiler_cxx� linker_so� linker_exe�archiver�ranlib�r rz.cz.Cz.ccz.cxxz.cppz.mz.oz.az.soz.dylibz.tbdzlib%s%s�cygwinz.execs@t��|||�\}}}t�d�}|r6||kr6|�|�|||fS)z'Remove standard library path from rpathZLIBDIR)�super� _fix_lib_argsr�get_config_var�remove)�self� libraries� library_dirs�runtime_library_dirsZlibdir�� __class__��//usr/lib64/python3.8/distutils/unixccompiler.pyrUs�    zUnixCCompiler._fix_lib_argsc Cs�|�d||�}|\}}}t||�} |j| } |r>| �d|g�|rN|| dd�<|r\| �|�| �|�|js~|dks~t||�r�|r�|�tj � |��z|� | �Wn*t k r�} z t | ��W5d} ~ XYnXdS)N�-or)Z_fix_compile_argsrr�extend�appendZforcer�mkpath�os�path�dirname�spawnrr) r�sourceZ output_fileZmacrosZ include_dirs� extra_preargs�extra_postargs� fixed_args�ignore�pp_optsZpp_args�msgr"r"r#� preprocess^s$      zUnixCCompiler.preprocessc Csp|j}tjdkr t�|||�}z |�|||d|g|�Wn*tk rj}z t|��W5d}~XYnXdS)Nr r$)r�sys�platform� _osx_support�compiler_fixupr+rr) r�obj�srcZextZcc_argsr.r1rr2r"r"r#�_compilexs �� zUnixCCompiler._compilerc Cs�|�||�\}}|j||d�}|�||�r�|�tj�|��|�|j|g||j �|j r�z|�|j |g�Wq�t k r�}z t |��W5d}~XYq�Xn t �d|�dS)N)� output_dir�skipping %s (up-to-date))�_fix_object_args�library_filename� _need_linkr'r(r)r*r+r�objectsrrr r �debug)rr@Zoutput_libnamer;rA� target_lang�output_filenamer2r"r"r#�create_static_lib�s$ � ��� zUnixCCompiler.create_static_libc Cs�|�||�\}}|�|||�}|\}}}t||||�}t|ttd�f�sPtd��|dk rftj� ||�}|� ||��r�||j |d|g}| r�dg|dd�<| r�| |dd�<| r�|� | �|� tj�|��z�|tjkr�|jdd�}n|jdd�}| dk�rr|j�rrd}tj�|d�dk�r@d}d||k�r@|d7}�q&tj�||�d k�r\d}nd}|j||||<tjd k�r�t�||�}|�||�Wn,tk �r�}z t|��W5d}~XYnXn t�d |�dS) Nz%'output_dir' must be a string or Noner$z-grzc++�env��=Z ld_so_aixr r<)r=rr� isinstance�str�type� TypeErrorr(r)�joinr?r@r%r'r*rZ EXECUTABLErrr�basenamer4r5r6r7r+rr r rA)rZ target_descr@rCr;rrrZexport_symbolsrAr-r.Z build_temprBr/Zlib_optsZld_argsZlinker�i�offsetr2r"r"r#�link�sZ� ���      zUnixCCompiler.linkcCsd|S)N�-Lr")r�dirr"r"r#�library_dir_option�sz UnixCCompiler.library_dir_optioncCsd|kpd|kS)NZgcczg++r")rZ compiler_namer"r"r#�_is_gcc�szUnixCCompiler._is_gcccCs�tj�t�d��}tjdd�dkr,d|Stjdd�dkrFd|Stjdd�d krz|�|�rnd d|gSd d|gS|�|�r�t�d �d kr�d|Sd|Snd|SdS)N�CCrr rQ�Zfreebsdz -Wl,-rpath=�zhp-uxz-Wl,+sz+sZGNULDZyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)r(r)rMrrr4r5rT)rrRrr"r"r#�runtime_library_dir_option�s     z(UnixCCompiler.runtime_library_dir_optioncCsd|S)Nz-lr")r�libr"r"r#�library_optionszUnixCCompiler.library_optioncCs�|j|dd�}|j|dd�}|j|dd�}|j|dd�}tjdkr|t�d�}t�d|�} | dkrrt�t�d ��} n | � d �} |D�] } t j � | |�} t j � | |�} t j � | |�}t j � | |�}tjdk�rL| � d �s�| � d ��rL| � d ��sLt j � | | d d�|�} t j � | | d d�|�} t j � | | d d�|�}t j � | | d d�|�}t j �| ��rb| St j �|��rx|St j �| ��r�| St j �|�r�|Sq�dS)N�shared)Zlib_type�dylib� xcode_stub�staticr ZCFLAGSz-isysroot\s*(\S+)rUrFz/System/z/usr/z /usr/local/)r>r4r5rr�re�searchr6Z_default_sysroot�groupr(r)rL� startswith�exists)r�dirsrYrAZshared_fZdylib_fZ xcode_stub_fZstatic_fZcflags�mZsysrootrRr[r\r^r]r"r"r#�find_library_filesF      ���  zUnixCCompiler.find_library_file)NNNNN)NrN) NNNNNrNNNN)r)�__name__� __module__� __qualname__Z compiler_typeZ executablesr4r5Zsrc_extensionsZ obj_extensionZstatic_lib_extensionZshared_lib_extensionZdylib_lib_extensionZxcode_stub_lib_extensionZstatic_lib_formatZshared_lib_formatZdylib_lib_formatZxcode_stub_lib_formatZ exe_extensionrr3r:rDrPrSrTrXrZrf� __classcell__r"r"r r#r -sb�     �  � � B*r )�__doc__r(r4r_Z distutilsrZdistutils.dep_utilrZdistutils.ccompilerrrrZdistutils.errorsrrr r r r5r6r r"r"r"r#�s