B
    Vb                 @   s   d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	 Zee	d
e dddZee	de dS )z>
unixccompiler - can handle very long argument lists for ar.

    N)CompileErrorDistutilsExecErrorLibError)UnixCCompiler)replace_method)_commandline_dep_string)logc          
   C   s  | j }|d dkrFd|kr$|d d|kr6|d |dg7 }|| _ dtjkrddlm} dtjd  }	d|dd  }
d| j }|	|kr||
|	}| | _ d| j	}|	|kr| |	  | _	d	tj
| j d |f }t| d
drdd|d g}ng }y*| j| j | |d|g | | |d W n6 tk
rr } zt|}t|dW dd}~X Y nX |rtjdkrtddd|d g t|d d}|t||| W dQ R X dS )z9Compile a single source files with a Unix-style compiler.r   ZaCCz-Aez-Aaz-AAZOPT)get_config_vars z%s: %sZ_auto_dependsFz-MMDz-MFz.dz-o)displayNZzosZchtagz-tcZIBM1047a)Zcompiler_soremoveosenvironZ	sysconfigr	   joinsplitreplaceZ	linker_sopathbasenamegetattrspawnr   strr   sysplatform
subprocessZcheck_outputopenwriter   )selfobjsrcZextZcc_argsZextra_postargsZpp_optsZccompr	   ZoptZgcv_optZccomp_sZllink_sr   Zdepsemsgf r#   <lib/python3.7/site-packages/numpy/distutils/unixccompiler.pyUnixCCompiler__compile   sD    




r%   _compilec          
   C   sR  |  ||\}}| j||d}| ||rByt| W n ttfk
rR   Y nX | tj	| || j
 }xZ|r|dd }|dd }dtj| jd t||f }| j| j|g | |d qrW | jrNdtj| jd |f }y| j| j|g |d W n6 tk
r> }	 zt|	}
t|
dW dd}	~	X Y nX ntd| dS )	a  
    Build a static library in a separate sub-process.

    Parameters
    ----------
    objects : list or tuple of str
        List of paths to object files used to build the static library.
    output_libname : str
        The library name as an absolute or relative (if `output_dir` is used)
        path.
    output_dir : str, optional
        The path to the output directory. Default is None, in which case
        the ``output_dir`` attribute of the UnixCCompiler instance.
    debug : bool, optional
        This parameter is not used.
    target_lang : str, optional
        This parameter is not used.

    Returns
    -------
    None

    )
output_dirN2   z %s: adding %d object files to %sr   )r   z%s:@ %szskipping %s (up-to-date))Z_fix_object_argsZlibrary_filenameZ
_need_linkr   unlinkIOErrorOSErrorZmkpathr   dirnameobjectsr   Zarchiverlenr   Zranlibr   r   r   r   debug)r   r-   Zoutput_libnamer'   r/   Ztarget_langZoutput_filenameZtmp_objectsr   r    r!   r#   r#   r$   UnixCCompiler_create_static_libH   s8    
r0   Zcreate_static_lib)Nr   N)__doc__r   r   r   Zdistutils.errorsr   r   r   Zdistutils.unixccompilerr   Znumpy.distutils.ccompilerr   Znumpy.distutils.misc_utilr   Znumpy.distutilsr   r%   r0   r#   r#   r#   r$   <module>   s   5
B