
    df9                         d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ  ej$                  de        G d	 d
e
      Zy)zdistutils.bcppcompiler

Contains BorlandCCompiler, an implementation of the abstract CCompiler class
for the Borland C++ compiler.
    N)DistutilsExecErrorCompileErrorLibError	LinkErrorUnknownFileError)	CCompilergen_preprocess_options)
write_file)newer)logzbcppcompiler is deprecated and slated to be removed in the future. Please discontinue use or file an issue with pypa/distutils describing your use case.c                        e Zd ZdZdZi ZdgZg dZeez   ZdZ	dZ
dZdxZZd	Zd fd
	Z	 	 	 	 	 	 	 ddZ	 ddZ	 	 	 	 	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 ddZ xZS )BCPPCompilerzConcrete class that implements an interface to the Borland C/C++
    compiler, as defined by the CCompiler abstract class.
    bcppz.c)z.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exec                     t         |   |||       d| _        d| _        d| _        d | _        g d| _        g d| _        g d| _        g d| _	        g | _
        g d| _        g d| _        y )	Nz	bcc32.exezilink32.exeztlib.exe)/tWMz/O2/q/g0)r   z/Odr   r   )z/Tpd/Gnr   /x)r   r   r   )r   r   r   z/r)super__init__cclinkerlibpreprocess_optionscompile_optionscompile_options_debugldflags_sharedldflags_shared_debugldflags_staticldflags_exeldflags_exe_debug)selfverbosedry_runforce	__class__s       [/home/api-vastappli/venv/lib/python3.12/site-packages/setuptools/_distutils/bcppcompiler.pyr   zBCPPCompiler.__init__B   sk    '51 #"&;%A"9$?! .!:    c	                 Z   | j                  ||||||      \  }}	}}
}|xs g }|j                  d       |r|j                  | j                         n|j                  | j                         |	D ]  }	 ||   \  }}t        j                  j                  |      }t        j                  j                  |      }| j                  t        j                  j                  |             |dk(  r~|dk(  r	 | j                  dd||g       || j                  v rd}n|| j                  v rd}nd}d|z   }	 | j                  | j                   g|z   |
z   ||gz   |z   |gz           |	S # t
        $ r Y w xY w# t        $ r}t        |      d }~ww xY w# t        $ r}t        |      d }~ww xY w)	Nz-c.res.rcbrcc32z-fo z-P-o)_setup_compileappendextendr   r   KeyErrorospathnormpathmkpathdirnamespawnr   r   _c_extensions_cpp_extensionsr   )r#   sources
output_dirmacrosinclude_dirsdebugextra_preargsextra_postargsdependsobjectspp_optsbuildcompile_optsobjsrcextmsg	input_opt
output_opts                      r(   compilezBCPPCompiler.compileZ   s    ;?:M:Mgw;
7% %*D! : :; 4 45 1	(C :S ''""3'C''""3'C KK,-f}e|,JJ%c:;  d(((	,,, 	
 	J

(

WWI"# !*-. %	%
 eQ1	(f a    * ,&s++,: & ("3''(sB   3E%3E53.F%	E21E25	F>F		F	F*F%%F*c                 2   | j                  ||      \  }}| j                  ||      }| j                  ||      r+|dg|z   }|r	 	 | j                  | j                  g|z          y t        j                  d|       y # t
        $ r}t        |      d }~ww xY w)N)r=   z/uskipping %s (up-to-date))	_fix_object_argslibrary_filename
_need_linkr9   r   r   r   r   r@   )	r#   rD   output_libnamer=   r@   target_langoutput_filenamelib_argsrK   s	            r(   create_static_libzBCPPCompiler.create_static_lib   s     !% 5 5gz J*//:/V??7O4'.8H$

DHH:01 II0/B & $sm#$s   A= =	BBBc                    | j                  ||      \  }}| j                  |||      \  }}}|rt        j                  dt	        |             | t
        j                  j                  ||      }| j                  ||      rG|t        j                  k(  r$d}|	r| j                  d d  }n3| j                  d d  }n#d}|	r| j                  d d  }n| j                  d d  }|d}nt
        j                  j                  |      \  }}t
        j                  j!                  |      \  }}t
        j                  j#                  |d         }t
        j                  j                  |d|z        }dg}|xs g D ]#  }|j%                  dj'                  ||             % | j)                  t*        ||fd	|z         t-        t
        j                  j.                  |      }|g}g }|D ]i  }t
        j                  j!                  t
        j                  j1                  |            \  }}|d
k(  r|j%                  |       Y|j%                  |       k |D ]3  }|j%                  dt
        j                  j/                  |      z         5 |j%                  d       |j3                  |       |j3                  d|g       |j%                  d       |D ]:  }| j5                  |||	      }||j%                  |       *|j%                  |       < |j%                  d       |j%                  d       |j3                  d|g       |j%                  d       |j3                  |       |
