
φIXW:                 @   s   d  Z  d d l Z d d l m Z m Z m Z m Z m Z m Z d d l	 m
 Z
 m Z m Z d d l m Z d d l m Z d d l m Z Gd d	   d	 e
  Z d S)
zdistutils.bcppcompiler

Contains BorlandCCompiler, an implementation of the abstract CCompiler class
for the Borland C++ compiler.
    N)DistutilsExecErrorDistutilsPlatformErrorCompileErrorLibError	LinkErrorUnknownFileError)	CCompilergen_preprocess_optionsgen_lib_options)
write_file)newer)logc               @   s  e  Z d  Z d Z d Z i  Z d g Z d d d g Z e e Z d Z	 d Z
 d	 Z d
 Z Z d Z d d d d d  Z d d d d d d d d d  Z d d d d d  Z d d d d d d d d d d d d 
 Z d d d  Z d d d d  Z d d d d d d d  Z d S)BCPPCompilerzConcrete class that implements an interface to the Borland C/C++
    compiler, as defined by the CCompiler abstract class.
    Zbcppz.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exer   c             C   s   t  j |  | | |  d |  _ d |  _ d |  _ d  |  _ d d d d g |  _ d d d d g |  _ d	 d
 d d g |  _ d	 d
 d d g |  _	 g  |  _
 d
 d d g |  _ d
 d d d g |  _ d  S)Nz	bcc32.exezilink32.exeztlib.exez/tWMz/O2z/qz/g0z/Odz/Tpdz/Gnz/xz/r)r   __init__cclinkerlibZpreprocess_optionscompile_optionscompile_options_debugldflags_sharedldflags_shared_debugZldflags_staticldflags_exeldflags_exe_debug)selfverbosedry_runforce r   J/afs/.cs.wisc.edu/s/python-3.5.2/amd64_ubu16/lib/python3.5/bcppcompiler.pyr   5   s    					zBCPPCompiler.__init__Nc	             C   s  |  j  | | | | | |  \ } }	 } }
 } | p6 g  } | j d  | r_ | j |  j  n | j |  j  x|	 D]} y | | \ } } Wn t k
 r wv Yn Xt j j |  } t j j |  } |  j	 t j j
 |   | d k r qv | d k rTy |  j d d | | g  Wqv t k
 rP} z t |   WYd  d  } ~ Xqv Xqv | |  j k rld } n | |  j k rd } n d } d | } y4 |  j |  j g | |
 | | g | | g  Wqv t k
 r} z t |   WYd  d  } ~ Xqv Xqv W|	 S)	Nz-cz.resz.rcZbrcc32z-fo z-Pz-o)Z_setup_compileappendextendr   r   KeyErrorospathnormpathmkpathdirnamespawnr   r   _c_extensions_cpp_extensionsr   )r   Zsources
output_dirmacrosinclude_dirsdebugextra_preargsextra_postargsZdependsobjectspp_optsZbuildZcompile_optsobjsrcextmsgZ	input_optZ
output_optr   r   r   compileQ   sF    		
.#zBCPPCompiler.compilec       	      C   s   |  j  | |  \ } } |  j | d | } |  j | |  r | d g | } | rU y |  j |  j g |  Wq t k
 r } z t |   WYd  d  } ~ Xq Xn t j d |  d  S)Nr+   z/uzskipping %s (up-to-date))	_fix_object_argslibrary_filename
_need_linkr(   r   r   r   r   r.   )	r   r1   Zoutput_libnamer+   r.   target_langoutput_filenameZlib_argsr6   r   r   r   create_static_lib   s    "zBCPPCompiler.create_static_libc              C   s  |  j  | |  \ } } |  j | | |  \ } } } | rR t j d t |   | d  k	 rs t j j | |  } |  j | |  r| t	 j
 k r d } |	 r |  j d  d   } q|  j d  d   } n5 d } |	 r |  j d  d   } n |  j d  d   } | d  k rd } n t j j |  \ } } t j j |  \ } } t j j | d  } t j j | d |  } d g } x+ | pg  D] } | j d | | f  qW|  j t | | f d	 |  t t j j |  } | g } g  } x[ | D]S } t j j t j j |   \ } } | d
 k r:| j |  q| j |  qWx+ | D]# } | j d t j j |   qRW| j d  | j |  | j d | g  | j d  xL | D]D } |  j | | |	  } | d  k r| j |  q| j |  qW| j d  | j d  | j d | g  | j d  | j |  |
 r_|
 | d  d  <| rr| j |  |  j t j j |   y |  j |  j g |  Wqt k
 r} z t |   WYd  d  } ~ XqXn t j d |  d  S)Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r   r   z%s.defZEXPORTSz  %s=_%sz
writing %sz.resz/L%sz/L.,z,,Zimport32Zcw32mtzskipping %s (up-to-date)) r8   Z_fix_lib_argsr   warnstrr#   r$   joinr:   r   Z
EXECUTABLEr   r   r   r   splitsplitextr'   r    Zexecuter   mapr%   normcaser!   find_library_filer&   r(   r   r   r   r.   ) r   Ztarget_descr1   r<   r+   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr.   r/   r0   Z
build_tempr;   Zstartup_objZld_argsZdef_fileheadtailmodnamer5   Ztemp_dircontentsZsymZobjects2Z	resourcesfilebaselr   libfiler6   r   r   r   link   s|    				$!"zBCPPCompiler.linkc       	      C   s   | r- | d } | d | d | | f } n | d | f } xW | D]K } xB | D]: } t  j j | |  j |   } t  j j |  rQ | SqQ WqD Wd  Sd  S)NZ_dZ_bcpp)r#   r$   rA   r9   exists)	r   dirsr   r.   ZdlibZ	try_namesdirnamerN   r   r   r   rF   4  s    

zBCPPCompiler.find_library_filer   c             C   s  | d  k r d } g  } x | D] } t  j j t  j j |   \ } } | |  j d d g k rx t d | | f   | r t  j j |  } | d k r | j t  j j | | |   q | d k r | j t  j j | | d   q | j t  j j | | |  j	   q W| S)Nr   z.rcz.resz"unknown file type '%s' (from '%s'))
r#   r$   rC   rE   src_extensionsr   basenamer    rA   obj_extension)r   Zsource_filenamesZ	strip_dirr+   Z	obj_namesZsrc_namerL   r5   r   r   r   object_filenamesN  s"     $##zBCPPCompiler.object_filenamesc             C   s#  |  j  d  | |  \ } } } t | |  } d g | }	 | d  k	 rW |	 j d |  | rm | |	 d  d  <| r |	 j |  |	 j |  |  j s | d  k s t | |  r| r |  j t j j	 |   y |  j
 |	  Wn; t k
 r}
 z t |
  t |
   WYd  d  }
 ~
 Xn Xd  S)Nz	cpp32.exez-or   )Z_fix_compile_argsr	   r    r!   r   r   r&   r#   r$   r'   r(   r   printr   )r   sourceZoutput_filer,   r-   r/   r0   _r2   Zpp_argsr6   r   r   r   
preprocessi  s$    	$
zBCPPCompiler.preprocess)__name__
__module____qualname____doc__Zcompiler_typeZexecutablesr)   r*   rT   rV   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr   r7   r=   rO   rF   rW   r[   r   r   r   r   r      sJ   	

B|r   )r_   r#   Zdistutils.errorsr   r   r   r   r   r   Zdistutils.ccompilerr   r	   r
   Zdistutils.file_utilr   Zdistutils.dep_utilr   Z	distutilsr   r   r   r   r   r   <module>   s   
.