
<4Ic           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z e d k ra d d g e j e _ n  d  d l Z d  d l Z d  d l	 Z	 d  d l m
 Z
 m Z d  d l Z d e	 j f d     YZ d Z d	 Z d
 g Z e j d k r g  Z n  d	 Z d	 Z i
 d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z e  j d  e  j e  j B Z e  j d!  Z e  j d"  Z e  j d# e  j  Z e  j d$ e  j  Z e  j d% e  j  Z g  e d& d'  D] \ Z  Z! d( e  e! f ^ qZ" i
 d	 d) 6d* d+ 6d, d- 6d. d/ 6d0 d1 6d2 d3 6d4 d5 6d6 d7 6d8 d9 6d: d; 6Z# d< Z$ d= Z% d> Z& d? Z' d@ Z( e$ e' e& e% g Z) dA dB dC dD g Z* e  j d j+ g  e e) e*  D] \ Z, Z- dE e, e- f ^ q e  j.  Z/ d+ Z0 d< Z1 dF Z2 d? Z3 dG   Z4 dH   Z5 i  Z6 dI dJ dK dL dM dN dO dP g Z7 xE e8 e9 e7   D]1 Z: e7 e: Z; x e; j<   D] Z= e: e6 e= <qFWq)WdQ   Z> dR   Z? dS   Z@ dT   ZA dU eB f dV     YZC dW   ZD e  j dX  ZE dY   ZF dZ   ZG d[   ZH d S(\   iNt   __main__t   .s   ..(   t   debugt   errort   PreprocErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR   
   s   t   -i    s   /usr/includet   win32t   !t   nots   &&t   andt   &t   bitands   &=t   and_eqs   ||t   ort   |t   bitors   |=t   or_eqt   ^t   xors   ^=t   xor_eqt   ~t   complsa   ^[ 	]*(#|%:)[ 	]*(ifdef|ifndef|if|else|elif|endif|include|import|define|undef|pragma)[ 	]*(.*)*$s   ^[a-zA-Z_]\w*s   ^[a-zA-Z_][a-zA-Z0-9_]*[(]s   ^\s*once\s*s   \\*
sT   (/\*[^*]*\*+([^/*][^*]*\*+)*/)|//[^\n]*|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)s	   =-/!'()<>s	   #~\|^[]{}s   ??t   0i   t   ai   t   bi	   t   ti
   t   ni   t   fi   t   vi   t   ri\   s   \i'   t   't   it   Ot   Tt   st   cs$  0[xX](?P<hex>[a-fA-F0-9]+)(?P<qual1>[uUlL]*)|L*?'(?P<char>(\\.|[^\\'])+)'|(?P<n1>\d+)[Ee](?P<exp0>[+-]*?\d+)(?P<float0>[fFlL]*)|(?P<n2>\d*\.\d+)([Ee](?P<exp1>[+-]*?\d+))?(?P<float1>[fFlL]*)|(?P<n4>\d+\.\d*)([Ee](?P<exp2>[+-]*?\d+))?(?P<float2>[fFlL]*)|(?P<oct>0*)(?P<n0>\d+)(?P<qual2>[uUlL]*)s   L?"([^"\\]|\\.)*"s   [a-zA-Z_]\w*s   %:%:|<<=|>>=|\.\.\.|<<|<%|<:|<=|>>|>=|\+\+|\+=|--|->|-=|\*=|/=|%:|%=|%>|==|&&|&=|\|\||\|=|\^=|:>|!=|##|[\(\)\{\}\[\]<>\?\|\^\*\+&=:!#;,%/\-\?\~\.]s
   (?P<%s>%s)t   uc         C   sB   |  j  d  } | d  k	 r d S|  j  d  } | d  k r> d S| S(   Ni   t    i   t    (   t   groupt   None(   t   mR$   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   repl)   s      c         C   s   t  |  d  } | j   } | j   t r] x/ t D]$ \ } } | j |  j |  } q2 Wn  t j d |  } t	 j t
 |  } g  t j t |  D]$ } | j d  | j d  f ^ q S(   NR   R(   i   i   (   t   opent   readt   closet   use_trigraphst   trig_deft   splitt   joint   re_nlt   subt   re_cppR,   t   ret   finditert   re_linesR)   (   t   filenameR   t   codeR   R   R+   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   filter_comments/   s    
 s   * / %s   + -s   << >>s	   < <= >= >s   == !=s   & | ^s   && ||t   ,c         C   s  y d |  } Wn t  k
 r- t |   } n Xy d | } Wn t  k
 r[ t |  } n X| } | d k r{ | | } n| d k r | | } n| d k r | | } n| d k r | | } n| d k r | | } n| d k r | | A} n| d k r| | B} nx| d	 k r2t | p)|  } nW| d
 k rK| | @} n>| d k rlt | oc|  } n| d k rt | | k  } n | d k rt | | k  } n | d k rt | | k  } n | d k rt | | k   } n | d k rt | | k  } nx | d k r2t | | k  } nW | d k rQt | | A } n8 | d k rj| | >} n | d k r| | ?} n d } | S(   Ni    t   %t   +R   t   *t   /R   R   s   ||R   s   &&s   ==s   !=s   <=t   <t   >s   >=s   <<s   >>(   t	   TypeErrort   int(   t   val_1t   val_2t   val_opR   R   t   dR%   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   reduce_nums>   sb                           c      
   C   s(  |  s g  g  g  f S|  d \ } } | t  k r@ | | |  d f S| t k r y5 |  d \ } } | t k r | | | |  d f SWn t k
 r n X| | |  d f S| t k r| d k rt |  d | |  \ } } } | d k r(| t k rt d	 t |    n  t t | f g | | |  S| t  k rJt d
 t |    n  | d k rc| | | f S| d k r| t |  | f S| d k r| t t |   | f S| d k r| t |  | f S| | | f S| d k r$d } d }	 xs |  D]X \ }
 } | d k r*| d 8} | d k rCPqCn | d k rC| d 7} n  |	 d 7}	 qWt d t |    t	 |  d |	 !| |  } t
 |  d k r| d \ } } | | |  |	 d f St d t |    q$nW| t k r$t
 |   d k ry|  d \ } } | d k ry|  d \ } } | t k rQ| t  k rQ| t k rQt d t |    n  t | | | f g |  d | |  Sn  | j   d k rJ|  d \ } } d } | d k r|  d \ } } | t k rt d  n  |  d \ } } | d k rt d  n  d } n | t k rt d  n  d } | | k r9d } n  t  | |  | f S| | k sb| | k rd | k r| | |  d f St  d |  d f Sn  t | |  t j k rt | |  \ } } | | | <n  | | } | d s| d |  d }  t |  | |  Sg  } d }	 |  |	 \ } } | t k s9| d k rIt d |  n  g  } d } y/x(|	 d 7}	 |  |	 \ } } | t k r;| d k r;| d k r| j | | f  | d 7} q| d k r| r| j |  n  |  |	 d }  Pq| d k r%| st d |  n  | j |  g  } q| j | | f  q[| j | | f  | d k rg| d 7} q[| d k r[| d 8} q[q[Wn t k
 r}   n Xg  } | d } xV| d D]J\ } } | t k r| | k r| | | | 7} q| d k rg  } t
 | d  } t
 |  } x: | | | d D]& } | j |  | j t d f  q2W| ro| j   n  t
 |  d k r| d \ } } | d \ } } | d k r| j   | d k r| | k  r| j   qqn  | | 7} q| j | | f  qWt | |  | | | g  Sn  d  S(   Ni    i   i   R?   R   R	   R   t   #s   ident expected %ss   num expected %st   (t   )s   rparen expected %ss   cannot reduce %ss   ##s   %s: ident expected after '##'i   t   defineds)   expected an identifier after a "defined("s"   expected a ")" after a "defined(x"i   s/   expected a "(" or an identifier after a definedt   waf_includes   invalid function call '%s'R=   s   empty param in funcall %st   __VA_ARGS__ii(   R?   R   R	   R   RK   (   t   NUMt   STRt
   IndexErrort   OPt   get_exprt   IDENTR   t   strRE   t   process_tokenst   lent   lowert   typet   typest
   StringTypet   extract_macrot   appendt   extendt   pop(   t   lstt   defst   bant   pR   t   p2t   v2t   lst2t	   count_parR!   t   _t   rett   p3t   v3t   offt   xt   kt	   macro_deft   paramst	   one_paramt   count_parent   et   accut   tablet   va_tokst   stt   ptt   p4t   v4(    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyRU   Y   s            
  $(  	 	 

 
  	  
  
c         C   s  g  } x|  rt  |  | |  \ } } } | t k rV| sI | | f g S| d \ } } | t k r{ t d t |    n  | d k rKd }	 d }
 x | D]d \ } } | d k r |
 d 8}
 n5 | d k r |
 d 7}
 n | d k r |
 d k r Pn  |	 d 7}	 q Wt d t |    t | d d	  r7| d |	 !}  q	 | |	 d }  q	 n | d
 k rg| d }  q	 n  t  | d | |  \ } } } | t k rt d t |    n  | r1| d \ } } t | t | k  r1t  | d | |  \ } } } t | | |  } | | f | | f t | f g | }  q	 q1n  t t | | |  f g | }  q	 n5 | t k r| r~t d t |   n  | | f g Sd  d  g  f SWd  S(   Ni    s   op expected %st   ?RM   i   RL   t   :s   ending ':' expected %sR?   R=   s   num expected after op %ss(   sequence must terminate with a string %s(	   RU   RQ   RT   R   RW   RJ   t   precRR   R*   (   Rb   Rc   Rd   Rv   Re   R   t   nlstt   op1t   ov1R!   Ri   Rj   Rp   Rf   Rg   t   op3t   ov3R{   R|   t   nlst2t   v5(    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyRX      sZ    	     
 %	 c         C   sN   t  |  | g   } | s. t d t |    n  | d \ } } t |  d k S(   Ns   missing tokens to evaluate %si    (   RX   R   RW   RE   (   Rb   t   adefsRk   Re   R   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt
   eval_macro   s
     t   c_parserc           B   s;   e  Z d d d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   g  |  _  | d  k r! i  |  _ n t |  |  _ g  |  _ d  |  _ d |  _ g  |  _ g  |  _ g  |  _	 | po g  |  _
 g  |  _ g  |  _ d |  _ g  |  _ y t j j |  _ Wn, t k
 r i  t j _ t j j |  _ n Xd  S(   Ni    R(   (   t   linesR*   Rc   t   dictt   statet   envt   count_filest   depst
   deps_pathst   currentnode_stackt	   nodepathst   nodest   namest   curfilet   ban_includest   Buildt   bldt   parse_cachet   AttributeError(   t   selfR   t   defines(    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   __init__  s(    											c         C   s   | |  _  |  j d j |  } x* |  j D] } | r9 Pn  | j |  } q) W| sx | |  j k rt |  j j |  n  d  S|  j j |  | d d k r |  j |  n  d  S(   Niis   .moc(   R   R   t   find_resourceR   R   R_   R   t   addlines(   R   R:   t   foundR   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   tryfind  s    	c         C   s8  |  j  j | j  | j |  j  } |  j d 7_ |  j d k rO t d  n  |  j } t d |  y | | } Wn t	 k
 r n X| |  j
 |  _
 d  Sy= t |  } | j t d f  | | | <| |  j
 |  _
 WnX t k
 r t d |  n; t k
 r3t j d k r4t d |  t j   q4n Xd  S(	   Ni   i0u  s%   recursion limit exceeded, bailing outs   preproc: reading file %rR(   s   could not read the file %si    s   parsing %s failed(   R   R_   t   parentt   abspathR   R   R   R   R   t   KeyErrorR   R<   t   POPFILEt   IOErrort	   Exceptiont   Logst   verboseR   t	   tracebackt	   print_exc(   R   t   nodet   filepatht   pct   lnsR   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR   )  s0     	
c         C   s!  t  d | j | j j f  | |  _ | j |  } |  j |  | d r| g  | d D] } d | f ^ qW |  j |  _ n  x |  j r|  j j d  \ } } | t k r |  j	 j   q n  y |  j
 | |  Wq t k
 r} t j rt d t |  | f  t j   qq Xq Wd  S(   Ns   preproc: scanning %s (in %s)t   DEFLINESt   definei    s   line parsing failed (%s): %s(   R   t   nameR   R   t   variantR   R   Ra   R   R   t   process_lineR   R   R   R   RW   R   R   (   R   R   R   R   Ro   R[   t   linet   ex(    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   startB  s"    	
0	c   
      C   s  t  j } | r, t d | | |  j f  n  |  j } | d k rQ | j t  n | d k rj | j   n  | d k r t |  j k s t |  j k r d  Sn  | d k r t	 t
 |  |  j  } | r t | d <qt | d <n| d k r2t j |  } | r%| j d	  |  j k r%t | d <qt | d <n| d k rt j |  } | rx| j d	  |  j k rxt | d <qt | d <ns| d
 k s| d k rLt | |  j  \ } } | |  j k rd  S| d k r|  j j |  n  | rt d | | f  n  | d k st r| |  j k r9|  j j |  n  |  j |  qn| d k r| d t k rut | d <q| d t k rt	 t
 |  |  j  rt | d <qqnH| d k r| d t k rt | d <q| d t k rt | d <qn | d k rft j |  } | rV| j d	  }	 | rFt d |	 | f  n  | |  j |	 <qt d |  n | d k rt j |  } | r| j d	  |  j k r|  j j | j d	   qn: | d k rt j | j    r|  j j |  j  qn  d  S(   Ns$   preproc: line is %s - %s state is %st   ifdeft   ifndeft   ift   endift   elset   elifii    t   includet   imports"   preproc: include found %s    (%s) t   "R   s   preproc: define %s   %ss   invalid define line %st   undeft   pragma(   R   R   s   if(   s   elses   elifR   (   R   R   R   R   R_   t	   undefinedRa   t   skippedt   ignoredR   t   tokenizeRc   t   acceptedt   re_mact   searchR)   t   extract_includeR   t   strict_quotesR   R   R   t   __delitem__t   re_pragma_onceRZ   R   (
   R   t   tokenR   t   veR   Rk   R+   R[   t   incR   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR   T  s    	 	         N(   R   R   R*   R   R   R   R   R   (    (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR     s
   			c   	      C   s  t  |   } t j |   r| d \ } } | d \ } } | t k rS t d  n  d } d } i  } d } xU| d 7} | | \ } } | d k r | t k r | | | <| d 7} | } q| t k r | d k r Pqt d  qn | t k r:| t k r| d k r| } q| t k r.| d k r.Pqt d  qn | d k r| t k ro| | | <| d 7} | } q| t k r| d	 k rt d
  qt d  qn | d	 k rt d
  qn t d  qn | | | | d g f S| d \ } } | g  | d g f Sd  S(   Ni    i   s   expected open parenthesisRL   RM   s   unexpected tokenR=   s   comma or ... expecteds   ...s   not implementeds   unexpected else(   R   t   re_funR   RT   R   RV   (	   t   txtR   Re   R   R   R!   t   pindexRr   t   prev(    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR^     sR     


		

	s   ^\s*(<(?P<a>.*)>|"(?P<b>.*)")c         C   s   t  j |   } | r\ | j d  r7 d | j d  f S| j d  r\ d | j d  f Sn  t |   } t | | d g  } | d \ } } | t k r t d |   n  d | f S(   NR   RB   R   R   RO   i    s   could not parse include %s(   t
   re_includeR   R)   R   RX   RR   R   (   R   Rc   R+   t   tokensRe   R   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR     s       c      	   C   sG  |  s t  d  n  |  d d k r, t |   S|  d } | d k r t |   d k rx |  d t j k rx t |  d d	  St |  d d	  S| j   r| d
 k r t |   d k r d Sx d D]Q } t |   | k r |  d d | !j   r d | t |  d d | !d  f Sq Wn- y t | SWn t k
 rBt  d |   n Xd  S(   Ns   attempted to parse a null chari    s   \i   Ro   i   i   i   i   R   i   s!   could not parse char literal '%s'(   i   i   i   (	   R   t   ordRY   t   stringt	   hexdigitsRE   t   isdigitt   chr_escR   (   R   R%   R!   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt
   parse_char  s&     

%  ))  c         C   s  g  } xt  j |   D]} | j } xt D]} | |  } | r, | t k r y t | } t } Wqt k
 r | j   d k r d } t	 } q | j   d k r d } t	 } q qXn | t	 k rb| d  r t
 | d  } q| d  rt
 | d  d  } q| d	  r&| d	  } q| d
  } | rGt |  } q| d  p\| d  } n9 | t k r| d k rd } q| d k rd } qn  | j | | f  Pq, q, Wq W| S(   Nt   truei   t   falsei    t   octi   t   hexi   t   n0t   chart   n2t   n4s   %:RK   s   %:%:s   ##(   t	   re_clexerR8   R)   t	   tok_typesRV   t	   g_optransRT   R   RZ   RQ   RE   R   R_   (   R$   Rk   t   matchR+   R   R   (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyR     sH    	 
 
	     	 (I   R7   t   syst   osR   R\   R   t   pathR   R   t   UtilsR   R   R   t   WafErrorR   R   t   go_absolutet   standard_includest   platformR0   R   R   t   compilet
   IGNORECASEt	   MULTILINER9   R   R   R   R4   R6   t   zipR   R   R1   R   RQ   RT   RV   RR   t   CHARR   t	   exp_typesR3   R   t   partt   MR   R   R   R   R   R,   R<   R   t   opst   rangeRY   Ro   t   symsR2   R&   RJ   RU   RX   R   t   objectR   R^   R   R   R   R   (    (    (    su   /home/javi/src/hotssh/hotssh/hotssh-0.2.6+dfsg1/.waf-1.5.1-3009bf2a0164643771f76f0e24c46d7e/wafadmin/Tools/preproc.pyt   <module>   sh   <$		L2LJ			
			'		.	
	