r|
|d d |r|j3                  |       | j7                  t
        j                  j#                  |             	 | j9                  | j:                  g|z          y t        j@                  d|       y # t<        $ r}t?        |      d }~ww xY w)Nz7I don't know what to do with 'runtime_library_dirs': %sc0w32c0d32r.   r   z%s.defEXPORTSz  {}=_{}z
writing %sr+   z/L%sz/L.,z,,import32cw32mtrP   )!rQ   _fix_lib_argsr   warnstrr4   r5   joinrS   r   
EXECUTABLEr"   r!   r   r   splitsplitextr8   r1   formatexecuter
   mapr6   normcaser2   find_library_filer7   r9   r   r   r   r@   ) r#   target_descrD   rV   r=   	librarieslibrary_dirsruntime_library_dirsexport_symbolsr@   rA   rB   
build_temprU   startup_objld_argsdef_fileheadtailmodnamerJ   temp_dircontentssymobjects2	resourcesfilebaseellr   libfilerK   s                                    r(   linkzBCPPCompiler.link   s   ( !% 5 5gz J*:>:L:L|%9;
7L"6  HHI()
 ! ggll:GO??7O4 i222%"44Q7G"..q1G%"77:G"11!4G %WW]]?;
d!ww//577??71:677<<(W2DE%;)/R ACOOJ$5$5c3$?@AZ(H)=|h?VW 277++W5H #mGI  ) gg..rww/?/?/EFs&=$$T*NN4() $ ?v(8(8(==>?NN5! NN7# NNC12NN4   	, 00sEJ?NN3' NN7+	, NN:&NN8$ NNC?+NN3NN9%+~.KK89%

DKK=723
 II0/B	 & %n$%s   *O! !	O:*O55O:c                     |r|dz   }|dz   |dz   ||f}n|dz   |f}|D ]]  }|D ]V  }t         j                  j                  || j                  |            }t         j                  j	                  |      sR|c c S  _ y )N_d_bcpp)r4   r5   rc   rR   exists)	r#   dirsr   r@   dlib	try_namesdirnamer   s	            r(   rk   zBCPPCompiler.find_library_fileD  s     :DwcBIw,I 	C! #'',,sD,A,A$,GH77>>'*"N#	 r)   c                    |d}g }|D ]>  }t         j                  j                  t         j                  j                  |            \  }}|| j                  ddgz   vrt        dj                  ||            |rt         j                  j                  |      }|dk(  r3|j                  t         j                  j                  |||z                |dk(  r4|j                  t         j                  j                  ||dz                |j                  t         j                  j                  ||| j                  z                A |S )Nr.   r,   r+   z"unknown file type '{}' (from '{}'))r4   r5   rf   rj   src_extensionsr   rg   basenamer1   rc   obj_extension)r#   source_filenames	strip_dirr=   	obj_namessrc_namer~   rJ   s           r(   object_filenameszBCPPCompiler.object_filenames^  s   J	( 	VH''**277+;+;H+EFKT34..%@A&8??XN  ww''-f}  j$*!EF  j$-!HI  j$ASAS:S!TU!	V" r)   c                    | j                  d ||      \  }}}t        ||      }dg|z   }	||	j                  d|z          |r||	d d |r|	j                  |       |	j                  |       | j                  s|t        ||      rC|r.| j                  t        j                  j                  |             	 | j                  |	       y y # t        $ r}
t        |
       t        |
      d }
~
ww xY w)Nz	cpp32.exer/   r   )_fix_compile_argsr	   r1   r2   r&   r   r7   r4   r5   r8   r9   r   printr   )r#   sourceoutput_filer>   r?   rA   rB   _rE   pp_argsrK   s              r(   
preprocesszBCPPCompiler.preprocessw  s     %)$:$:4$V!FL(>-')"NN4+-.'GBQKNN>*v
 ::,fk0JBGGOOK89(

7#	 1K
 & (c
"3''(s   6C	 		C-C((C-)r   r   r   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r   r.   )NNNNN)__name__
__module____qualname____doc__compiler_typeexecutablesr:   r;   r   r   static_lib_extensionshared_lib_extensionstatic_lib_formatshared_lib_formatexe_extensionr   rN   rX   r   rk   r   r   __classcell__)r'   s   @r(   r   r   '   s     M K FM-O #_4NM!!,22)M;6 I\ NRC2 !CCR48 (r)   r   )r   r4   warningsdistutils.errorsr   r   r   r   r   distutils.ccompilerr   r	   distutils.file_utilr
   distutils.dep_utilr   	distutilsr   ra   DeprecationWarningr    r)   r(   <module>r      sS    
   B * $  4 	o(9 o(r)   