U
    aÊ¹j  ã                   @   sX   d Z ddlZddlmZ ddlmZ 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)Úlogé   )ÚCommand)ÚDistutilsSetupError)Úcustomize_compilerc                  C   s   ddl m}  | ƒ  d S )Nr   ©Úshow_compilers)Ú	ccompilerr   r   © r
   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_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)zbuild-clib=Úbz%directory to build C/C++ libraries to)zbuild-temp=Útz,directory to put temporary build by-products)ÚdebugÚgz"compile with debugging information)ÚforceÚfz2forcibly build everything (ignore file timestamps))z	compiler=Úczspecify the compiler typer   r   zhelp-compilerNzlist available compilersc                 C   s:   d | _ d | _d | _d | _d | _d | _d | _d| _d | _d S )NF)	r   Ú
build_tempÚ	librariesÚinclude_dirsÚdefineÚundefr   r   Úcompiler©Úselfr
   r
   r   Úinitialize_options0   s    zbuild_clib.initialize_optionsc                 C   sh   |   dddddd¡ | jj| _| jr0|  | j¡ | jd krH| jjpDg | _t| jtƒrd| j tj	¡| _d S )NÚbuild)r   r   )r   r   )r   r   )r   r   )r   r   )
Úset_undefined_optionsÚdistributionr   Úcheck_library_listr   Ú
isinstanceÚstrÚsplitÚosÚpathsepr   r
   r
   r   Úfinalize_options?   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	d k	rv| j	D ]\}}| j 
||¡ q^| jd k	r˜| jD ]}| j |¡ q†|  | 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ÚvalueÚmacror
   r
   r   ÚrunZ   s$      ÿ




zbuild_clib.runc                 C   sš   t |tƒstdƒ‚|D ]~}t |tƒs8t|ƒdkr8tdƒ‚|\}}t |tƒsRtdƒ‚d|ksntjdkr‚tj|kr‚td|d › d�ƒ‚t |tƒstd	ƒ‚q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 tuplesr   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 'r   z'': may not contain directory separatorszMsecond element of each tuple in 'libraries' must be a dictionary (build info)N)	r!   Úlistr   ÚtupleÚlenr"   r$   ÚsepÚdict)r   r   Úlibr*   Ú
build_infor
   r
   r   r    r   s$    


ÿÿ
ÿzbuild_clib.check_library_listc                 C   s,   | j s
d S g }| j D ]\}}| |¡ q|S )N)r   Úappend)r   Z	lib_namesÚlib_nameZ_build_infor
   r
   r   Úget_library_names—   s    zbuild_clib.get_library_namesc                 C   s^   |   | j¡ g }| jD ]B\}}| d¡}|d ks>t|ttfƒsNtd|› d�ƒ‚| |¡ q|S )NÚsourcesú in 'libraries' option (library 'úD'), 'sources' must be present and must be a list of source filenames)r    r   Úgetr!   r/   r0   r   Úextend)r   Ú	filenamesr7   r5   r9   r
   r
   r   Úget_source_files¢   s    

ÿzbuild_clib.get_source_filesc                 C   sœ   |D ]’\}}|  d¡}|d ks,t|ttfƒs<td|› d�ƒ‚t|ƒ}t d|¡ |  d¡}|  d¡}| jj|| j	||| j
d�}| jj||| j| j
d� qd S )	Nr9   r:   r;   zbuilding '%s' libraryÚmacrosr   )Ú
output_dirr@   r   r   )rA   r   )r<   r!   r/   r0   r   r   Úinfor   Úcompiler   r   Zcreate_static_libr   )r   r   r7   r5   r9   r@   r   Úobjectsr
   r
   r   r)   ±   s.    

ÿ

û   ÿzbuild_clib.build_libraries)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsr   Úhelp_optionsr   r&   r-   r    r8   r?   r)   r
   r
   r
   r   r      s"   û
ÿ%r   )Ú__doc__r$   Zdistutils._logr   Úcorer   Úerrorsr   Ú	sysconfigr   r   r   r
   r
   r
   r   Ú<module>   s   