diff --git a/setup/build.py b/setup/build.py index d6de2eb1b0..a720370559 100644 --- a/setup/build.py +++ b/setup/build.py @@ -34,6 +34,13 @@ class Extension(object): self.error = d['error'] = kwargs.get('error', None) self.libraries = d['libraries'] = kwargs.get('libraries', []) self.cflags = d['cflags'] = kwargs.get('cflags', []) + if iswindows: + self.cflags.append('/DCALIBRE_MODINIT_FUNC=PyMODINIT_FUNC') + else: + if self.needs_cxx: + self.cflags.append('-DCALIBRE_MODINIT_FUNC=extern "C" __attribute__ ((visibility ("default"))) void') + else: + self.cflags.append('-DCALIBRE_MODINIT_FUNC=__attribute__ ((visibility ("default"))) void') self.ldflags = d['ldflags'] = kwargs.get('ldflags', []) self.optional = d['options'] = kwargs.get('optional', False) of = kwargs.get('optimize_level', None) @@ -145,6 +152,7 @@ def init_env(): ldflags = shlex.split(ldflags) cflags += shlex.split(os.environ.get('CFLAGS', '')) ldflags += shlex.split(os.environ.get('LDFLAGS', '')) + cflags += ['-fvisibility=hidden'] if islinux: cflags.append('-pthread') diff --git a/src/calibre/devices/libusb/libusb.c b/src/calibre/devices/libusb/libusb.c index 843459cd98..5cef316a5d 100644 --- a/src/calibre/devices/libusb/libusb.c +++ b/src/calibre/devices/libusb/libusb.c @@ -119,7 +119,7 @@ static PyMethodDef libusb_methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initlibusb(void) { PyObject *m; diff --git a/src/calibre/devices/mtp/unix/libmtp.c b/src/calibre/devices/mtp/unix/libmtp.c index 9539a4b7d7..086211484c 100644 --- a/src/calibre/devices/mtp/unix/libmtp.c +++ b/src/calibre/devices/mtp/unix/libmtp.c @@ -712,7 +712,7 @@ static PyMethodDef libmtp_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initlibmtp(void) { PyObject *m; diff --git a/src/calibre/devices/mtp/windows/wpd.cpp b/src/calibre/devices/mtp/windows/wpd.cpp index 867ce6bcee..6901d5472e 100644 --- a/src/calibre/devices/mtp/windows/wpd.cpp +++ b/src/calibre/devices/mtp/windows/wpd.cpp @@ -182,7 +182,7 @@ static PyMethodDef wpd_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initwpd(void) { PyObject *m; diff --git a/src/calibre/devices/usbobserver/usbobserver.c b/src/calibre/devices/usbobserver/usbobserver.c index 3b4f3aa546..c3ac61d718 100644 --- a/src/calibre/devices/usbobserver/usbobserver.c +++ b/src/calibre/devices/usbobserver/usbobserver.c @@ -482,7 +482,7 @@ static PyMethodDef usbobserver_methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initusbobserver(void) { (void) Py_InitModule("usbobserver", usbobserver_methods); } diff --git a/src/calibre/ebooks/compression/palmdoc.c b/src/calibre/ebooks/compression/palmdoc.c index ac4a6c9097..7c29372481 100644 --- a/src/calibre/ebooks/compression/palmdoc.c +++ b/src/calibre/ebooks/compression/palmdoc.c @@ -195,7 +195,7 @@ static PyMethodDef cPalmdocMethods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initcPalmdoc(void) { PyObject *m; m = Py_InitModule3("cPalmdoc", cPalmdocMethods, diff --git a/src/calibre/ebooks/djvu/bzzdecoder.c b/src/calibre/ebooks/djvu/bzzdecoder.c index 0df9e488ff..1e355609f9 100644 --- a/src/calibre/ebooks/djvu/bzzdecoder.c +++ b/src/calibre/ebooks/djvu/bzzdecoder.c @@ -694,7 +694,7 @@ static PyMethodDef bzzdecmethods[] = { -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initbzzdec(void) { PyObject *m; m = Py_InitModule3("bzzdec", bzzdecmethods, diff --git a/src/calibre/gui2/tweak_book/diff/_patiencediff_c.c b/src/calibre/gui2/tweak_book/diff/_patiencediff_c.c index 0f0d380716..6af903376a 100644 --- a/src/calibre/gui2/tweak_book/diff/_patiencediff_c.c +++ b/src/calibre/gui2/tweak_book/diff/_patiencediff_c.c @@ -1258,7 +1258,7 @@ static PyMethodDef cpatiencediff_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC init_patiencediff_c(void) { PyObject* m; diff --git a/src/calibre/gui2/tweak_book/editor/syntax/html.c b/src/calibre/gui2/tweak_book/editor/syntax/html.c index 21ce39e69e..7b0fed55f4 100644 --- a/src/calibre/gui2/tweak_book/editor/syntax/html.c +++ b/src/calibre/gui2/tweak_book/editor/syntax/html.c @@ -474,7 +474,7 @@ static PyMethodDef html_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC inithtml(void) { PyObject *m, *temp; if (PyType_Ready(&html_TagType) < 0) diff --git a/src/calibre/library/sqlite_custom.c b/src/calibre/library/sqlite_custom.c index 8b45044ca9..c24c58f15a 100644 --- a/src/calibre/library/sqlite_custom.c +++ b/src/calibre/library/sqlite_custom.c @@ -10,7 +10,7 @@ SQLITE_EXTENSION_INIT1 #ifdef _MSC_VER #define MYEXPORT __declspec(dllexport) #else -#define MYEXPORT +#define MYEXPORT __attribute__ ((visibility ("default"))) #endif // sortconcat {{{ @@ -271,7 +271,7 @@ static PyMethodDef sqlite_custom_methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initsqlite_custom(void) { PyObject *m; m = Py_InitModule3("sqlite_custom", sqlite_custom_methods, diff --git a/src/calibre/utils/certgen.c b/src/calibre/utils/certgen.c index 730e8da709..2770156c38 100644 --- a/src/calibre/utils/certgen.c +++ b/src/calibre/utils/certgen.c @@ -379,7 +379,7 @@ static PyMethodDef certgen_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initcertgen(void) { PyObject *m; m = Py_InitModule3("certgen", certgen_methods, diff --git a/src/calibre/utils/chm/extra.c b/src/calibre/utils/chm/extra.c index bafbf7bb07..b4fc13488a 100644 --- a/src/calibre/utils/chm/extra.c +++ b/src/calibre/utils/chm/extra.c @@ -708,7 +708,7 @@ IndexMethods[] = { #ifdef __cplusplus extern "C" #endif -MODEXPORT(void) +CALIBRE_MODINIT_FUNC initchm_extra (void) { Py_InitModule ("chm_extra", IndexMethods); } diff --git a/src/calibre/utils/chm/swig_chm.c b/src/calibre/utils/chm/swig_chm.c index 56017205b7..7a1e1dc776 100644 --- a/src/calibre/utils/chm/swig_chm.c +++ b/src/calibre/utils/chm/swig_chm.c @@ -1106,7 +1106,7 @@ static swig_const_info swig_const_table[] = { #ifdef __cplusplus extern "C" #endif -SWIGEXPORT(void) SWIG_init(void) { +CALIBRE_MODINIT_FUNC SWIG_init(void) { static PyObject *SWIG_globals = 0; static int typeinit = 0; PyObject *m, *d; diff --git a/src/calibre/utils/fonts/freetype.cpp b/src/calibre/utils/fonts/freetype.cpp index 58d014c6b9..f9242f1fcf 100644 --- a/src/calibre/utils/fonts/freetype.cpp +++ b/src/calibre/utils/fonts/freetype.cpp @@ -293,7 +293,7 @@ PyMethodDef methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initfreetype(void) { PyObject *m; diff --git a/src/calibre/utils/fonts/winfonts.cpp b/src/calibre/utils/fonts/winfonts.cpp index db023b14bb..9e15bda6e6 100644 --- a/src/calibre/utils/fonts/winfonts.cpp +++ b/src/calibre/utils/fonts/winfonts.cpp @@ -235,7 +235,7 @@ PyMethodDef winfonts_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initwinfonts(void) { PyObject *m; m = Py_InitModule3( diff --git a/src/calibre/utils/icu.c b/src/calibre/utils/icu.c index 9b3699f196..3c52cb3265 100644 --- a/src/calibre/utils/icu.c +++ b/src/calibre/utils/icu.c @@ -1175,7 +1175,7 @@ static PyMethodDef icu_methods[] = { #define ADDUCONST(x) PyModule_AddIntConstant(m, #x, x) -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initicu(void) { PyObject* m; diff --git a/src/calibre/utils/lzx/lzxmodule.c b/src/calibre/utils/lzx/lzxmodule.c index 8b4b1f7c9b..410ade709d 100644 --- a/src/calibre/utils/lzx/lzxmodule.c +++ b/src/calibre/utils/lzx/lzxmodule.c @@ -202,7 +202,7 @@ static PyMethodDef lzx_methods[] = { { NULL } }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initlzx(void) { PyObject *m; diff --git a/src/calibre/utils/matcher.c b/src/calibre/utils/matcher.c index a06f468cf5..94ddd9ac35 100644 --- a/src/calibre/utils/matcher.c +++ b/src/calibre/utils/matcher.c @@ -508,7 +508,7 @@ static PyMethodDef matcher_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initmatcher(void) { PyObject *m; MatcherType.tp_new = PyType_GenericNew; diff --git a/src/calibre/utils/monotonic.c b/src/calibre/utils/monotonic.c index 00fb1dbc73..beb8f91f8d 100644 --- a/src/calibre/utils/monotonic.c +++ b/src/calibre/utils/monotonic.c @@ -71,7 +71,7 @@ static PyMethodDef monotonic_methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initmonotonic(void) { PyObject *m; #ifdef _MSC_VER diff --git a/src/calibre/utils/msdes/msdesmodule.c b/src/calibre/utils/msdes/msdesmodule.c index 27ca46ffcb..66844fa510 100644 --- a/src/calibre/utils/msdes/msdesmodule.c +++ b/src/calibre/utils/msdes/msdesmodule.c @@ -78,7 +78,7 @@ static PyMethodDef msdes_methods[] = { { NULL, NULL } }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initmsdes(void) { PyObject *m; diff --git a/src/calibre/utils/podofo/podofo.cpp b/src/calibre/utils/podofo/podofo.cpp index 250c18b4a8..d4c6b58e91 100644 --- a/src/calibre/utils/podofo/podofo.cpp +++ b/src/calibre/utils/podofo/podofo.cpp @@ -38,7 +38,7 @@ class PyLogMessage : public PdfError::LogMessageCallback { PyLogMessage log_message; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initpodofo(void) { PyObject* m; diff --git a/src/calibre/utils/speedup.c b/src/calibre/utils/speedup.c index 93d13c020e..0c489bc919 100644 --- a/src/calibre/utils/speedup.c +++ b/src/calibre/utils/speedup.c @@ -483,7 +483,7 @@ static PyMethodDef speedup_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initspeedup(void) { PyObject *m; m = Py_InitModule3("speedup", speedup_methods, diff --git a/src/calibre/utils/spell/hunspell_wrapper.cpp b/src/calibre/utils/spell/hunspell_wrapper.cpp index bdd61842af..09b3bdaf65 100644 --- a/src/calibre/utils/spell/hunspell_wrapper.cpp +++ b/src/calibre/utils/spell/hunspell_wrapper.cpp @@ -165,7 +165,7 @@ static PyTypeObject DictionaryType = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC inithunspell(void) { PyObject *mod; @@ -185,4 +185,3 @@ inithunspell(void) { Py_INCREF(&DictionaryType); PyModule_AddObject(mod, "Dictionary", (PyObject *)&DictionaryType); } - diff --git a/src/calibre/utils/unrar.cpp b/src/calibre/utils/unrar.cpp index 20dc0f72f8..625642a776 100644 --- a/src/calibre/utils/unrar.cpp +++ b/src/calibre/utils/unrar.cpp @@ -526,7 +526,7 @@ static PyTypeObject RARArchiveType = { // {{{ // }}} End RARArchive -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initunrar(void) { PyObject *m; diff --git a/src/calibre/utils/windows/winutil.c b/src/calibre/utils/windows/winutil.c index d4caa0be44..dee10862f0 100644 --- a/src/calibre/utils/windows/winutil.c +++ b/src/calibre/utils/windows/winutil.c @@ -384,7 +384,7 @@ be a unicode string. Returns unicode strings." {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initwinutil(void) { PyObject *m; m = Py_InitModule3("winutil", WinutilMethods, diff --git a/src/calibre/utils/zlib2.c b/src/calibre/utils/zlib2.c index 601687a07f..aa6f4682a6 100644 --- a/src/calibre/utils/zlib2.c +++ b/src/calibre/utils/zlib2.c @@ -383,7 +383,7 @@ static PyMethodDef methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initzlib2(void) { PyObject *m, *ver; Comptype.tp_new = PyType_GenericNew; diff --git a/src/duktape/module.c b/src/duktape/module.c index 864be7f06d..79a93c1748 100644 --- a/src/duktape/module.c +++ b/src/duktape/module.c @@ -63,7 +63,12 @@ static struct PyModuleDef moduledef = { }; #endif -PyMODINIT_FUNC +#ifdef _MSVC +#define EXPORTED __declspec(dllexport) +#else +#define EXPORTED __attribute__ ((visibility ("default"))) +#endif +EXPORTED PyMODINIT_FUNC #if PY_MAJOR_VERSION >= 3 PyInit_dukpy(void) #else diff --git a/src/lzma/lzma_binding.c b/src/lzma/lzma_binding.c index b6f787fe53..c01fdd0e77 100644 --- a/src/lzma/lzma_binding.c +++ b/src/lzma/lzma_binding.c @@ -412,7 +412,7 @@ static PyMethodDef lzma_binding_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC initlzma_binding(void) { PyObject *m = NULL, *preset_map = NULL, *temp = NULL; int i = 0; diff --git a/src/tinycss/tokenizer.c b/src/tinycss/tokenizer.c index 19238ca4a6..98e7f0d6ec 100644 --- a/src/tinycss/tokenizer.c +++ b/src/tinycss/tokenizer.c @@ -416,7 +416,7 @@ static PyMethodDef tokenizer_methods[] = { }; -PyMODINIT_FUNC +CALIBRE_MODINIT_FUNC inittokenizer(void) { PyObject *m; if (PyType_Ready(&tokenizer_TokenType) < 0)