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}
};
static struct PyModuleDef libusb_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* 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;
static int
exec_module(PyObject *m) {
// 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
// here and for libmtp.
if(libusb_init(NULL) != 0) {
return NULL;
}
if(libusb_init(NULL) != 0) return -1;
Error = PyErr_NewException("libusb.Error", NULL, NULL);
if (Error == NULL) {
return NULL;
}
if (Error == NULL) return -1;
cache = PyDict_New();
if (cache == NULL) {
return NULL;
}
m = PyModule_Create(&libusb_module);
if (m == NULL) {
return NULL;
}
if (cache == NULL) return -1;
PyModule_AddObject(m, "Error", Error);
PyModule_AddObject(m, "cache", cache);
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 = "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}
};
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) {
static int
exec_module(PyObject *m) {
DeviceType.tp_new = PyType_GenericNew;
if (PyType_Ready(&DeviceType) < 0) {
return NULL;
}
PyObject *m = PyModule_Create(&libmtp_module);
if (m == NULL) {
return NULL;
}
if (PyType_Ready(&DeviceType) < 0) return -1;
MTPError = PyErr_NewException("libmtp.MTPError", NULL, NULL);
if (MTPError == NULL) {
return NULL;
}
if (MTPError == NULL) return -1;
PyModule_AddObject(m, "MTPError", MTPError);
// 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_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}
};
static struct PyModuleDef wpd_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* 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;
static int
exec_module(PyObject *m) {
wpd::DeviceType.tp_new = PyType_GenericNew;
if (PyType_Ready(&wpd::DeviceType) < 0)
return NULL;
m = PyModule_Create(&wpd_module);
if (m == NULL) {
return NULL;
}
if (PyType_Ready(&wpd::DeviceType) < 0) return -1;
WPDError = PyErr_NewException("wpd.WPDError", NULL, NULL);
if (WPDError == NULL) {
return NULL;
}
if (WPDError == NULL) return -1;
PyModule_AddObject(m, "WPDError", WPDError);
NoWPD = PyErr_NewException("wpd.NoWPD", NULL, NULL);
if (NoWPD == NULL) {
return NULL;
}
if (NoWPD == NULL) return -1;
PyModule_AddObject(m, "NoWPD", NoWPD);
WPDFileBusy = PyErr_NewException("wpd.WPDFileBusy", NULL, NULL);
if (WPDFileBusy == NULL) {
return NULL;
}
if (WPDFileBusy == NULL) return -1;
PyModule_AddObject(m, "WPDFileBusy", WPDFileBusy);
Py_INCREF(&DeviceType);
PyModule_AddObject(m, "Device", (PyObject *)&DeviceType);
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_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}
};
static int
exec_module(PyObject *module) { return 0; }
static struct PyModuleDef usbobserver_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "usbobserver",
/* m_doc */ usbobserver_doc,
/* m_size */ -1,
/* m_methods */ usbobserver_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "usbobserver",
.m_doc = usbobserver_doc,
.m_methods = usbobserver_methods,
.m_slots = slots,
};
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 */
};
static int
exec_module(PyObject *module) { return 0; }
static struct PyModuleDef cocoa_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "cocoa",
/* m_doc */ "",
/* m_size */ -1,
/* m_methods */ module_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} };
static struct PyModuleDef module_def = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "cocoa",
.m_methods = module_methods,
.m_slots = slots,
};
CALIBRE_MODINIT_FUNC PyInit_cocoa(void) {
PyObject *m = PyModule_Create(&cocoa_module);
if (m == NULL) {
return NULL;
}
return m;
}
CALIBRE_MODINIT_FUNC PyInit_cocoa(void) { return PyModuleDef_Init(&module_def); }

View File

@ -234,27 +234,8 @@ static PyMethodDef winfonts_methods[] = {
{NULL, NULL, 0, NULL}
};
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;
}
static int
exec_module(PyObject *m) {
PyModule_AddIntMacro(m, FW_DONTCARE);
PyModule_AddIntMacro(m, FW_THIN);
PyModule_AddIntMacro(m, FW_EXTRALIGHT);
@ -271,5 +252,17 @@ CALIBRE_MODINIT_FUNC PyInit_winfonts(void) {
PyModule_AddIntMacro(m, FW_HEAVY);
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 struct PyModuleDef module_def = {0};
static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT};
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;

View File

@ -1395,10 +1395,9 @@ exec_module(PyObject *m) {
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) {
module_def.m_base = PyModuleDef_HEAD_INIT;
module_def.m_name = "winutil";
module_def.m_doc = winutil_doc;
module_def.m_methods = winutil_methods;