o
    Ee                     @   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 )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)DistutilsSetupError)customize_compiler)logc                  C   s   ddl m}  |   d S )Nr   show_compilers)	ccompilerr   r    r
   i/var/www/bmteknikk.ddns.net/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_options/   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_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   set_include_dirsr   define_macror   undefine_macrobuild_libraries)r   r'   namevaluemacror
   r
   r   runY   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 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 '%s': may not contain directory separatorsr   zMsecond 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    q   s,   



zbuild_clib.check_library_listc                 C   s,   | j sd S g }| j D ]	\}}|| q
|S )N)r   append)r   	lib_nameslib_namer8   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sourcesfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames)r    r   getr!   r2   r3   r   extend)r   	filenamesr;   r8   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_dirrC   r   r   )rD   r   )r?   r!   r2   r3   r   r   infor   compiler   r   create_static_libr   )r   r   r;   r8   r=   rC   r   objectsr
   r
   r   r,      s.   


zbuild_clib.build_libraries)__name__
__module____qualname__descriptionuser_optionsboolean_optionsr   help_optionsr   r&   r0   r    r<   rB   r,   r
   r
   r
   r   r      s    
%r   )__doc__r$   corer   errorsr   	sysconfigr   distutils._logr   r   r   r
   r
   r
   r   <module>   s    