
ߑRMc           @   sN  d  Z  d d k Z d d k Z d d k Z d d k l Z d d k l Z e i i	 d  Z e i i
 d e  d d k l Z d e f d     YZ d	 e f d
     YZ d e f d     YZ e i d j oM d d k l Z l Z d d k a t i   d d j o
 e Z q+e Z ne i d j o` d d k l Z l Z d d k a t i   d j p t  e i d j o
 e Z q+e Z n d e i j oM d d k l  Z  l! Z! d d k a t i   d d j o
 e  Z q+e! Z nA e i" d j o d d k# l$ Z$ e$ Z n d d k% l& Z& e& Z e   a a' d   Z( d   Z) d S(   sR    Platform object that allows you to compile/execute C sources for given
platform.
iN(   t   udir(   t   ansi_logt   platform(   t   run_subprocesst   CompilationErrorc           B   s    e  Z d    Z d   Z e Z RS(   c         C   s.   | i  d d  |  _ | i  d d  |  _ d  S(   Ns   
s   
(   t   replacet   outt   err(   t   selfR   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   __init__   s    c         C   s@   |  i  o d t i i |  i   Sn d t i i |  i  Sd  S(   Ns   <CompilationError err=%s>s   <CompilationError out=%s>(   R   t   pyt   iot   safereprR   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   __repr__   s    
(   t   __name__t
   __module__R	   R   t   __str__(    (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR      s   		t   ExecutionResultc           B   s   e  Z d    Z d   Z RS(   c         C   s7   | |  _  | i d d  |  _ | i d d  |  _ d  S(   Ns   
s   
(   t
   returncodeR   R   R   (   R   R   R   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR	      s    	c         C   s   d |  i  f S(   Ns   <ExecutionResult retcode=%d>(   R   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR   "   s    (   R   R   R	   R   (    (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR      s   	t   Platformc           B   s  e  Z d  Z d Z d Z d Z d   Z d e d  Z	 e d  Z
 d d d d  Z d d e d  Z d   Z d   Z d	   Z d
   Z d   Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z RS(   s   abstract platformt    c         C   s-   |  i  t j o t d   n | |  _ d  S(   Ns2   You should not instantiate Platform class directly(   t	   __class__R   t	   TypeErrort   cc(   R   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR	   -   s    c         C   s+   |  i  | | |  } |  i | | | |  S(   N(   t   _compile_o_filest   _finish_linking(   R   t   cfilest   ecit   outputfilenamet
   standalonet   ofiles(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   compile2   s    c   
   
   C   s   g  } | D] } | t  i i |  q ~ } | g  } | i D] } | t  i i |  q> ~ 7} |  i | |  } g  } x- | D]% }	 | i |  i |  i |	 |   q W| S(   N(   R
   t   patht   localt   separate_module_filest   _compile_args_from_ecit   appendt   _compile_c_fileR   (
   R   R   R   R   t   _[1]t   ft   _[2]t   compile_argsR   t   cfile(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR   6   s    -4 #c   
      C   s   | d  j o t i i   } n | i   } t i d j o2 d | j o% d t i j o t i d | d <n t i d j oH | d  j	 o; d i g  } | i D] } | t |  q ~  | d <n t t |  | |  \ } } }	 t	 | | |	  S(   Nt   ntt
   SystemRoott   posixt   :t   LD_LIBRARY_PATH(
   t   Nonet   ost   environt   copyt   namet   joint   library_dirst   strt   _run_subprocessR   (
   R   t
   executablet   argst   envt   compilation_infoR&   t   iR   t   stdoutt   stderr(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   execute?   s    5c         C   s   t  d   d  S(   Ns   Pure abstract baseclass(   t   NotImplementedError(   R   R   R   t   exe_nameR    t   shared(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   gen_makefileT   s    c         C   s   d |  i  i |  i f S(   Ns
   <%s cc=%s>(   R   R   R   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR   X   s    c         C   s   t  |  i i  S(   N(   t   hashR   R   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   __hash__[   s    c         C   s   |  | j S(   N(    (   R   t   other(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   __ne__^   s    c         C   s#   |  i  | i  j o |  i | i j S(   N(   R   t   __dict__(   R   RG   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   __eq__a   s    c         C   s]   |  i  i d |  i g } x4 |  i D]) } | i d | t i i |  f  q# Wd i |  S(   Ns   cc=%rs   %s=%rt    (	   R   R   R   t   relevant_environR$   R1   R2   t   getR5   (   R   t   bitst   varname(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   keye   s
    
 'c   	      C   s}   t  i | d d i |   | i   } | d } | d | } t | | |  i |  \ } } } |  i | | | |  d  S(   NRK   i    i   (   t   logR@   R5   t   splitR8   t	   c_environt   _handle_error(	   R   R   R:   t   outnamet   cwdt   cclistR   R>   R?   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   _execute_c_compilerm   s    
c         C   s   | d j o_ | i  d d  } | i | d  | i   } x | D] } t i |  qB Wt | |   n% x! | i   D] } t i |  qy Wd  S(   Ni    t   extt   errorst   wb(   t   newt   writet
   splitlinesRQ   t   ErrorR   t   WARNING(   R   R   R?   R>   RU   t	   errorfilet   stderrlinest   line(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyRT   x   s      c         C   sE   d } x8 t  i d | | f  } | d 7} | i   p Pq	 q	 | S(   sP   Creates a temporary file with the specified prefix,
        and returns its namei    s   %s%ii   (   R    R5   t   check(   R   t   prefixt   numt   response_file(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   _make_response_file   s    
c         C   s   | S(   N(    (   R   t   include_dirs(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   _preprocess_include_dirs   s    c         C   sl   |  i  | i  } |  i |  } | o |  i } n
 |  i } t |  i  t |  } | t | i  | S(   N(   Rj   Ri   t   _includedirst   standalone_onlyt   shared_onlyt   listt   cflagst   compile_extra(   R   R   R   Ri   R:   t   extraRo   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR#      s    	c         C   s   | S(   N(    (   R   R6   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   _preprocess_library_dirs   s    c         C   s~   |  i  | i  } |  i |  } |  i | i  } |  i | i  } |  i |  } | t |  i	  | | t | i
  | S(   N(   Rr   R6   t   _libdirst   _libst	   librariest
   _linkfilest
   link_filest   _exportsymbols_link_flagsRn   t
   link_flagst
   link_extra(   R   R   R   R6   Ru   Rw   t   export_flags(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   _link_args_from_eci   s    c         C   s   | i  o t d   n g  S(   Ns-   This platform does not support export symbols(   t   export_symbolst
   ValueError(   R   R   t   relto(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyRx      s    
c   	      C   s   | d  j o | d i } n | o | d i   } n t i d  } | i | d t } | o# |  i o | d |  i 7} q n | d |  i 7} | i o
 d } n
 |  i	 } |  i
 | |  } |  i | | | | |  S(   Ni    t   module_cachet   abst   .s   g++(   R0   t   purebasenamet   dirpathR    R5   t   Truet   exe_extt   so_extt   use_cpp_linkerR   R|   t   _link(	   R   R   R   R   R   t   dirnameRB   t   cc_linkt   largs(    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR      s    


	c         C   s   t  d   d  S(   Ns   Needs to be overwritten(   RA   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   include_dirs_for_libffi   s    c         C   s   t  d   d  S(   Ns   Needs to be overwritten(   RA   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   library_dirs_for_libffi   s    c         C   s   t  S(   N(   R   (   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   check___thread   s    N(    (   R   (   R   R   R4   R0   RS   RL   t   so_prefixesR	   R   R   R   R@   t   FalseRD   R   RF   RH   RJ   RP   RX   RT   Rh   Rj   R#   Rr   R|   Rx   R   R   R   R   (    (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyR   %   s6   											
						t   linux2(   t   Linuxt   Linux64i    t   32bitt   darwin(   t   Darwin_i386t   Darwin_x86_64t   i386t   x86_64it   freebsd(   t   Freebsdt
   Freebsd_64R+   (   t   Windows(   t   DistutilsPlatformc         C   s   |  d j o t  |  Sng |  d j o d d k l } | |  Sn< |  d j o d d k l } |   Sn t d |  f   d  S(   Nt   hostt   maemoi(   t   Maemot	   distutils(   R   s   platform = %s(   t   host_factoryt   pypy.translator.platform.maemoR   t+   pypy.translator.platform.distutils_platformR   R~   (   t   new_platformR   R   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   pick_platform   s    c         C   sA   t  i d |  | f  t |  |  a |  d j o
 t a n d  S(   Ns   Setting platform to %r cc=%sR   (   RQ   t   msgR   R   R   (   R   R   (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pyt   set_platform   s    (   R   R   (*   t   __doc__t   sysR
   R1   t   pypy.tool.udirR    t   pypy.tool.ansi_printR   RQ   t   Producert   setconsumert   pypy.tool.runsubprocessR   R8   t	   ExceptionR   t   objectR   R   R   t   pypy.translator.platform.linuxR   R   t   architectureR   t   pypy.translator.platform.darwinR   R   t   machinet   AssertionErrort   maxintt    pypy.translator.platform.freebsdR   R   R4   t    pypy.translator.platform.windowsR   R   R   R   R   R   (    (    (    s5   /64/home/arigo/u/pypy/translator/platform/__init__.pys   <module>   sH   $	






	
