1313
1414namespace boost { namespace python { namespace detail {
1515
16+ # if PY_VERSION_HEX >= 0x03000000
17+
18+ BOOST_PYTHON_DECL PyObject* init_module (PyModuleDef&, void (*)());
19+
20+ #else
21+
1622BOOST_PYTHON_DECL PyObject* init_module (char const * name, void (*)());
1723
24+ #endif
25+
1826}}}
1927
2028# if PY_VERSION_HEX >= 0x03000000
2129
22- # define _BOOST_PYTHON_MODULE_INIT (name ) \
23- PyObject* BOOST_PP_CAT (PyInit_,name)() \
24- { \
25- return boost::python::detail::init_module ( \
26- BOOST_PP_STRINGIZE (name),&BOOST_PP_CAT (init_module_,name)); \
27- } \
28- void BOOST_PP_CAT (init_module_,name)()
30+ # define _BOOST_PYTHON_MODULE_INIT (name ) \
31+ PyObject* BOOST_PP_CAT (PyInit_, name)() \
32+ { \
33+ static PyModuleDef_Base initial_m_base = { \
34+ PyObject_HEAD_INIT (NULL ) \
35+ 0 , /* m_init */ \
36+ 0 , /* m_index */ \
37+ 0 /* m_copy */ }; \
38+ static PyMethodDef initial_methods[] = { { 0 , 0 , 0 , 0 } }; \
39+ \
40+ static struct PyModuleDef moduledef = { \
41+ initial_m_base, \
42+ BOOST_PP_STRINGIZE (name), \
43+ 0 , /* m_doc */ \
44+ -1 , /* m_size */ \
45+ initial_methods, \
46+ 0 , /* m_reload */ \
47+ 0 , /* m_traverse */ \
48+ 0 , /* m_clear */ \
49+ 0 , /* m_free */ \
50+ }; \
51+ \
52+ return boost::python::detail::init_module ( \
53+ moduledef, BOOST_PP_CAT (init_module_, name) ); \
54+ } \
55+ void BOOST_PP_CAT (init_module_, name)()
2956
3057# else
3158
3259# define _BOOST_PYTHON_MODULE_INIT (name ) \
33- void BOOST_PP_CAT (init,name)() \
60+ void BOOST_PP_CAT (init,name)() \
3461{ \
3562 boost::python::detail::init_module ( \
36- BOOST_PP_STRINGIZE (name),&BOOST_PP_CAT (init_module_,name)); \
63+ BOOST_PP_STRINGIZE (name),&BOOST_PP_CAT (init_module_,name)); \
3764} \
3865 void BOOST_PP_CAT (init_module_,name)()
3966
@@ -42,23 +69,23 @@ BOOST_PYTHON_DECL PyObject* init_module(char const* name, void(*)());
4269# if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(BOOST_PYTHON_STATIC_MODULE)
4370
4471# define BOOST_PYTHON_MODULE_INIT (name ) \
45- void BOOST_PP_CAT (init_module_,name)(); \
72+ void BOOST_PP_CAT (init_module_,name)(); \
4673extern " C" __declspec(dllexport) _BOOST_PYTHON_MODULE_INIT(name)
4774
4875# elif BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY
4976
5077# define BOOST_PYTHON_MODULE_INIT (name ) \
51- void BOOST_PP_CAT (init_module_,name)(); \
78+ void BOOST_PP_CAT (init_module_,name)(); \
5279extern " C" __attribute__ ((visibility(" default" ))) _BOOST_PYTHON_MODULE_INIT(name)
5380
5481# else
5582
5683# define BOOST_PYTHON_MODULE_INIT (name ) \
57- void BOOST_PP_CAT (init_module_,name)(); \
84+ void BOOST_PP_CAT (init_module_,name)(); \
5885extern " C" _BOOST_PYTHON_MODULE_INIT(name)
5986
6087# endif
6188
62- # endif
89+ # endif
6390
6491#endif // MODULE_INIT_DWA20020722_HPP
0 commit comments