From 384e5744de5ab1e3449785999e5959f793a0eb0d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 24 Oct 2020 14:13:54 +0530 Subject: [PATCH] Multi-phase init for more modules --- src/calibre/utils/hyphenation/hyphen.c | 30 +++++++++++--------------- src/calibre/utils/windows/winsapi.cpp | 18 ++++++++-------- src/calibre/utils/windows/winutil.cpp | 18 ++++++++-------- src/unicode_names/unicode_names.c | 26 +++++++++++----------- 4 files changed, 42 insertions(+), 50 deletions(-) diff --git a/src/calibre/utils/hyphenation/hyphen.c b/src/calibre/utils/hyphenation/hyphen.c index 0d4ecf7aa5..2dbecd9265 100644 --- a/src/calibre/utils/hyphenation/hyphen.c +++ b/src/calibre/utils/hyphenation/hyphen.c @@ -93,24 +93,18 @@ static PyMethodDef methods[] = { {NULL} /* Sentinel */ }; -static struct PyModuleDef module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "hyphen", - /* m_doc */ doc, - /* m_size */ -1, - /* m_methods */ methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, +static int +exec_module(PyObject *module) { return 0; } + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "hyphen", + .m_doc = doc, + .m_methods = methods, + .m_slots = slots, }; -CALIBRE_MODINIT_FUNC PyInit_hyphen(void) { - PyObject* m = PyModule_Create(&module); - if (m == NULL) { - return NULL; - } - - return m; -} +CALIBRE_MODINIT_FUNC PyInit_hyphen(void) { return PyModuleDef_Init(&module_def); } // }}} diff --git a/src/calibre/utils/windows/winsapi.cpp b/src/calibre/utils/windows/winsapi.cpp index 9a2859abb2..7c6d5d7c05 100644 --- a/src/calibre/utils/windows/winsapi.cpp +++ b/src/calibre/utils/windows/winsapi.cpp @@ -506,13 +506,13 @@ exec_module(PyObject *m) { static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; -static struct PyModuleDef module_def = { - .m_base = PyModuleDef_HEAD_INIT, - .m_name = "winsapi", - .m_doc = "SAPI wrapper", - .m_methods = winsapi_methods, - .m_slots = slots, -}; +static struct PyModuleDef module_def = {0}; - -CALIBRE_MODINIT_FUNC PyInit_winsapi(void) {return PyModuleDef_Init(&module_def); } +CALIBRE_MODINIT_FUNC PyInit_winsapi(void) { + module_def.m_base = PyModuleDef_HEAD_INIT; + module_def.m_name = "winsapi"; + module_def.m_doc = "SAPI wrapper"; + module_def.m_methods = winsapi_methods; + module_def.m_slots = slots; + return PyModuleDef_Init(&module_def); +} diff --git a/src/calibre/utils/windows/winutil.cpp b/src/calibre/utils/windows/winutil.cpp index 93af8b26a7..c2f9a5db0b 100644 --- a/src/calibre/utils/windows/winutil.cpp +++ b/src/calibre/utils/windows/winutil.cpp @@ -1395,13 +1395,13 @@ exec_module(PyObject *m) { static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; -static struct PyModuleDef module_def = { - .m_base = PyModuleDef_HEAD_INIT, - .m_name = "winutil", - .m_doc = winutil_doc, - .m_methods = winutil_methods, - .m_slots = slots, -}; +static struct PyModuleDef module_def = {0}; - -CALIBRE_MODINIT_FUNC PyInit_winutil(void) {return PyModuleDef_Init(&module_def); } +CALIBRE_MODINIT_FUNC PyInit_winutil(void) { + module_def.m_base = PyModuleDef_HEAD_INIT; + module_def.m_name = "winutil"; + module_def.m_doc = winutil_doc; + module_def.m_methods = winutil_methods; + module_def.m_slots = slots; + return PyModuleDef_Init(&module_def); +} diff --git a/src/unicode_names/unicode_names.c b/src/unicode_names/unicode_names.c index 961105b443..e6c5579099 100644 --- a/src/unicode_names/unicode_names.c +++ b/src/unicode_names/unicode_names.c @@ -81,19 +81,17 @@ static PyMethodDef unicode_names_methods[] = { {NULL, NULL, 0, NULL} /* Sentinel */ }; -static struct PyModuleDef unicode_names_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "unicode_names", - /* m_doc */ "A library to assist with selecting special characters", - /* m_size */ -1, - /* m_methods */ unicode_names_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, +static int +exec_module(PyObject *module) { return 0; } + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "unicode_names", + .m_doc = "A library to assist with selecting special characters", + .m_methods = unicode_names_methods, + .m_slots = slots, }; -CALIBRE_MODINIT_FUNC PyInit_unicode_names(void) { - // Create the module - return PyModule_Create(&unicode_names_module); -} +CALIBRE_MODINIT_FUNC PyInit_unicode_names(void) { return PyModuleDef_Init(&module_def); }