Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef MODULE_INIT_DWA20020722_HPP Chris@16: # define MODULE_INIT_DWA20020722_HPP Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # ifndef BOOST_PYTHON_MODULE_INIT Chris@16: Chris@16: namespace boost { namespace python { namespace detail { Chris@16: Chris@16: # if PY_VERSION_HEX >= 0x03000000 Chris@16: Chris@16: BOOST_PYTHON_DECL PyObject* init_module(PyModuleDef&, void(*)()); Chris@16: Chris@16: #else Chris@16: Chris@16: BOOST_PYTHON_DECL PyObject* init_module(char const* name, void(*)()); Chris@16: Chris@16: #endif Chris@16: Chris@16: }}} Chris@16: Chris@16: # if PY_VERSION_HEX >= 0x03000000 Chris@16: Chris@16: # define _BOOST_PYTHON_MODULE_INIT(name) \ Chris@16: PyObject* BOOST_PP_CAT(PyInit_, name)() \ Chris@16: { \ Chris@16: static PyModuleDef_Base initial_m_base = { \ Chris@16: PyObject_HEAD_INIT(NULL) \ Chris@16: 0, /* m_init */ \ Chris@16: 0, /* m_index */ \ Chris@16: 0 /* m_copy */ }; \ Chris@16: static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; \ Chris@16: \ Chris@16: static struct PyModuleDef moduledef = { \ Chris@16: initial_m_base, \ Chris@16: BOOST_PP_STRINGIZE(name), \ Chris@16: 0, /* m_doc */ \ Chris@16: -1, /* m_size */ \ Chris@16: initial_methods, \ Chris@16: 0, /* m_reload */ \ Chris@16: 0, /* m_traverse */ \ Chris@16: 0, /* m_clear */ \ Chris@16: 0, /* m_free */ \ Chris@16: }; \ Chris@16: \ Chris@16: return boost::python::detail::init_module( \ Chris@16: moduledef, BOOST_PP_CAT(init_module_, name) ); \ Chris@16: } \ Chris@16: void BOOST_PP_CAT(init_module_, name)() Chris@16: Chris@16: # else Chris@16: Chris@16: # define _BOOST_PYTHON_MODULE_INIT(name) \ Chris@16: void BOOST_PP_CAT(init,name)() \ Chris@16: { \ Chris@16: boost::python::detail::init_module( \ Chris@16: BOOST_PP_STRINGIZE(name),&BOOST_PP_CAT(init_module_,name)); \ Chris@16: } \ Chris@16: void BOOST_PP_CAT(init_module_,name)() Chris@16: Chris@16: # endif Chris@16: Chris@16: # if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(BOOST_PYTHON_STATIC_MODULE) Chris@16: Chris@16: # define BOOST_PYTHON_MODULE_INIT(name) \ Chris@16: void BOOST_PP_CAT(init_module_,name)(); \ Chris@16: extern "C" __declspec(dllexport) _BOOST_PYTHON_MODULE_INIT(name) Chris@16: Chris@16: # elif BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY Chris@16: Chris@16: # define BOOST_PYTHON_MODULE_INIT(name) \ Chris@16: void BOOST_PP_CAT(init_module_,name)(); \ Chris@16: extern "C" __attribute__ ((__visibility__("default"))) _BOOST_PYTHON_MODULE_INIT(name) Chris@16: Chris@16: # else Chris@16: Chris@16: # define BOOST_PYTHON_MODULE_INIT(name) \ Chris@16: void BOOST_PP_CAT(init_module_,name)(); \ Chris@16: extern "C" _BOOST_PYTHON_MODULE_INIT(name) Chris@16: Chris@16: # endif Chris@16: Chris@16: # endif Chris@16: Chris@16: #endif // MODULE_INIT_DWA20020722_HPP