o
    Ëý°jV  ã                   @   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	   ú›/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/setuptools/_distutils/command/build_clib.pyr      s   
r   c                   @   sf   e Zd ZdZg d¢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 )Nr   )	r   Ú
build_tempÚ	librariesÚinclude_dirsÚdefineÚundefr   r   Úcompiler©Úselfr	   r	   r
   Úinitialize_options4   s   
zbuild_clib.initialize_optionsc                 C   sl   |   dddddd¡ | jj| _| jr|  | j¡ | jd u r$| jjp"g | _t| jtƒr4| j tj	¡| _d S 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_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 ur'| j | j¡ | j	d ur;| j	D ]\}}| j 
||¡ q/| jd urL| jD ]}| j |¡ qC|  | j ¡ d S )Nr   )Únew_compiler)r   Údry_runr   )r   r   r&   r   r'   r   r   r   Úset_include_dirsr   Údefine_macror   Úundefine_macroÚbuild_libraries)r   r&   ÚnameÚvalueÚmacror	   r	   r
   Úrun^   s"   þ




zbuild_clib.runc                 C   s–   t |tƒs	tdƒ‚|D ]=}t |tƒst|ƒdkrtdƒ‚|\}}t |tƒs)tdƒ‚d|v s7tjdkr?tj|v r?td|d  ƒ‚t |tƒsHt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 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   s0   

ÿÿ
ÿÿ
ÿÿðzbuild_clib.check_library_listc                 C   s,   | j sd S g }| j D ]	\}}| |¡ q
|S )N)r   Úappend)r   Ú	lib_namesÚlib_namer9   r	   r	   r
   Úget_library_namesš   s   zbuild_clib.get_library_namesc                 C   sZ   |   | j¡ g }| jD ]\}}| d¡}|d u st|ttfƒs%td| ƒ‚| |¡ q|S )NÚsourcesúfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames)r   r   Úgetr    r2   r4   r3   Úextend)r   Ú	filenamesr<   r9   r>   r	   r	   r
   Úget_source_files¦   s   
þÿzbuild_clib.get_source_filesc                 C   s˜   |D ]G\}}|  d¡}|d u st|ttfƒstd| ƒ‚t|ƒ}t d|¡ |  d¡}|  d¡}| jj|| j	||| j
d�}| jj||| j| j
d� qd S )Nr>   r?   zbuilding '%s' libraryÚmacrosr   )Ú
output_dirrD   r   r   )rE   r   )r@   r    r2   r4   r3   r   Úinfor   Úcompiler   r   Úcreate_static_libr   )r   r   r<   r9   r>   rD   r   Úobjectsr	   r	   r
   r+   µ   s.   
þÿ

ü
	þçzbuild_clib.build_libraries)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsr   Úhelp_optionsr   r%   r/   r   r=   rC   r+   r	   r	   r	   r
   r      s    ÿÿ$r   )Ú__doc__r#   Údistutils.corer   Údistutils.errorsÚdistutils.sysconfigr   Ú	distutilsr   r   r   r	   r	   r	   r
   Ú<module>   s    