³ò
ß‘RMc           @   sÈ   d  Z  d d k l Z l Z l Z d d k l Z d d k Z d d k Z d d k	 Z	 d e f d „  ƒ  YZ
 d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   s'    Base class for all posixish platforms
iÿÿÿÿ(   t   Platformt   logt   _run_subprocess(   t   autopathNt	   BasePosixc           B   s˜   e  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 d e d „ Z g  d „ Z RS(   t    t   maket   CPATHt   LIBRARY_PATHt   C_INCLUDE_PATHc         C   sK   | d  j o1 y t i d } Wq> t j
 o d } q> Xn | |  _ d  S(   Nt   CCt   gcc(   t   Nonet   ost   environt   KeyErrort   cc(   t   selfR   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   __init__   s    c         C   s&   g  } | D] } | d | f q ~ S(   Ns   -l%s(    (   R   t	   librariest   _[1]t   lib(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _libs   s    c         C   s&   g  } | D] } | d | f q ~ S(   Ns   -L%s(    (   R   t   library_dirsR   t   ldir(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _libdirs   s    c         C   s&   g  } | D] } | d | f q ~ S(   Ns   -I%s(    (   R   t   include_dirsR   t   idir(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _includedirs   s    c         C   s
   t  | ƒ S(   N(   t   list(   R   t
   link_files(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt
   _linkfiles    s    c         C   sa   | i  d d ƒ } d g | t | ƒ d t | ƒ g } |  i | | | d t | i ƒ  ƒ ƒ| S(   Nt   extt   os   -cs   -ot   cwd(   t   newt   strt   _execute_c_compilert   dirpath(   R   R   t   cfilet   compile_argst   onamet   args(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _compile_c_file#   s
    &c         C   s   t  i |  | | ƒ S(   N(   R    t   _link_args_from_eci(   R   t   ecit
   standalone(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR,   *   s    c         C   s¤   | i  p g  Sn |  i d ƒ } | i d ƒ } | i d ƒ x% | i  D] } | i d | f ƒ qG W| i d ƒ | i ƒ  | o | i | ƒ } n d | f g S(   Ns   dynamic-symbols-t   ws   {
s   %s;
s   };s(   -Wl,--export-dynamic,--version-script=%s(   t   export_symbolst   _make_response_filet   opent   writet   closet   bestrelpath(   R   R-   t   reltot   response_filet   ft   sym(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _exportsymbols_link_flags-   s    

 
c   	   	   C   s„   g  } | D] } | t  | ƒ q ~ | } | d t  | ƒ g 7} | p |  i | ƒ } n |  i | | | d t  | i ƒ  ƒ ƒ| S(   Ns   -oR"   (   R$   t   _args_for_sharedR%   R&   (	   R   R   t   ofilest	   link_argsR.   t   exe_nameR   t   ofileR*   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _link=   s    +c   	      C   sv   y" t  d | | g ƒ \ } } } Wn t j
 o d } n X| o | Sn g  } | i ƒ  D] } | | d q^ ~ S(   Ns
   pkg-configi   i   (   R   t   OSErrort   split(	   R   R   t   optt   defaultt   rett   outt   errR   t   entry(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   _pkg_configF   s    "c            sà  g  } | D] } | t  i i | ƒ q ~ } | g  } | i D] } | t  i i | ƒ q> ~ 7} | d  j o | d i ƒ  } n t  i i t i ƒ ‰  | d  j o | d i d |  i	 ƒ } n | i d |  i	 ƒ } t
 |  i ƒ }	 | o |  i |	 ƒ }	 n |	 |  i | d | ƒ7}	 | o5 | i d d ƒ i }
 d | i d |  i ƒ i } n
 | i } | o |  i |  i } n |  i |  i } t | ƒ } | | _ | | _ ‡  f d †  } g  } | D] } | | i | ƒ qÀ~ } g  } | D] } | | d  d qê~ } | | _ g  } |  i | i ƒ D] } | | | ƒ q(~ } | i d	 ƒ d
 t i f d | f d | i f d | f d | f d |  i | i ƒ f d |  i | i ƒ f d |  i | ƒ f d | f d t
 | i  ƒ f d |	 f d t
 | i! ƒ f d |  i" f d | i# o d p d f d | i$ f g } x | D] } | i% | Œ  q5Wd d g  f d* d+ g } x | D] } | i& | Œ  qkW| oS | i% d# |
 ƒ f | i% d$ d% ƒ | i& d& d d' ƒ | i& d d d( g d) ƒ n | S(,   Ni    R    R6   R   R   c            sA   t  i i |  ƒ i ˆ  ƒ } | o t i i d | ƒ Sn |  Sd  S(   Ns
   $(PYPYDIR)(   t   pyt   patht   localR6   R   t   join(   t   fpatht   rel(   t   pypypath(    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   pypyrelt   s    iþÿÿÿs   .os    automatically generated makefilet   PYPYDIRt   TARGETt   DEFAULT_TARGETt   SOURCESt   OBJECTSt   LIBSt   LIBDIRSt   INCLUDEDIRSt   CFLAGSt   CFLAGSEXTRAt   LDFLAGSt   LDFLAGSEXTRAR
   t   CC_LINKs   g++s   $(CC)t	   LINKFILESt   alls   $(DEFAULT_TARGET)s	   $(TARGET)s
   $(OBJECTS)sV   $(CC_LINK) $(LDFLAGS) $(LDFLAGSEXTRA) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES)s   %.os   %.cs9   $(CC) $(CFLAGS) $(CFLAGSEXTRA) -o $@ -c $< $(INCLUDEDIRS)t   SHARED_IMPORT_LIBt   PYPY_MAIN_FUNCTIONt   pypy_main_startups   main.csƒ   echo "int $(PYPY_MAIN_FUNCTION)(int, char*[]); int main(int argc, char* argv[]) { return $(PYPY_MAIN_FUNCTION)(argc, argv); }" > $@s   main.os2   $(CC_LINK) main.o -L. -l$(SHARED_IMPORT_LIB) -o $@(   s	   $(TARGET)s
   $(OBJECTS)sV   $(CC_LINK) $(LDFLAGS) $(LDFLAGSEXTRA) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES)(   s   %.os   %.cs9   $(CC) $(CFLAGS) $(CFLAGSEXTRA) -o $@ -c $< $(INCLUDEDIRS)('   RJ   RK   RL   t   separate_module_filesR   R&   R   t   pypydirR#   t   exe_extR   t
   link_flagsR;   R:   t   basenamet   so_extt   cflagst   shared_onlyt   standalone_onlyt   GnuMakefileR>   R-   t   pathrelt   cfilest   _preprocess_include_dirsR   t   commentR   R   R   R   R   t   compile_extrat
   link_extraR   t   use_cpp_linkerR   t
   definitiont   rule(   R   Ro   R-   R>   RK   t   sharedR   R8   t   _[2]t	   linkflagst   libnamet   target_nameRj   t   mRQ   t   _[3]R'   t
   rel_cfilest   _[4]t	   rel_cfilet
   rel_ofilest   _[5]t   incldirt   rel_includedirst   definitionsR*   t   rulesRv   (    (   RP   s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   gen_makefileP   sz    -4 			*)	,					 	 c         C   s‘   t  | t ƒ o | i } n | } t i d d i | ƒ | f ƒ t |  i d t | ƒ g | ƒ \ } } } |  i	 | | | | i d ƒ ƒ d  S(   Ns   make %s in %st    s   -CR   (
   t
   isinstanceRm   t   makefile_dirR   t   executeRM   R   t   make_cmdR$   t   _handle_error(   R   t   path_to_makefilet
   extra_optsRK   t
   returncodet   stdoutt   stderr(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt   execute_makefile­   s     ((   R   R   R	   N(   t   __name__t
   __module__Rf   RŒ   t   relevant_environR   R   R   R   R   R   R+   R,   R:   R@   RI   t   FalseR‡   R“   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR   	   s    									
\t
   Definitionc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   namet   value(   R   R™   Rš   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR   ¸   s    	c            s~   ‡  f d †  } |  i  |  i } } t | t ƒ o' ˆ  i d | | i d d ƒ f ƒ n | d | f | ƒ ˆ  i d ƒ d  S(   Nc            sŒ   | p d g } xu t  | ƒ D]g \ } } | i d d ƒ } ˆ  |  I| I| t | ƒ d j  o ˆ  d IJn ˆ  Jd t |  ƒ }  q Wd  S(   NR   s   \s   \\i   Rˆ   (   t	   enumeratet   replacet   len(   t   prefixt   lstt   it   fn(   R8   (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyt
   write_list½   s     s   %s = %s
s   \s   \\s   %s =s   
(   R™   Rš   R‰   R$   R3   Rœ   (   R   R8   R¢   R™   Rš   (    (   R8   s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR3   ¼   s    
'(   R”   R•   R   R3   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR˜   ·   s   	t   Rulec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   targett   depst   body(   R   R¤   R¥   R¦   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR   Ï   s    		c         C   s¸   |  i  |  i |  i } } } t | t ƒ o
 | } n d i | ƒ } | i d | | f ƒ t | t ƒ o | i d | ƒ n& | o | i d d i | ƒ ƒ n | i d ƒ d  S(   NRˆ   s   %s: %s
s   	%s
s   
	s   
(   R¤   R¥   R¦   R‰   R$   RM   R3   (   R   R8   R¤   R¥   R¦   t   dep_s(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR3   Ô   s    
(   R”   R•   R   R3   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR£   Î   s   	t   Commentc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R¦   (   R   R¦   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR   â   s    c         C   s   | i  d |  i f ƒ d  S(   Ns   # %s
(   R3   R¦   (   R   R8   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR3   å   s    (   R”   R•   R   R3   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR¨   á   s   	Rm   c           B   sD   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   c         C   s+   h  |  _  g  |  _ t i i | ƒ |  _ d  S(   N(   t   defst   linesRJ   RK   RL   RŠ   (   R   RK   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR   é   s    		c         C   s   | i  ƒ  |  i j o | i Sn] | i  ƒ  i  ƒ  |  i i  ƒ  j o0 d | i |  i i  ƒ  ƒ } | i d d ƒ Sn t | ƒ Sd  S(   Ns   ../s   \t   /(   R&   RŠ   Rh   R6   Rœ   R$   (   R   RN   RK   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyRn   î   s    "c         C   sa   |  i  } t | | ƒ } | | j o | |  i | | <n$ t |  i ƒ | | <|  i i | ƒ d  S(   N(   R©   R˜   Rª   R   t   append(   R   R™   Rš   R©   t   defn(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyRu   ÷   s    	c         C   s    |  i  i t | | | ƒ ƒ d  S(   N(   Rª   R¬   R£   (   R   R¤   R¥   R¦   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyRv      s    c         C   s   |  i  i t | ƒ ƒ d  S(   N(   Rª   R¬   R¨   (   R   R¦   (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyRq     s    c         C   s|   | d  j o |  i i d ƒ i d ƒ } n | } x |  i D] } | i | ƒ q< W| i ƒ  | d  j o | i ƒ  n d  S(   Nt   MakefileR/   (   R   RŠ   RM   R2   Rª   R3   t   flushR4   (   R   RF   R8   t   line(    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyR3     s    
 
N(	   R”   R•   R   R   Rn   Ru   Rv   Rq   R3   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pyRm   è   s   						(   t   __doc__t   pypy.translator.platformR    R   R   t	   pypy.toolR   RJ   R   t   sysR   t   objectR˜   R£   R¨   Rm   (    (    (    s2   /64/home/arigo/u/pypy/translator/platform/posix.pys   <module>   s   $®
