o 0iV @ sT d Z ddlZddlmZ ddlT ddlmZ ddlmZ dd Z G d d d eZ dS )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)*)customize_compiler)logc C s ddl m} | d S )Nr show_compilers)distutils.ccompilerr r r C/opt/alt/python310/lib64/python3.10/distutils/command/build_clib.pyr s r c @ sf e Zd ZdZg dZddgZdddefgZdd Zd d Z dd Z dd Zdd Zdd Z dd ZdS ) build_clibz/build C/C++ libraries used by Python extensions))zbuild-clib=bz%directory to build C/C++ libraries to)zbuild-temp=tz,directory to put temporary build by-products)debuggz"compile with debugging information)forcefz2forcibly build everything (ignore file timestamps))z compiler=czspecify the compiler typer r z help-compilerNzlist available compilersc C s: d | _ d | _d | _d | _d | _d | _d | _d| _d | _d S )Nr ) r build_temp librariesinclude_dirsdefineundefr r compilerselfr r r initialize_options4 s zbuild_clib.initialize_optionsc C sl | dddddd | jj| _| jr| | j | jd u r$| jjp"g | _t| jtr4| jtj | _d S d S )NZbuild)r r )r r )r r )r r )r r ) Zset_undefined_optionsZdistributionr check_library_listr isinstancestrsplitospathsepr r r r finalize_optionsD s zbuild_clib.finalize_optionsc C s | j sd S ddlm} || j| j| jd| _t| j | jd ur'| j| j | j d ur;| j D ]\}}| j || q/| jd urL| jD ]}| j| qC| | j d S )Nr )new_compiler)r dry_runr )r r r# r r$ r r r Zset_include_dirsr Zdefine_macror Zundefine_macrobuild_libraries)r r# namevalueZmacror r r run^ s" zbuild_clib.runc C s t |ts td|D ]=}t |tst|dkrtd|\}}t |ts)tdd|v s7tjdkr?tj|v r?td|d t |tsHtdqd 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 listDistutilsSetupErrortuplelenr r sepdict)r r libr&