
    ia                        d Z ddlm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mZ dd	lmZ dd
lmZ ddlmZ  G 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.    )annotationsN)Callable)log)ClassVar   )new_compilershow_compilers)Command)DistutilsSetupError)customize_compilerc                      e Zd ZU dZg dZded<   ddgZded<   d	d
defgZded<   d Z	ddZ
ddZddZd Z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 typez$ClassVar[list[tuple[str, str, str]]]user_optionsr   r   zClassVar[list[str]]boolean_optionszhelp-compilerNzlist available compilerszAClassVar[list[tuple[str, str | None, str, Callable[[], object]]]]help_optionsc                    d | _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        d | _        d S )NF)	r   
build_temp	librariesinclude_dirsdefineundefr   r   compilerselfs    `/srv/django_bis/venv311/lib/python3.11/site-packages/setuptools/_distutils/command/build_clib.pyinitialize_optionszbuild_clib.initialize_options-   sJ      !


    returnNonec                \   |                      dddddd           | j        j        | _        | j        r|                     | j                   | j        | j        j        pg | _        t          | j        t                    r+| 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    s    r"   finalize_optionszbuild_clib.finalize_options<   s     	""(($	
 	
 	
 *4> 	4##DN333$ $ 1 > D"Dd'-- 	D $ 1 7 7
 C CD	D 	Dr$   c                   | j         sd S t          | j        | j        | j                  | _        t          | j                   | j        | j                            | j                   | j        (| j        D ] \  }}| j        	                    ||           !| j
        $| j
        D ]}| j                            |           |                     | j                    d S )N)r   dry_runr   )r   r   r   r3   r   r   r   set_include_dirsr   define_macror   undefine_macrobuild_libraries)r!   namevaluemacros       r"   runzbuild_clib.runW   s    ~ 	F$]DL

 
 
 	4=)))(M**4+<===;"#{ 8 8e**47777:! 4 4,,U3333T^,,,,,r$   c                   t          |t                    st          d          |D ]}t          |t                    s"t	          |          dk    rt          d          |\  }}t          |t
                    st          d          d|v st          j        dk    r't          j        |v rt          d|d          d          t          |t                    st          d	          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   libr8   
build_infos        r"   r+   zbuild_clib.check_library_listl   s    )T** 	U%&STTT 	 	Cc5)) Xc#hh!mm)*VWWW"D*dC(( ):  
 d{{rv}}4)XQXXX   j$// )8  #	 	r$   c                `    | j         sd S g }| j         D ]\  }}|                    |           |S )N)r   append)r!   	lib_nameslib_name_build_infos       r"   get_library_nameszbuild_clib.get_library_names   sK     ~ 	4	%)^ 	' 	'!HkX&&&&r$   c                   |                      | j                   g }| j        D ]`\  }}|                    d          }|t          |t          t
          f          st          d| d          |                    |           a|S )Nsources in 'libraries' option (library 'D'), 'sources' must be present and must be a list of source filenames)r+   r   getr,   r>   r?   r   extend)r!   	filenamesrH   rD   rL   s        r"   get_source_fileszbuild_clib.get_source_files   s    ///	$(N 		& 		& Hj nnY//Gj4-&H&H)1x 1 1 1   W%%%%r$   c                   |D ]\  }}|                     d          }|t          |t          t          f          st	          d| d          t          |          }t          j        d|           |                     d          }|                     d          }| j                            || j	        ||| j
                  }| j                            ||| j        | j
                   d S )	NrL   rM   rN   zbuilding '%s' librarymacrosr   )
output_dirrT   r   r   )rU   r   )rO   r,   r>   r?   r   r   infor   compiler   r   create_static_libr   )r!   r   rH   rD   rL   rT   r   objectss           r"   r7   zbuild_clib.build_libraries   s   $- 	 	 Hj nnY//Gj4-&H&H)1x 1 1 1  
 7mmGH,h777
  ^^H--F%>>.99Lm++?)j ,  G M++doTZ ,    9	 	r$   )r%   r&   )__name__
__module____qualname__descriptionr   __annotations__r   r	   r   r#   r1   r;   r+   rJ   rR   r7    r$   r"   r   r      s        CK: : :L     -4W+=O==== 
$ :NKWL      D D D D6- - - -*" " " "H	 	 	       r$   r   )__doc__
__future__r   r/   collections.abcr   distutils._logr   typingr   	ccompilerr   r	   corer
   errorsr   	sysconfigr   r   r_   r$   r"   <module>ri      s     # " " " " " 				 $ $ $ $ $ $             4 4 4 4 4 4 4 4       ( ( ( ( ( ( * * * * * *m m m m m m m m m mr$   