| Index: third_party/cython/src/Cython/Debugger/DebugWriter.py
|
| diff --git a/third_party/cython/src/Cython/Debugger/DebugWriter.py b/third_party/cython/src/Cython/Debugger/DebugWriter.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7242a582ed6e3add6be064b0c11d416fe0553b22
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Debugger/DebugWriter.py
|
| @@ -0,0 +1,78 @@
|
| +from __future__ import with_statement
|
| +
|
| +import os
|
| +import sys
|
| +import errno
|
| +
|
| +try:
|
| + from lxml import etree
|
| + have_lxml = True
|
| +except ImportError:
|
| + have_lxml = False
|
| + try:
|
| + # Python 2.5
|
| + from xml.etree import cElementTree as etree
|
| + except ImportError:
|
| + try:
|
| + # Python 2.5
|
| + from xml.etree import ElementTree as etree
|
| + except ImportError:
|
| + try:
|
| + # normal cElementTree install
|
| + import cElementTree as etree
|
| + except ImportError:
|
| + try:
|
| + # normal ElementTree install
|
| + import elementtree.ElementTree as etree
|
| + except ImportError:
|
| + etree = None
|
| +
|
| +from Cython.Compiler import Errors
|
| +
|
| +
|
| +class CythonDebugWriter(object):
|
| + """
|
| + Class to output debugging information for cygdb
|
| +
|
| + It writes debug information to cython_debug/cython_debug_info_<modulename>
|
| + in the build directory.
|
| + """
|
| +
|
| + def __init__(self, output_dir):
|
| + if etree is None:
|
| + raise Errors.NoElementTreeInstalledException()
|
| +
|
| + self.output_dir = os.path.join(output_dir, 'cython_debug')
|
| + self.tb = etree.TreeBuilder()
|
| + # set by Cython.Compiler.ParseTreeTransforms.DebugTransform
|
| + self.module_name = None
|
| + self.start('cython_debug', attrs=dict(version='1.0'))
|
| +
|
| + def start(self, name, attrs=None):
|
| + self.tb.start(name, attrs or {})
|
| +
|
| + def end(self, name):
|
| + self.tb.end(name)
|
| +
|
| + def serialize(self):
|
| + self.tb.end('Module')
|
| + self.tb.end('cython_debug')
|
| + xml_root_element = self.tb.close()
|
| +
|
| + try:
|
| + os.makedirs(self.output_dir)
|
| + except OSError, e:
|
| + if e.errno != errno.EEXIST:
|
| + raise
|
| +
|
| + et = etree.ElementTree(xml_root_element)
|
| + kw = {}
|
| + if have_lxml:
|
| + kw['pretty_print'] = True
|
| +
|
| + fn = "cython_debug_info_" + self.module_name
|
| + et.write(os.path.join(self.output_dir, fn), encoding="UTF-8", **kw)
|
| +
|
| + interpreter_path = os.path.join(self.output_dir, 'interpreter')
|
| + with open(interpreter_path, 'w') as f:
|
| + f.write(sys.executable)
|
|
|