
bc           @   s   d  Z  d Z d d l Z d d l Z d d l Z d d l m Z m Z d d l m	 Z	 d d l
 m Z d d l m Z m Z m Z d d l m Z m Z m Z m Z d d	 l m Z e j d
 k r d d l Z n  d e f d     YZ d S(   s9  distutils.unixccompiler

Contains the UnixCCompiler class, a subclass of CCompiler that handles
the "typical" Unix-style command-line C compiler:
  * macros defined with -Dname[=value]
  * macros undefined with -Uname
  * include search directories specified with -Idir
  * libraries specified with -lllib
  * library search directories specified with -Ldir
  * compile handled by 'cc' (or similar) executable with -c option:
    compiles .c to .o
  * link static library handled by 'ar' command (possibly with 'ranlib')
  * link shared library handled by 'cc -shared'
s   $Id$iN(   t
   StringTypet   NoneType(   t	   sysconfig(   t   newer(   t	   CCompilert   gen_preprocess_optionst   gen_lib_options(   t   DistutilsExecErrort   CompileErrort   LibErrort	   LinkError(   t   logt   darwint   UnixCCompilerc           B   ss  e  Z d  Z i d' d 6d g d 6d g d 6d g d 6d d g d 6d g d 6d	 d
 g d 6d' d 6Z e j d  d k r d g e d <n  d d d d d d g Z d Z d Z	 d Z
 d Z d Z d Z Z Z e Z e j d k r d Z n  d' d' d' d' d' d  Z d   Z d' d d' d   Z d' d' d' d' d' d d' d' d' d' d! 
 Z d"   Z d#   Z d$   Z d%   Z d d&  Z RS((   t   unixt   preprocessort   cct   compilert   compiler_sot   compiler_cxxs   -sharedt	   linker_sot
   linker_exet   ars   -crt   archivert   ranlibi   R   s   .cs   .Cs   .ccs   .cxxs   .cpps   .ms   .os   .as   .sos   .dylibs   .tbds   lib%s%st   cygwins   .exec         C   s	  |  j  d  | |  \ } } } t | |  } |  j | }	 | rV |	 j d | g  n  | ri | |	 d *n  | r |	 j |  n  |	 j |  |  j s | d  k s t | |  r| r |  j t	 j
 j |   n  y |  j |	  Wqt k
 r}
 t |
  qXn  d  S(   Ns   -oi    (   t   _fix_compile_argst   NoneR   R   t   extendt   appendt   forceR   t   mkpatht   ost   patht   dirnamet   spawnR   R   (   t   selft   sourcet   output_filet   macrost   include_dirst   extra_preargst   extra_postargst   ignoret   pp_optst   pp_argst   msg(    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt
   preprocessX   s"    $c   	      C   sz   |  j  } t j d k r1 t j | | |  } n  y& |  j | | | d | g |  Wn t k
 ru } t |  n Xd  S(   NR   s   -o(   R   t   syst   platformt   _osx_supportt   compiler_fixupR#   R   R   (	   R$   t   objt   srct   extt   cc_argsR*   R,   R   R.   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   _compiles   s    		i    c         C   s   |  j  | |  \ } } |  j | d | } |  j | |  r |  j t j j |   |  j |  j | g | |  j	  |  j
 r y |  j |  j
 | g  Wq t k
 r } t |  q Xq n t j d |  d  S(   Nt
   output_dirs   skipping %s (up-to-date)(   t   _fix_object_argst   library_filenamet
   _need_linkR   R    R!   R"   R#   R   t   objectsR   R   R	   R   t   debug(   R$   R=   t   output_libnameR9   R>   t   target_langt   output_filenameR.   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   create_static_lib~   s    	c         C   sl  |  j  | |  \ } } |  j | | |  \ } } } g  | D] } | d k r= | ^ q= } g  | D] } | d k rb | ^ qb } t |  | | |  } t |  t t f k r t d  n  | d  k	 r t j	 j
 | |  } n  |  j | |  rX| |  j | d | g } |	 r d g | d *n  |
 r3|
 | d *n  | rI| j |  n  |  j t j	 j |   y | t j k r|  j } n
 |  j } | d	 k r |  j r d } t j	 j | d  d
 k rd } x! d | | k r| d } qWn  |  j | | | <n  t j d k r$t j | |  } n  |  j | |  Wqht k
 rT} t |  qhXn t j d |  d  S(   Ns   /libs   /lib64s   /usr/libs
   /usr/lib64s%   'output_dir' must be a string or Nones   -os   -gi    s   c++t   envi   t   =R   s   skipping %s (up-to-date)(   s   /libs   /lib64s   /usr/libs
   /usr/lib64(   s   /libs   /lib64s   /usr/libs
   /usr/lib64(   R:   t   _fix_lib_argsR   t   typeR    R   t	   TypeErrorR   R    R!   t   joinR<   R=   R   R   R"   R   t
   EXECUTABLER   R   R   t   basenameR0   R1   R2   R3   R#   R   R
   R   R>   (   R$   t   target_descR=   RA   R9   t	   librariest   library_dirst   runtime_library_dirst   export_symbolsR>   R)   R*   t
   build_tempR@   t   dirt   lib_optst   ld_argst   linkert   iR.   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   link   sL    	
c         C   s   d | S(   Ns   -L(    (   R$   RQ   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   library_dir_option   s    c         C   s   d | k p d | k S(   Nt   gccs   g++(    (   R$   t   compiler_name(    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   _is_gcc   s    c         C   s   t  j j t j d   } t j d  d k r6 d | St j d  d k rQ d | St j d  d	 k r |  j |  r d
 d | g Sd d | g St j d  d k s t j d  d k r d | g S|  j |  r d | Sd | Sd  S(   Nt   CCi   R   s   -Li   t   freebsds   -Wl,-rpath=i   s   hp-uxs   -Wl,+ss   +st   irix646t   osf1V5s   -rpaths   -Wl,-Rs   -R(   R    R!   RJ   R   t   get_config_varR0   R1   RZ   (   R$   RQ   R   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   runtime_library_dir_option   s    &
c         C   s   d | S(   Ns   -l(    (   R$   t   lib(    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   library_option   s    c         C   s  |  j  | d d } |  j  | d d } |  j  | d d } |  j  | d d } t j d k r t j d  } t j d |  }	 |	 d  k r d	 }
 q |	 j d
  }
 n  xj| D]b} t	 j
 j | |  } t	 j
 j | |  } t	 j
 j | |  } t	 j
 j | |  } t j d k r| j d  sI| j d  r| j d  rt	 j
 j |
 | d
 |  } t	 j
 j |
 | d
 |  } t	 j
 j |
 | d
 |  } t	 j
 j |
 | d
 |  } n  t	 j
 j |  r| St	 j
 j |  r| St	 j
 j |  r| St	 j
 j |  r | Sq Wd  S(   Nt   lib_typet   sharedt   dylibt
   xcode_stubt   staticR   t   CFLAGSs   -isysroot\s+(\S+)t   /i   s   /System/s   /usr/s   /usr/local/(   R;   R0   R1   R   R_   t   ret   searchR   t   groupR    R!   RH   t
   startswitht   exists(   R$   t   dirsRa   R>   t   shared_ft   dylib_ft   xcode_stub_ft   static_ft   cflagst   mt   sysrootRQ   Rd   Re   Rg   Rf   (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   find_library_file   s>    	N(   t   __name__t
   __module__t   compiler_typeR   t   executablesR0   R1   t   src_extensionst   obj_extensiont   static_lib_extensiont   shared_lib_extensiont   dylib_lib_extensiont   xcode_stub_lib_extensiont   static_lib_formatt   shared_lib_formatt   dylib_lib_formatt   xcode_stub_lib_formatt   exe_extensionR/   R8   RB   RV   RW   RZ   R`   Rb   Rw   (    (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyR   0   sD   





				;				(   t   __doc__t   __revision__R    R0   Rj   t   typesR    R   t	   distutilsR   t   distutils.dep_utilR   t   distutils.ccompilerR   R   R   t   distutils.errorsR   R   R	   R
   R   R1   R2   R   (    (    (    s-   /usr/lib/python2.7/distutils/unixccompiler.pyt   <module>   s   $"