a XC?h.:�@slddlZddlmZmZmZmZmZddlmZm Z ddl m Z ddl m Z ddlmZGdd�de�ZdS) �N)�DistutilsExecError� CompileError�LibError� LinkError�UnknownFileError)� CCompiler�gen_preprocess_options)� write_file)�newer)�logc @s�eZdZdZiZdgZgd�ZeeZdZdZ dZ dZ Z dZ dd d �Zdd d�Zddd�Zddd�Zddd�Zddd�Zd dd�Zd S)!� BCPPCompilerZbcppz.c)z.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exercCsnt�||||�d|_d|_d|_d|_gd�|_gd�|_gd�|_gd�|_ g|_ gd�|_ gd�|_ dS) Nz bcc32.exez ilink32.exeztlib.exe)�/tWMz/O2�/q�/g0)r z/Odrr)z/Tpd�/Gnr�/x)rrr)rrrz/r) r�__init__�cc�linker�libZpreprocess_options�compile_options�compile_options_debug�ldflags_shared�ldflags_shared_debugZldflags_static� ldflags_exe�ldflags_exe_debug)�self�verboseZdry_run�force�r�;/opt/alt/python39/lib64/python3.9/distutils/bcppcompiler.pyr5s     zBCPPCompiler.__init__Nc  Cs�|�||||||�\}} }} } |p$g} | �d�|rB| �|j�n | �|j�| D�]>} z| | \}}Wnty~YqRYn0tj�|�}tj�| �} |� tj� | ��|dkr�qR|dk�rz|� dd| |g�WqRt �y}zt |��WYd}~qRd}~00qR||jv�rd}n||jv�r*d}nd}d| }z,|� |jg| | ||g||g�WqRt �y�}zt |��WYd}~qRd}~00qR| S) Nz-c�.res�.rcZbrcc32z-fo�z-P�-o)Z_setup_compile�append�extendrr�KeyError�os�path�normpath�mkpath�dirname�spawnrr� _c_extensions�_cpp_extensionsr)rZsources� output_dir�macros� include_dirs�debug� extra_preargs�extra_postargsZdepends�objects�pp_optsZbuildZ compile_opts�obj�src�ext�msgZ input_optZ output_optrrr �compileQsT ��           ���  zBCPPCompiler.compilec Cs�|�||�\}}|j||d�}|�||�r�|dg|}|r:z|�|jg|�Wq�ty|}zt|��WYd}~q�d}~00n t�d|�dS)N)r0z/u�skipping %s (up-to-date)) �_fix_object_args�library_filename� _need_linkr-rrrr r3) rr6Zoutput_libnamer0r3� target_lang�output_filenameZlib_argsr;rrr �create_static_lib�s �   zBCPPCompiler.create_static_libc Cs�|�||�\}}|�|||�\}}}|r8t�dt|��|durNtj�||�}|�||��r�|t j kr�d}| r~|j dd�}q�|j dd�}n&d}| r�|j dd�}n|jdd�}|dur�d}n�tj�|�\}}tj�|�\}}tj�|d�}tj�|d|�}dg}|�pgD]}|�d||f��q|�t||fd |�ttjj|�}|g}g}|D]>}tj�tj�|��\}}|d k�r�|�|�n |�|��q`|D]}|�d tj�|���q�|�d �|�|�|�d |g�|�d�|D]4}|�||| �}|du�r|�|�n |�|��q�|�d�|�d�|�d |g�|�d �|�|�| �rp| |dd�<| �r�|�| �|�tj�|��z|�|jg|�Wn.t�y�}zt|��WYd}~n d}~00n t�d|�dS)Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r#rz%s.defZEXPORTSz %s=_%sz writing %sr!z/L%sz/L.�,z,,Zimport32Zcw32mtr=) r>Z _fix_lib_argsr �warn�strr(r)�joinr@rZ EXECUTABLErrrr�split�splitextr,r%Zexecuter �mapr*�normcaser&�find_library_filer+r-rrrr3) rZ target_descr6rBr0Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsr3r4r5Z build_temprAZ startup_objZld_argsZdef_file�head�tail�modnamer:Ztemp_dir�contentsZsymZobjects2Z resources�file�base�lr�libfiler;rrr �link�s� ��  �              zBCPPCompiler.linkc Csr|r"|d}|d|d||f}n |d|f}|D]:}|D]0}tj�||�|��}tj�|�r:|Sq:q2dS)NZ_dZ_bcpp)r(r)rGr?�exists) r�dirsrr3ZdlibZ try_names�dir�namerTrrr rL4s   zBCPPCompiler.find_library_filer#cCs�|dur d}g}|D]�}tj�tj�|��\}}||jddgvrRtd||f��|rbtj�|�}|dkr�|�tj�|||��q|dkr�|�tj�||d��q|�tj�|||j ��q|S)Nr#r"r!z"unknown file type '%s' (from '%s')) r(r)rIrK�src_extensionsr�basenamer%rG� obj_extension)rZsource_filenamesZ strip_dirr0Z obj_namesZsrc_namerRr:rrr �object_filenamesNs$ �  �zBCPPCompiler.object_filenamesc Cs�|�d||�\}}}t||�}dg|} |dur>| �d|�|rN|| dd�<|r\| �|�| �|�|js~|dus~t||�r�|r�|�tj� |��z|� | �Wn4t y�} zt | �t | ��WYd} ~ n d} ~ 00dS)Nz cpp32.exer$r)Z_fix_compile_argsrr%r&rr r+r(r)r,r-r�printr) r�sourceZ output_filer1r2r4r5�_r7Zpp_argsr;rrr � preprocessis& �     zBCPPCompiler.preprocess)rrr)NNNrNNN)NrN) NNNNNrNNNN)r)rr#)NNNNN)�__name__� __module__� __qualname__Z compiler_typeZ executablesr.r/rZr\Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrr<rCrUrLr]rarrrr r sV� � D� �  � �r )r(Zdistutils.errorsrrrrrZdistutils.ccompilerrrZdistutils.file_utilr Zdistutils.dep_utilr Z distutilsr r rrrr �s