More multi-phase init

This commit is contained in:
Kovid Goyal 2020-10-24 20:23:02 +05:30
parent da1b470b54
commit 7d7b52f01c
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
8 changed files with 93 additions and 148 deletions

View File

@ -125,44 +125,31 @@ static PyMethodDef libusb_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
static struct PyModuleDef libusb_module = { static int
/* m_base */ PyModuleDef_HEAD_INIT, exec_module(PyObject *m) {
/* m_name */ "libusb",
/* m_doc */ libusb_doc,
/* m_size */ -1,
/* m_methods */ libusb_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
};
CALIBRE_MODINIT_FUNC PyInit_libusb(void) {
PyObject *m;
// We deliberately use the default context. This is the context used by // We deliberately use the default context. This is the context used by
// libmtp and we want to ensure that the busnum/devnum numbers are the same // libmtp and we want to ensure that the busnum/devnum numbers are the same
// here and for libmtp. // here and for libmtp.
if(libusb_init(NULL) != 0) { if(libusb_init(NULL) != 0) return -1;
return NULL;
}
Error = PyErr_NewException("libusb.Error", NULL, NULL); Error = PyErr_NewException("libusb.Error", NULL, NULL);
if (Error == NULL) { if (Error == NULL) return -1;
return NULL;
}
cache = PyDict_New(); cache = PyDict_New();
if (cache == NULL) { if (cache == NULL) return -1;
return NULL;
}
m = PyModule_Create(&libusb_module);
if (m == NULL) {
return NULL;
}
PyModule_AddObject(m, "Error", Error); PyModule_AddObject(m, "Error", Error);
PyModule_AddObject(m, "cache", cache); PyModule_AddObject(m, "cache", cache);
return 0;
return m;
} }
static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "libusb",
.m_doc = libusb_doc,
.m_methods = libusb_methods,
.m_slots = slots,
};
CALIBRE_MODINIT_FUNC PyInit_libusb(void) { return PyModuleDef_Init(&module_def); }

View File

@ -711,34 +711,13 @@ static PyMethodDef libmtp_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
static int
exec_module(PyObject *m) {
static struct PyModuleDef libmtp_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "libmtp",
/* m_doc */ libmtp_doc,
/* m_size */ -1,
/* m_methods */ libmtp_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
};
CALIBRE_MODINIT_FUNC PyInit_libmtp(void) {
DeviceType.tp_new = PyType_GenericNew; DeviceType.tp_new = PyType_GenericNew;
if (PyType_Ready(&DeviceType) < 0) { if (PyType_Ready(&DeviceType) < 0) return -1;
return NULL;
}
PyObject *m = PyModule_Create(&libmtp_module);
if (m == NULL) {
return NULL;
}
MTPError = PyErr_NewException("libmtp.MTPError", NULL, NULL); MTPError = PyErr_NewException("libmtp.MTPError", NULL, NULL);
if (MTPError == NULL) { if (MTPError == NULL) return -1;
return NULL;
}
PyModule_AddObject(m, "MTPError", MTPError); PyModule_AddObject(m, "MTPError", MTPError);
// Redirect stdout to get rid of the annoying message about mtpz. Really, // Redirect stdout to get rid of the annoying message about mtpz. Really,
@ -769,5 +748,17 @@ CALIBRE_MODINIT_FUNC PyInit_libmtp(void) {
PyModule_AddIntMacro(m, LIBMTP_DEBUG_DATA); PyModule_AddIntMacro(m, LIBMTP_DEBUG_DATA);
PyModule_AddIntMacro(m, LIBMTP_DEBUG_ALL); PyModule_AddIntMacro(m, LIBMTP_DEBUG_ALL);
return m; 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 = "libmtp",
.m_doc = libmtp_doc,
.m_methods = libmtp_methods,
.m_slots = slots,
};
CALIBRE_MODINIT_FUNC PyInit_libmtp(void) { return PyModuleDef_Init(&module_def); }

View File

@ -183,50 +183,36 @@ static PyMethodDef wpd_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
static struct PyModuleDef wpd_module = { static int
/* m_base */ PyModuleDef_HEAD_INIT, exec_module(PyObject *m) {
/* m_name */ "wpd",
/* m_doc */ wpd_doc,
/* m_size */ -1,
/* m_methods */ wpd_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
};
CALIBRE_MODINIT_FUNC PyInit_wpd(void) {
PyObject *m;
wpd::DeviceType.tp_new = PyType_GenericNew; wpd::DeviceType.tp_new = PyType_GenericNew;
if (PyType_Ready(&wpd::DeviceType) < 0) if (PyType_Ready(&wpd::DeviceType) < 0) return -1;
return NULL;
m = PyModule_Create(&wpd_module);
if (m == NULL) {
return NULL;
}
WPDError = PyErr_NewException("wpd.WPDError", NULL, NULL); WPDError = PyErr_NewException("wpd.WPDError", NULL, NULL);
if (WPDError == NULL) { if (WPDError == NULL) return -1;
return NULL;
}
PyModule_AddObject(m, "WPDError", WPDError); PyModule_AddObject(m, "WPDError", WPDError);
NoWPD = PyErr_NewException("wpd.NoWPD", NULL, NULL); NoWPD = PyErr_NewException("wpd.NoWPD", NULL, NULL);
if (NoWPD == NULL) { if (NoWPD == NULL) return -1;
return NULL;
}
PyModule_AddObject(m, "NoWPD", NoWPD); PyModule_AddObject(m, "NoWPD", NoWPD);
WPDFileBusy = PyErr_NewException("wpd.WPDFileBusy", NULL, NULL); WPDFileBusy = PyErr_NewException("wpd.WPDFileBusy", NULL, NULL);
if (WPDFileBusy == NULL) { if (WPDFileBusy == NULL) return -1;
return NULL;
}
PyModule_AddObject(m, "WPDFileBusy", WPDFileBusy); PyModule_AddObject(m, "WPDFileBusy", WPDFileBusy);
Py_INCREF(&DeviceType); Py_INCREF(&DeviceType);
PyModule_AddObject(m, "Device", (PyObject *)&DeviceType); PyModule_AddObject(m, "Device", (PyObject *)&DeviceType);
return 0;
return m; }
static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT};
CALIBRE_MODINIT_FUNC PyInit_wpd(void) {
module_def.m_name = "wpd";
module_def.m_slots = slots;
module_def.m_doc = wpd_doc;
module_def.m_methods = wpd_methods;
return PyModuleDef_Init(&module_def);
} }

