
    
_d9                         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       D/usr/lib/python3/dist-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.compileY   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_linkr:   r   r   r   r   rA   )	r$   rE   output_libnamer>   rA   target_langoutput_filenamelib_argsrL   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                  ||      r6|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%                  |       < |j3                  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cw32mtrQ   )!rR   _fix_lib_argsr   warningstrr5   r6   joinrT   r	   
EXECUTABLEr#   r"   r    r   splitsplitextr9   r2   formatexecuter   mapr7   normcaser3   find_library_filer8   r:   r   r   r   rA   ) r$   target_descrE   rW   r>   	librarieslibrary_dirsruntime_library_dirsexport_symbolsrA   rB   rC   
build_temprV   startup_objld_argsdef_fileheadtailmodnamerK   temp_dircontentssymobjects2	resourcesfilebaseellr   libfilerL   s                                    r)   linkzBCPPCompiler.link   s}   & !% 5 5gz J*:>:L:L|%9;
7L"6  KK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12 NNC?+NN3NN9%+~.KK89%

DKK=723
 II0/B	 & %n$%s   O 	O)O$$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)r5   r6   rd   rS   exists)	r$   dirsr   rA   dlib	try_namesdirnamer   s	            r)   rl   zBCPPCompiler.find_library_file>  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 '{}'))r5   r6   rg   rk   src_extensionsr   rh   basenamer2   rd   obj_extension)r$   source_filenames	strip_dirr>   	obj_namessrc_namer   rK   s           r)   object_filenameszBCPPCompiler.object_filenamesX  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.exer0   r   )_fix_compile_argsr
   r2   r3   r'   r   r8   r5   r6   r9   r:   r   printr   )r$   sourceoutput_filer?   r@   rB   rC   _rF   pp_argsrL   s              r)   
preprocesszBCPPCompiler.preprocessq  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   rO   rY   r   rl   r   r   __classcell__)r(   s   @r)   r   r   '   s     M K FM-O #_4NM!!,22)M;4 HZ NRC0 !@CL48 (r*   r   )r   r5   warningserrorsr   r   r   r   r   	ccompilerr	   r
   	file_utilr   dep_utilr   _logr   warnDeprecationWarningr    r*   r)   <module>r      sR    
   9 !   4 	h(9 h(r*   