MINI MINI MANI MO
3
  \V                 @   sT   d Z ddlZddlmZ ddlT ddlmZ ddlmZ dd Z	G d	d
 d
eZ
dS )zdistutils.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   ddl 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 Zd ZdZd"d#d$d%d&gZddgZdddefgZdd Zdd Z	dd Z
dd Zdd Zdd Z
d d! ZdS )'
build_clibz/build C/C++ libraries used by Python extensionsbuild-clib=b%directory to build C/C++ libraries tobuild-temp=t,directory to put temporary build by-productsdebugg"compile with debugging informationforcef2forcibly build everything (ignore file timestamps)	compiler=cspecify the compiler typez
help-compilerNzlist available compilersc             C   s:   d | _ d | _d | _d | _d | _d | _d | _d| _d | _d S )Nr   )	r
   
build_temp	librariesinclude_dirsdefineundefr   r   compiler)selfr   r   r	   initialize_options4   s    zbuild_clib.initialize_optionsc             C   sh   | j dddd	d
d | jj| _| jr0| j| j | jd krH| jjpDg | _t| jtrd| jjtj	| _d S )NZbuildr   r
   r   r   r   )r   r
   )r   r   )r   r   )r   r   )r   r   )
Zset_undefined_optionsZdistributionr   check_library_listr   
isinstancestrsplitospathsep)r    r   r   r	   finalize_optionsD   s    
zbuild_clib.finalize_optionsc             C   s   | j s
d S ddlm} || j| j| jd| _t| j | jd k	rN| jj| j | j	d k	rzx | j	D ]\}}| jj
|| q`W | jd k	rx| jD ]}| jj| qW | j
| j  d S )Nr   )new_compiler)r   dry_runr   )r   r   r)   r   r*   r   r   r   Zset_include_dirsr   Zdefine_macror   Zundefine_macrobuild_libraries)r    r)   namevalueZmacror   r   r	   run^   s     
zbuild_clib.runc             C   s   t |tstdx|D ]|}t |t r<t|dkr<td|\}}t |tsVtdd|ksrtjdkrtj|krtd|d  t |tstdqW 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#   listDistutilsSetupErrortuplelenr$   r&