ó
¦V]c           @   s   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 d  d l Z d  d l Z d  d l j j Z d  d l m Z e  j j e  j j e ƒ ƒ Z e  j j e d ƒ Z e  j j e d ƒ Z e e ƒ # Z e d „  e  e ƒ Dƒ ƒ Z! Wd QXd a# d „  Z$ d e j% f d	 „  ƒ  YZ& d
 e& f d „  ƒ  YZ' d e' f d „  ƒ  YZ( e) d k rœe j* ƒ  n  d S(   iÿÿÿÿN(   t	   ccompiler(   t   Cygdbt   codefiles   cfuncs.cc         c   s+   |  ]! \ } } | j  ƒ  | d  f Vq d S(   i   N(   t   strip(   t   .0t   it   line(    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pys	   <genexpr>   s    c       
   C   s¯  t  d  k	 r t  St a  y% t j d d d g d t j ƒ}  Wn t k
 rT d  } n7 X|  j ƒ  \ } } d } t j	 | | j
 d d ƒ ƒ } | r•t t t | j ƒ  ƒ ƒ } | d d	 g k r•t a  t j d
 d ƒ · } | j d ƒ | j ƒ  t j d d d | j g d t j ƒ}  |  j ƒ  \ } } yF t t t | j
 d d ƒ j ƒ  ƒ ƒ } | d	 d g k  rnt a  n  Wn t k
 rˆt a  n XWd  QXq•n  t  s«t j d ƒ n  t  S(   Nt   gdbs   -nxs	   --versiont   stdouts   GNU gdb [^\d]*(\d+)\.(\d+)t   asciit   ignorei   i   t   modes   w+s8   python import sys; print("%s %s" % sys.version_info[:2])s   -batchs   -xi   s6   Skipping gdb tests, need gdb >= 7.2 with Python >= 2.6(   t   have_gdbt   Nonet   Falset
   subprocesst   Popent   PIPEt   OSErrort   communicatet   ret   matcht   decodet   listt   mapt   intt   groupst   Truet   tempfilet   NamedTemporaryFilet   writet   flusht   namet   splitt
   ValueErrort   warningst   warn(   t   pt   gdb_versionR   t   _t   regext   gdb_version_numbert   python_version_scriptt   internal_python_version(    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyt   test_gdb   s<    %

't   DebuggerTestCasec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s5  t  ƒ  s d St j ƒ  |  _ t j j |  j d ƒ |  _ t j j |  j d d ƒ |  _ t j j |  j d ƒ |  _	 t j
 ƒ  |  _ y•t j |  j ƒ t j t |  j ƒ t j t |  j	 d ƒ t j t j d d ƒ |  j	 d ƒ t j ƒ  } | j d g d	 t d
 d g ƒt d |  j d d ƒ } t j ƒ  } t j d |  j d t d t j t ƒ |  } t t j d ƒ } t j  } | t _  | j! ƒ  zi | j" d |  j d d d t d i t d 6|  j d 6|  | j$ d d d |  j d i d g d 6|  Wd | j% ƒ  | t _  | j& ƒ  XWn t j |  j ƒ ‚  n Xd S(   s   
        Run gdb and have cygdb import the debug information from the code
        defined in TestParseTreeTransforms's setUp method
        Ns   codefile.pyxt   cython_debugt   cython_debug_info_codefilet   cfuncss   .cs   .hs   cfuncs.ct   debugt   extra_postargss   -fPICt   test_directoryt   moduleR   t   workdirt   cleanup_workdirt   tagst   wt	   targetdirt   incdirt   annotatet   extra_compile_optionst	   gdb_debugt
   output_dirt   extra_extension_argss   cfuncs.ot   extra_objects('   R,   R   t   mkdtempt   tempdirt   ost   patht   joint   destfilet
   debug_destt   cfuncs_destfilet   getcwdt   cwdt   chdirt   shutilt   copyR   t   cfuncs_filet   replaceR    t   new_compilert   compileR   t   dictt	   build_extt   Optimizationt   runtestst   CythonCompileTestCaseR   t
   parse_tagst   opent   devnullt   syst   stderrt   disable_optimizationt
   run_cythonR   t   run_distutilst   restore_statet   close(   t   selft   compilert   optst   optimization_disablert   cython_compile_testcaset
   new_stderrR[   (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyt   setUpH   sd    								
		
		
	c         C   s1   t  ƒ  s d  St j |  j ƒ t j |  j ƒ d  S(   N(   R,   RC   RK   RJ   RL   t   rmtreeRB   (   Ra   (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyt   tearDown    s    	(   t   __name__t
   __module__Rg   Ri   (    (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyR-   F   s   	Xt   GdbDebuggerTestCasec           B   s   e  Z d  „  Z d „  Z RS(   c      
   C   sd  t  ƒ  s d  St t |  ƒ j ƒ  t j d ƒ } t j d t j d  f ƒ } t j	 |  j
 | ƒ |  _ t |  j d ƒ  } | j | ƒ Wd  QXd d d |  j d d	 t j d
 d g	 } g  } t j j d ƒ } | rá | j | ƒ n  | j t j j t j j t j j t j ƒ ƒ ƒ ƒ t t j d t j j | ƒ ƒ} t j | d t j d t j d | ƒ|  _ d  S(   Ns              python

            import os
            import sys
            import traceback

            def excepthook(type, value, tb):
                traceback.print_exception(type, value, tb)
                sys.stderr.flush()
                sys.stdout.flush()
                os._exit(1)

            sys.excepthook = excepthook

            # Have tracebacks end up on sys.stderr (gdb replaces sys.stderr
            # with an object that calls gdb.write())
            sys.stderr = sys.__stderr__

            end
            s¨               python

            from Cython.Debugger.Tests import test_libcython_in_gdb
            test_libcython_in_gdb.main(version=%r)

            end
            i   t   aR   s   -batchs   -xs   -ns   --argss   -cs   import codefilet
   PYTHONPATHR   R[   t   env(   R,   t   superRl   Rg   t   textwrapt   dedentRZ   t   version_infot   cygdbt   make_command_fileRB   t   gdb_command_fileRX   R   t
   executableRC   t   environt   gett   appendRD   t   dirnamet   abspatht   Cythont   __file__RR   t   pathsepRE   R   R   R   R%   (   Ra   t   prefix_codet   codet   ft   argst   pathsRD   Ro   (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyRg   ©   s2    		!		c         C   s‘   t  ƒ  s d  Szl t t |  ƒ j ƒ  |  j rx y |  j j j ƒ  Wn n Xy |  j j j ƒ  Wn n X|  j j ƒ  n  Wd  t	 j
 |  j ƒ Xd  S(   N(   R,   Rp   Rl   Ri   R%   R   R`   R[   t   waitRC   t   removeRv   (   Ra   (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyRi   å   s    		    (   Rj   Rk   Rg   Ri   (    (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyRl   §   s   	<t   TestAllc           B   s   e  Z d  „  Z RS(   c   	      C   sñ   t  ƒ  s d  S|  j j ƒ  \ } } | j d ƒ } | j d ƒ } |  j j } | d k r{ t j j | ƒ t j j | ƒ nr | d k rí d d } d | | f } d | | f } d | | f } d	 | | | | | f } t j j | ƒ n  d  S(
   Ns   UTF-8i   i   u   *i   u   %s   v INSIDE GDB v   %su   %s   v STDERR v   %su   %s   ^ INSIDE GDB ^   %su   
%s
%s%s
%s%s(   R,   R%   R   R   t
   returncodeRZ   R[   R   (	   Ra   t   outt   errt   exit_statust   bordert   startR[   t   endt   errmsg(    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyt   test_all÷   s     	
(   Rj   Rk   R   (    (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyR‡   õ   s   t   __main__(+   RC   R   RZ   RL   R#   Rq   t   unittestR   R   t	   distutilsR    RU   t   Cython.Distutils.extensionR}   t   Cython.Distutils.old_build_extt	   Distutilst   old_build_extRS   t   Cython.DebuggerR   Rt   RD   R{   R|   R~   t   rootRE   R   RN   RX   R‚   RR   t	   enumeratet   source_to_linenoR   R   R,   t   TestCaseR-   Rl   R‡   Rj   t   main(    (    (    sB   lib/python2.7/site-packages/Cython/Debugger/Tests/TestLibCython.pyt   <module>   s2   "	)aN