View File

@ -460,21 +460,17 @@ static PyMethodDef usbobserver_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
static int
exec_module(PyObject *module) { return 0; }
static struct PyModuleDef usbobserver_module = { static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} };
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "usbobserver", static struct PyModuleDef module_def = {
/* m_doc */ usbobserver_doc, .m_base = PyModuleDef_HEAD_INIT,
/* m_size */ -1, .m_name = "usbobserver",
/* m_methods */ usbobserver_methods, .m_doc = usbobserver_doc,
/* m_slots */ 0, .m_methods = usbobserver_methods,
/* m_traverse */ 0, .m_slots = slots,
/* m_clear */ 0,
/* m_free */ 0,
}; };
CALIBRE_MODINIT_FUNC PyInit_usbobserver(void) {
PyObject *m = NULL;
m = PyModule_Create(&usbobserver_module);
return m; CALIBRE_MODINIT_FUNC PyInit_usbobserver(void) { return PyModuleDef_Init(&module_def); }
}

View File

@ -101,22 +101,16 @@ static PyMethodDef module_methods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */ {NULL, NULL, 0, NULL} /* Sentinel */
}; };
static int
exec_module(PyObject *module) { return 0; }
static struct PyModuleDef cocoa_module = { static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} };
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "cocoa", static struct PyModuleDef module_def = {
/* m_doc */ "", .m_base = PyModuleDef_HEAD_INIT,
/* m_size */ -1, .m_name = "cocoa",
/* m_methods */ module_methods, .m_methods = module_methods,
/* m_slots */ 0, .m_slots = slots,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
}; };
CALIBRE_MODINIT_FUNC PyInit_cocoa(void) {
PyObject *m = PyModule_Create(&cocoa_module); CALIBRE_MODINIT_FUNC PyInit_cocoa(void) { return PyModuleDef_Init(&module_def); }
if (m == NULL) {
return NULL;
}
return m;
}

View File

@ -234,27 +234,8 @@ static PyMethodDef winfonts_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
static int
exec_module(PyObject *m) {
static struct PyModuleDef winfonts_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "winfonts",
/* m_doc */ winfonts_doc,
/* m_size */ -1,
/* m_methods */ winfonts_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
};
CALIBRE_MODINIT_FUNC PyInit_winfonts(void) {
PyObject *m;
m = PyModule_Create(&winfonts_module);
if (m == NULL) {
return NULL;
}
PyModule_AddIntMacro(m, FW_DONTCARE); PyModule_AddIntMacro(m, FW_DONTCARE);
PyModule_AddIntMacro(m, FW_THIN); PyModule_AddIntMacro(m, FW_THIN);
PyModule_AddIntMacro(m, FW_EXTRALIGHT); PyModule_AddIntMacro(m, FW_EXTRALIGHT);
@ -271,5 +252,17 @@ CALIBRE_MODINIT_FUNC PyInit_winfonts(void) {
PyModule_AddIntMacro(m, FW_HEAVY); PyModule_AddIntMacro(m, FW_HEAVY);
PyModule_AddIntMacro(m, FW_BLACK); PyModule_AddIntMacro(m, FW_BLACK);
return m; return 0;
}
static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT};
CALIBRE_MODINIT_FUNC PyInit_winfonts(void) {
module_def.m_name = "winfonts";
module_def.m_slots = slots;
module_def.m_doc = winfonts_doc;
module_def.m_methods = winfonts_methods;
return PyModuleDef_Init(&module_def);
} }

View File

@ -506,10 +506,9 @@ exec_module(PyObject *m) {
static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {0}; static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT};
CALIBRE_MODINIT_FUNC PyInit_winsapi(void) { CALIBRE_MODINIT_FUNC PyInit_winsapi(void) {
module_def.m_base = PyModuleDef_HEAD_INIT;
module_def.m_name = "winsapi"; module_def.m_name = "winsapi";
module_def.m_doc = "SAPI wrapper"; module_def.m_doc = "SAPI wrapper";
module_def.m_methods = winsapi_methods; module_def.m_methods = winsapi_methods;

View File

@ -1395,10 +1395,9 @@ exec_module(PyObject *m) {
static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {0}; static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT};
CALIBRE_MODINIT_FUNC PyInit_winutil(void) { CALIBRE_MODINIT_FUNC PyInit_winutil(void) {
module_def.m_base = PyModuleDef_HEAD_INIT;
module_def.m_name = "winutil"; module_def.m_name = "winutil";
module_def.m_doc = winutil_doc; module_def.m_doc = winutil_doc;
module_def.m_methods = winutil_methods; module_def.m_methods = winutil_methods;