From e9603e27bfd3e5e4c9432c6cb93ee405a6b41398 Mon Sep 17 00:00:00 2001 From: Flaviu Tamas Date: Fri, 24 Aug 2018 02:01:04 -0400 Subject: [PATCH] Build certgen in py3 --- src/calibre/utils/certgen.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/calibre/utils/certgen.c b/src/calibre/utils/certgen.c index 2770156c38..2ef066a720 100644 --- a/src/calibre/utils/certgen.c +++ b/src/calibre/utils/certgen.c @@ -379,15 +379,36 @@ static PyMethodDef certgen_methods[] = { }; -CALIBRE_MODINIT_FUNC -initcertgen(void) { - PyObject *m; - m = Py_InitModule3("certgen", certgen_methods, - "OpenSSL bindings to easily create certificates/certificate authorities" - ); - if (m == NULL) return; +#if PY_MAJOR_VERSION >= 3 +#define INITERROR return NULL +static struct PyModuleDef certgen_module = { + /* m_base */ PyModuleDef_HEAD_INIT, + /* m_name */ "certgen", + /* m_doc */ "OpenSSL bindings to easily create certificates/certificate authorities.", + /* m_size */ -1, + /* m_methods */ certgen_methods, + /* m_slots */ 0, + /* m_traverse */ 0, + /* m_clear */ 0, + /* m_free */ 0, +}; + +CALIBRE_MODINIT_FUNC PyInit_certgen(void) { + PyObject *mod = PyModule_Create(&certgen_module); +#else +#define INITERROR return +CALIBRE_MODINIT_FUNC initcertgen(void) { + PyObject *mod = Py_InitModule3("certgen", certgen_methods, + "OpenSSL bindings to easily create certificates/certificate authorities"); +#endif + + if (mod == NULL) INITERROR; + OpenSSL_add_all_algorithms(); ERR_load_crypto_strings(); ERR_load_BIO_strings(); -} +#if PY_MAJOR_VERSION >= 3 + return mod; +#endif +}