a XC?h=3�@shddlZddlZddlmZddlmZddlmZddlm Z ddd�Z Gd d �d e�Z d d d �Z dS)�N)�Command)�DistutilsExecError)�customize_compiler)�logz.cz.cxx)�czc++c@s�eZdZdZgd�Zdd�Zdd�Zdd�Zd d �Zd d �Z d d�Z dd�Z dd�Z dd�Z d(dd�Zd)dd�Zd*dd�Zd+dd�Zd,dd �Zd-d"d#�Zdddgfd$d%�Zd.d&d'�ZdS)/�configzprepare to build) )z compiler=Nzspecify the compiler type)zcc=Nzspecify the compiler executable)z include-dirs=�Iz.list of directories to search for header files)zdefine=�DzC preprocessor macros to define)zundef=�Uz!C preprocessor macros to undefine)z libraries=�lz!external C libraries to link with)z library-dirs=�Lz.directories to search for external C libraries)�noisyNz1show every action (compile, link, run, ...) taken)z dump-sourceNz=dump generated source files before attempting to compile themcCs4d|_d|_d|_d|_d|_d|_d|_g|_dS)N�)�compilerZcc� include_dirs� libraries� library_dirsr � dump_source� temp_files��self�r�=/opt/alt/python39/lib64/python3.9/distutils/command/config.py�initialize_options3szconfig.initialize_optionscCs�|jdur|jjpg|_nt|jt�r6|j�tj�|_|jdurHg|_nt|jt�r^|jg|_|jdurpg|_nt|jt�r�|j�tj�|_dS�N) rZ distribution� isinstance�str�split�os�pathseprrrrrr�finalize_optionsBs       zconfig.finalize_optionscCsdSrrrrrr�runRsz config.runcCszddlm}m}t|j|�sv||j|jdd�|_t|j�|jrN|j�|j�|j rb|j� |j �|j rv|j� |j �dS)Nr)� CCompiler� new_compilerr)r�dry_runZforce) �distutils.ccompilerr"r#rrr$rrZset_include_dirsrZ set_librariesrZset_library_dirs)rr"r#rrr�_check_compilerYs � zconfig._check_compilercCs�dt|}t|d��V}|r>|D]}|�d|�q |�d�|�|�|ddkr^|�d�Wd�n1sr0Y|S)NZ _configtest�wz#include <%s> � �����)�LANG_EXT�open�write)r�body�headers�lang�filename�file�headerrrr�_gen_temp_sourcefileks     (zconfig._gen_temp_sourcefilecCs<|�|||�}d}|j�||g�|jj|||d�||fS)Nz _configtest.i�r)r3r�extendrZ preprocess)rr-r.rr/�src�outrrr� _preprocessws zconfig._preprocesscCs\|�|||�}|jr"t|d|�|j�|g�\}|j�||g�|jj|g|d�||fS)Nzcompiling '%s':r4)r3r� dump_filerZobject_filenamesrr5�compile)rr-r.rr/r6�objrrr�_compile~szconfig._compilec Csr|�||||�\}}tj�tj�|��d} |jj|g| |||d�|jjdur\| |jj} |j� | �||| fS)Nr)rrZ target_lang) r<r�path�splitext�basenamerZlink_executableZ exe_extensionr�append) rr-r.rrrr/r6r;�progrrr�_link�s �   z config._linkc GsR|s|j}g|_t�dd�|��|D]&}zt�|�Wq&tyJYq&0q&dS)Nz removing: %s� )rr�info�joinr�remove�OSError)r� filenamesr0rrr�_clean�s z config._cleanNrcCsPddlm}|��d}z|�||||�Wn|yBd}Yn0|��|S)Nr�� CompileErrorTF)r%rKr&r8rI�rr-r.rr/rK�okrrr�try_cpp�s   zconfig.try_cppc Cs�|��|�||||�\}}t|t�r0t�|�}t|��8}d} |��} | dkrPqb|�| �r>d} qbq>Wd�n1sv0Y|� �| S)NF�T) r&r8rr�rer:r+�readline�searchrI) r�patternr-r.rr/r6r7r1�match�linerrr� search_cpp�s     "zconfig.search_cppcCsbddlm}|��z|�||||�d}Wn|yBd}Yn0t�|rPdpRd�|��|S)NrrJTF�success!�failure.)r%rKr&r<rrDrIrLrrr� try_compile�s   zconfig.try_compilec Csnddlm}m}|��z|�||||||�d} Wn||fyNd} Yn0t�| r\dp^d�|��| S�Nr)rK� LinkErrorTFrWrX)r%rKr[r&rBrrDrI) rr-r.rrrr/rKr[rMrrr�try_link�s � zconfig.try_linkc Cs�ddlm}m}|��z.|�||||||�\} } } |�| g�d} Wn||tfybd} Yn0t�| rpdprd�|� �| SrZ) r%rKr[r&rBZspawnrrrDrI) rr-r.rrrr/rKr[r6r;ZexerMrrr�try_run�s �   zconfig.try_runrc Cst|��g}|r|�d|�|�d�|r<|�d|�n|�d|�|�d�d�|�d}|�|||||�S)Nz int %s ();z int main () {z %s();z %s;�}r()r&r@rEr\) r�funcr.rrrZdeclZcallr-rrr� check_funcs   �zconfig.check_funccCs |��|�d|||g||�S)Nzint main (void) { })r&r\)rZlibraryrr.rZother_librariesrrr� check_lib4s   �zconfig.check_libcCs|jd|g|d�S)Nz /* No body */)r-r.r)rN)rr2rrr/rrr� check_headerBs �zconfig.check_header)NNNr)NNNr)NNr)NNNNr)NNNNr)NNNNrr)NNr)�__name__� __module__� __qualname__Z descriptionZ user_optionsrr r!r&r3r8r<rBrIrNrVrYr\r]r`rarbrrrrrs>   �  � � � � �rcCsR|durt�d|�n t�|�t|�}zt�|���W|��n |��0dS)Nz%s)rrDr+�read�close)r0�headr1rrrr9Ks r9)N) rrPZdistutils.corerZdistutils.errorsrZdistutils.sysconfigrZ distutilsrr*rr9rrrr� s     8