Ñò
XÁĊGc           @   sR   d  d k  l  Z  d  d k Z d  d k Z d  d k l Z d e f d     YZ d S(   i˙˙˙˙(   t   SingleCodeUnitN(   t	   SmartFilet   MultipleCodeUnitc           B   sw   e  Z d  Z d   Z d   Z d   Z d   Z d   Z e e e  Z	 d   Z
 d   Z d   Z d	   Z d
   Z RS(   s   
    Represents a bunch of cpp files, where each cpp file represents a header
    to be exported by pyste. Another cpp, named <module>.cpp is created too.
    c         C   sC   | |  _  | |  _ h  |  _ g  |  _ d  |  _ t d  d   |  _ d  S(   N(   t
   modulenamet   outdirt	   codeunitst	   functionst   Nonet   _currentR    t   all(   t   selfR   R   (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   __init__   s    					c         C   s'   t  i i |  d } d t i |  S(   Ni    s	   Export_%s(   t   ost   patht   splitextt   utilst   makeid(   R
   t   interface_filet   name(    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   _FunctionName   s    c         C   sB   t  i i |  } d t  i i |  d } t  i i |  i |  S(   Ns   _%s.cppi    (   R   R   t   basenameR   t   joinR   (   R
   R   t   filename(    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt	   _FileName#   s    c         C   sÖ   | d j o d |  _ nı | d j o |  i |  _ n |  i |  } |  i |  } y |  i | } Wn` t j
 oT t d |  } d | | _ | |  i | <| |  i	 j o |  i	 i
 |  qÉ n X| |  _ d S(   s   Changes the current code unitt   __all__s	   void %s()N(   R   R   R	   R   R   R   t   KeyErrorR    t   module_definitionR   t   append(   R
   R   t   export_nameR   t   functiont   codeunit(    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt
   SetCurrent)   s    c         C   s   |  i  S(   N(   R   (   R
   (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   Current=   s    c         C   s+   |  i  d  j	 o |  i i | |  n d  S(   N(   R   R   t   currentt   Write(   R
   t   sectiont   code(    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyR"   C   s    c         C   s%   |  i  d  j	 o |  i i |  Sd  S(   N(   R   R   R!   t   Section(   R
   R#   (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyR%   H   s    c         C   s.   y t  i |  i  Wn t j
 o n Xd  S(   N(   R   t   mkdirR   t   OSError(   R
   (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   _CreateOutputDirM   s     c         C   s
  |  i    h  } x§ |  i i   D] \ } } | | j o! | g | | <| i |  i  q  | | d } x: d D]2 } | i | | i | | i | <d | i | <qo W| | i |  q  WxI | i   D]; } t } x, | D]$ } | i	 |  | p
 t
 } qÚ qÚ WqÇ Wd  S(   Ni    t   includet   declarations   declaration-outsidet    (   R)   R*   s   declaration-outside(   R(   R   t   itemst   MergeR	   R$   R   t   valuest   Falset   Savet   True(   R
   R   R   R   t	   main_unitR#   t
   file_unitsR   (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyR0   S   s*    
    c   	      C   s6  t  i i |  i d  } t | d  } | i t i d   | i d  | i t i d   g  } | D] } | |  i |  qk ~ } x | D] } | i d |  q W| i d  | i t i d   | i d	 |  i	  | i d
  d } x, | D]$ } | i |  | i d |  qŭ W| i d  d  S(   Ns	   _main.cppt   wt   Includes$   #include <boost/python/module.hpp>

t   Exportss   void %s();
s   
t   Modules   BOOST_PYTHON_MODULE(%s)
s   {
t    i   s   %s();
s   }
s       (
   R   R   R   R   R   t   writeR   t   left_equalsR   R   (	   R
   t
   interfacesR   t   foutt   _[1]t   xR   R   t   indent(    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   GenerateMainr   s&    *  (   t   __name__t
   __module__t   __doc__R   R   R   R   R    t   propertyR!   R"   R%   R(   R0   R@   (    (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyR      s   										(   R    R   R   R   t   objectR   (    (    (    s6   /usr/lib/pymodules/python2.6/Pyste/MultipleCodeUnit.pyt   <module>   s   