diff --git a/kdlibcpp b/kdlibcpp index 107f991..6f96e04 160000 --- a/kdlibcpp +++ b/kdlibcpp @@ -1 +1 @@ -Subproject commit 107f991bb61245de85862717550cb365d54de2b0 +Subproject commit 6f96e046f3e79bc464759c6729d6d344083587e4 diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index d265da9..c5cac9e 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -127,7 +127,7 @@ void uninitialize() } -BOOST_PYTHON_MODULE( pykd ) +void pykd_init() { python::scope().attr("__version__") = pykdVersion; python::scope().attr("version") = pykdVersion; @@ -1370,7 +1370,7 @@ BOOST_PYTHON_MODULE( pykd ) .value("FinalBreak", kdlib::FinalBreak) .value("PreferDml", kdlib::PreferDml) ; - + python::enum_<kdlib::BreakpointAccess>("breakpointAccess", "Breakpoint access types") .value("Read", kdlib::Read) .value("Write", kdlib::Write) @@ -1382,3 +1382,59 @@ BOOST_PYTHON_MODULE( pykd ) } ////////////////////////////////////////////////////////////////////////////////// + +#if PY_VERSION_HEX >= 0x03000000 + +void pykd_deinit(void*) +{ + if ( kdlib::isInintilized() ) + kdlib::uninitialize(); +} + +PyMODINIT_FUNC +PyInit_pykd(void) +{ + static PyModuleDef_Base initial_base = { + PyObject_HEAD_INIT(NULL) + 0, /* m_init */ + 0, /* m_index */ + 0 /* m_copy */ + }; + + static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; + + static struct PyModuleDef moduledef = { \ + initial_base, + "pykd", + 0, /* m_doc */ + -1, /* m_size */ + initial_methods, + 0, /* m_reload */ + 0, /* m_traverse */ + 0, /* m_clear */ + pykd_deinit + }; + + return boost::python::detail::init_module(moduledef, pykd_init); +} +#else + +void pykd_deinit(PyObject*) +{ + if (kdlib::isInintilized()) + kdlib::uninitialize(); +} + +PyMODINIT_FUNC +initpykd() +{ + PyObject* moduleObj = boost::python::detail::init_module("pykd", pykd_init); + + PyObject* moduleDeiniter = PyCapsule_New( (void*)1, "pykd.__deinit__", pykd_deinit); + + PyModule_AddObject(moduleObj, "pykd.__deinit__", moduleDeiniter); +} + +#endif +////////////////////////////////////////////////////////////////////////////////// +