509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \V  ã               @   sT   d Z ddlZddlmZ ddlT ddlmZ ddlmZ dd„ Z	G d	d
„ d
eƒZ
dS )z´distutils.command.build_clib

Implements the Distutils 'build_clib' command, to build a C/C++ library
that is included in the module distribution and needed by an extension
module.é    N)ÚCommand)Ú*)Úcustomize_compiler)Úlogc              C   s   ddl m}  | ƒ  d S )Nr   )Úshow_compilers)Údistutils.ccompilerr   )r   © r   ú4/usr/lib64/python3.6/distutils/command/build_clib.pyr      s    r   c               @   sl   e Zd ZdZd"d#d$d%d&gZddgZdddefgZdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd d!„ ZdS )'Ú
build_clibz/build C/C++ libraries used by Python extensionsúbuild-clib=Úbú%directory to build C/C++ libraries toúbuild-temp=Útú,directory to put temporary build by-productsÚdebugÚgú"compile with debugging informationÚforceÚfú2forcibly build everything (ignore file timestamps)ú	compiler=Úcúspecify the compiler typezhelp-compilerNzlist available compilersc             C   s:   d | _ d | _d | _d | _d | _d | _d | _d| _d | _d S )Nr   )	r
   Ú
build_tempÚ	librariesÚinclude_dirsÚdefineÚundefr   r   Úcompiler)Úselfr   r   r	   Úinitialize_options4   s    zbuild_clib.initialize_optionsc             C   sh   | j dddd	d
dƒ | jj| _| jr0| j| jƒ | jd krH| jjpDg | _t| jtƒrd| jjtj	ƒ| _d S )NZbuildr   r
   r   r   r   )r   r
   )r   r   )r   r   )r   r   )r   r   )
Zset_undefined_optionsZdistributionr   Úcheck_library_listr   Ú
isinstanceÚstrÚsplitÚosÚpathsep)r    r   r   r	   Úfinalize_optionsD   s    

zbuild_clib.finalize_optionsc             C   s°   | j s
d S ddlm} || j| j| jd�| _t| jƒ | jd k	rN| jj| jƒ | j	d k	rzx | j	D ]\}}| jj
||ƒ q`W | jd k	r x| jD ]}| jj|ƒ qŒW | j| j ƒ d S )Nr   )Únew_compiler)r   Údry_runr   )r   r   r)   r   r*   r   r   r   Zset_include_dirsr   Zdefine_macror   Zundefine_macroÚbuild_libraries)r    r)   ÚnameÚvalueZmacror   r   r	   Úrun^   s     



zbuild_clib.runc             C   sœ   t |tƒstdƒ‚x„|D ]|}t |tƒ r<t|ƒdkr<tdƒ‚|\}}t |tƒsVtdƒ‚d|ksrtjdkr‚tj|kr‚td|d  ƒ‚t |tƒstdƒ‚qW d	S )
a`  Ensure that the list of libraries is valid.

        `library` is presumably provided as a command option 'libraries'.
        This method checks that it is a list of 2-tuples, where the tuples
        are (library_name, build_info_dict).

        Raise DistutilsSetupError if the structure is invalid anywhere;
        just returns otherwise.
        z+'libraries' option must be a list of tuplesé   z*each element of 'libraries' must a 2-tuplezNfirst element of each tuple in 'libraries' must be a string (the library name)ú/z;bad library name '%s': may not contain directory separatorsr   zMsecond element of each tuple in 'libraries' must be a dictionary (build info)N)	r#   ÚlistÚDistutilsSetupErrorÚtupleÚlenr$   r&   ÚsepÚdict)r    r   Úlibr,   Ú
build_infor   r   r	   r"   v   s"    




zbuild_clib.check_library_listc             C   s0   | j s
d S g }x| j D ]\}}|j|ƒ qW |S )N)r   Úappend)r    Z	lib_namesÚlib_namer8   r   r   r	   Úget_library_namesš   s    zbuild_clib.get_library_namesc             C   s`   | j | jƒ g }xJ| jD ]@\}}|jdƒ}|d ksBt|ttfƒ rNtd| ƒ‚|j|ƒ qW |S )NÚsourceszfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames)r"   r   Úgetr#   r1   r3   r2   Úextend)r    Ú	filenamesr:   r8   r<   r   r   r	   Úget_source_files¦   s    
zbuild_clib.get_source_filesc             C   sž   x˜|D ]�\}}|j dƒ}|d ks0t|ttfƒ r<td| ƒ‚t|ƒ}tjd|ƒ |j dƒ}|j dƒ}| jj|| j	||| j
d�}| jj||| j| j
d� qW d S )Nr<   zfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenameszbuilding '%s' libraryÚmacrosr   )Ú
output_dirrA   r   r   )rB   r   )r=   r#   r1   r3   r2   r   Úinfor   Úcompiler   r   Zcreate_static_libr
   )r    r   r:   r8   r<   rA   r   Zobjectsr   r   r	   r+   µ   s$    




zbuild_clib.build_libraries)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )Ú__name__Ú
__module__Ú__qualname__ZdescriptionZuser_optionsZboolean_optionsr   Zhelp_optionsr!   r(   r.   r"   r;   r@   r+   r   r   r   r	   r
      s*        
$r
   )Ú__doc__r&   Zdistutils.corer   Zdistutils.errorsZdistutils.sysconfigr   Z	distutilsr   r   r
   r   r   r   r	   Ú<module>   s   