o
    ªZh/  ã                   @   sd   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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)ÚClassVaré   )ÚCommand)ÚDistutilsSetupError)Úcustomize_compilerc                  C   s   ddl m}  | ƒ  d S )Nr   ©Úshow_compilers)Ú	ccompilerr	   r   © r   ú_/var/www/html/lang_env/lib/python3.10/site-packages/setuptools/_distutils/command/build_clib.pyr	      s   
r	   c                   @   s‚   e Zd ZU dZg d¢Zeeeeeef   e	d< 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 typeÚuser_optionsr   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_options1   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   )
Z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 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   Zset_include_dirsr   Zdefine_macror   Z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rAtj|v rAtd|d › dƒ‚t |tƒsJt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!   s   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 ]!\}}| d¡}|d u st|ttfƒs't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"   r0   r1   r   Úextend)r   Ú	filenamesr8   r6   r:   r   r   r   Úget_source_files¢   s   

ÿzbuild_clib.get_source_filesc                 C   sœ   |D ]I\}}|  d¡}|d u 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 )	Nr:   r;   r<   zbuilding '%s' libraryÚmacrosr   )Ú
output_dirrA   r   r   )rB   r   )r=   r"   r0   r1   r   r   Úinfor   Úcompiler   r   Zcreate_static_libr   )r   r   r8   r6   r:   rA   r   Úobjectsr   r   r   r*   ±   s*   

ÿ

ûÿäzbuild_clib.build_libraries)Ú__name__Ú
__module__Ú__qualname__Údescriptionr   r   r0   r1   r#   Ú__annotations__Zboolean_optionsr	   Zhelp_optionsr   r'   r.   r!   r9   r@   r*   r   r   r   r   r       s   
 "
ÿ$r   )Ú__doc__r%   Zdistutils._logr   Útypingr   Úcorer   Úerrorsr   Ú	sysconfigr   r	   r   r   r   r   r   Ú<module>   s    