diff options
author | John Ehresman <jpe@wingware.com> | 2010-04-14 16:12:22 -0400 |
---|---|---|
committer | John Ehresman <jpe@wingware.com> | 2010-04-15 12:18:00 -0400 |
commit | 4572baf15f87cc0ef21d731fc7ba0ecf0de2f463 (patch) | |
tree | 7d345fac8090155fafb1ddc1fb0d99876665b3ce | |
parent | b28ac0322bf7b1316b5ed8b19492a3848b090ab0 (diff) | |
download | pygobject-4572baf15f87cc0ef21d731fc7ba0ecf0de2f463.tar.gz pygobject-4572baf15f87cc0ef21d731fc7ba0ecf0de2f463.tar.xz pygobject-4572baf15f87cc0ef21d731fc7ba0ecf0de2f463.zip |
Changes to module init, and to compile under python3. Doesn't work though
-rw-r--r-- | gio/Makefile.am | 4 | ||||
-rw-r--r-- | gio/giomodule.c | 151 | ||||
-rw-r--r-- | gio/unixmodule.c | 16 | ||||
-rw-r--r-- | glib/glibmodule.c | 6 | ||||
-rw-r--r-- | glib/pyglib-python-compat.h | 81 | ||||
-rw-r--r-- | glib/pyglib.h | 23 | ||||
-rw-r--r-- | gobject/gobjectmodule.c | 6 | ||||
-rw-r--r-- | gobject/pygflags.c | 23 | ||||
-rw-r--r-- | gobject/pygobject.h | 2 | ||||
-rw-r--r-- | gobject/pygtype.c | 3 | ||||
-rw-r--r-- | tests/common.py | 4 | ||||
-rw-r--r-- | tests/testhelpermodule.c | 26 |
12 files changed, 187 insertions, 158 deletions
diff --git a/gio/Makefile.am b/gio/Makefile.am index a34fd19..455fe74 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -66,7 +66,7 @@ CLEANFILES += gio.c EXTRA_DIST += $(GIO_DEFS) $(GIO_OVERRIDES) gio.c: $(GIO_DEFS) $(GIO_OVERRIDES) _gio_la_CFLAGS = $(GIO_CFLAGS) -_gio_la_LDFLAGS = $(common_ldflags) -export-symbols-regex init_gio +_gio_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "init_gio|PyInit__gio" _gio_la_LIBADD = $(GIO_LIBS) $(top_builddir)/glib/libpyglib-2.0-@PYTHON_BASENAME@.la _gio_la_SOURCES = \ giomodule.c \ @@ -84,7 +84,7 @@ CLEANFILES += unix.c EXTRA_DIST += $(GIOUNIX_DEFS) unix.override unix.c: $(GIOUNIX_DEFS) unix.override unix_la_CFLAGS = $(GIOUNIX_CFLAGS) -unix_la_LDFLAGS = $(common_ldflags) -export-symbols-regex initunix +unix_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "initunix|PyInit_unix" unix_la_LIBADD = $(GIOUNIX_LIBS) unix_la_SOURCES = unixmodule.c nodist_unix_la_SOURCES = unix.c diff --git a/gio/giomodule.c b/gio/giomodule.c index 171a06f..292a0d9 100644 --- a/gio/giomodule.c +++ b/gio/giomodule.c @@ -39,157 +39,158 @@ void pygio_add_constants(PyObject *module, const gchar *strip_prefix); extern PyMethodDef pygio_functions[]; -DL_EXPORT(void) -init_gio(void) +PYGLIB_INIT_FUNCTION(_gio, "gio._gio", pygio_functions) { - PyObject *m, *d; + PyObject *d; PyObject *tuple; PyObject *e; + PyObject *pygobject_mod; /* perform any initialisation required by the library here */ - m = Py_InitModule("gio._gio", pygio_functions); - d = PyModule_GetDict(m); - - init_pygobject_check(2, 15, 2); + d = PyModule_GetDict(module); + pygobject_mod = pygobject_init(2, 15, 2); + if (pygobject_mod == NULL) + return -1; + pygio_register_classes(d); - pygio_add_constants(m, "G_IO_"); + pygio_add_constants(module, "G_IO_"); - PyModule_AddStringConstant(m, "ERROR", g_quark_to_string(G_IO_ERROR)); + PyModule_AddStringConstant(module, "ERROR", g_quark_to_string(G_IO_ERROR)); e = pyglib_register_exception_for_domain("gio.Error", G_IO_ERROR); PyDict_SetItemString(d, "Error", e); Py_DECREF(e); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_TYPE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_TYPE", G_FILE_ATTRIBUTE_STANDARD_TYPE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_IS_HIDDEN", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_IS_HIDDEN", G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_IS_BACKUP", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_IS_BACKUP", G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_IS_SYMLINK", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_IS_SYMLINK", G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL", G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_NAME", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_NAME", G_FILE_ATTRIBUTE_STANDARD_NAME); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME", G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_EDIT_NAME", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_EDIT_NAME", G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_COPY_NAME", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_COPY_NAME", G_FILE_ATTRIBUTE_STANDARD_COPY_NAME); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_DESCRIPTION", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_DESCRIPTION", G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_ICON", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_ICON", G_FILE_ATTRIBUTE_STANDARD_ICON); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE", G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE", G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_SIZE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_SIZE", G_FILE_ATTRIBUTE_STANDARD_SIZE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET", G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_TARGET_URI", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_TARGET_URI", G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_STANDARD_SORT_ORDER", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_STANDARD_SORT_ORDER", G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ETAG_VALUE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ETAG_VALUE", G_FILE_ATTRIBUTE_ETAG_VALUE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ID_FILE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ID_FILE", G_FILE_ATTRIBUTE_ID_FILE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ID_FILESYSTEM", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ID_FILESYSTEM", G_FILE_ATTRIBUTE_ID_FILESYSTEM); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_READ", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_READ", G_FILE_ATTRIBUTE_ACCESS_CAN_READ); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_WRITE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_WRITE", G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE", G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_DELETE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_DELETE", G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_TRASH", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_TRASH", G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_ACCESS_CAN_RENAME", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_ACCESS_CAN_RENAME", G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT", G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT", G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT", G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE", G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI", G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_MODIFIED", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_MODIFIED", G_FILE_ATTRIBUTE_TIME_MODIFIED); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_MODIFIED_USEC", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_MODIFIED_USEC", G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_ACCESS", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_ACCESS", G_FILE_ATTRIBUTE_TIME_ACCESS); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_ACCESS_USEC", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_ACCESS_USEC", G_FILE_ATTRIBUTE_TIME_ACCESS_USEC); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_CHANGED", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_CHANGED", G_FILE_ATTRIBUTE_TIME_CHANGED); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_CHANGED_USEC", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_CHANGED_USEC", G_FILE_ATTRIBUTE_TIME_CHANGED_USEC); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_CREATED", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_CREATED", G_FILE_ATTRIBUTE_TIME_CREATED); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TIME_CREATED_USEC", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TIME_CREATED_USEC", G_FILE_ATTRIBUTE_TIME_CREATED_USEC); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_DEVICE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_DEVICE", G_FILE_ATTRIBUTE_UNIX_DEVICE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_INODE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_INODE", G_FILE_ATTRIBUTE_UNIX_INODE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_MODE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_MODE", G_FILE_ATTRIBUTE_UNIX_MODE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_NLINK", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_NLINK", G_FILE_ATTRIBUTE_UNIX_NLINK); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_UID", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_UID", G_FILE_ATTRIBUTE_UNIX_UID); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_GID", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_GID", G_FILE_ATTRIBUTE_UNIX_GID); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_RDEV", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_RDEV", G_FILE_ATTRIBUTE_UNIX_RDEV); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_BLOCK_SIZE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_BLOCK_SIZE", G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_BLOCKS", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_BLOCKS", G_FILE_ATTRIBUTE_UNIX_BLOCKS); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT", G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_DOS_IS_ARCHIVE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_DOS_IS_ARCHIVE", G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_DOS_IS_SYSTEM", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_DOS_IS_SYSTEM", G_FILE_ATTRIBUTE_DOS_IS_SYSTEM); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_OWNER_USER", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_OWNER_USER", G_FILE_ATTRIBUTE_OWNER_USER); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_OWNER_USER_REAL", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_OWNER_USER_REAL", G_FILE_ATTRIBUTE_OWNER_USER_REAL); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_OWNER_GROUP", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_OWNER_GROUP", G_FILE_ATTRIBUTE_OWNER_GROUP); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_THUMBNAIL_PATH", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_THUMBNAIL_PATH", G_FILE_ATTRIBUTE_THUMBNAIL_PATH); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_THUMBNAILING_FAILED", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_THUMBNAILING_FAILED", G_FILE_ATTRIBUTE_THUMBNAILING_FAILED); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_FILESYSTEM_SIZE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_FILESYSTEM_SIZE", G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_FILESYSTEM_FREE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_FILESYSTEM_FREE", G_FILE_ATTRIBUTE_FILESYSTEM_FREE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_FILESYSTEM_TYPE", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_FILESYSTEM_TYPE", G_FILE_ATTRIBUTE_FILESYSTEM_TYPE); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_FILESYSTEM_READONLY", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_FILESYSTEM_READONLY", G_FILE_ATTRIBUTE_FILESYSTEM_READONLY); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW", G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_GVFS_BACKEND", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_GVFS_BACKEND", G_FILE_ATTRIBUTE_GVFS_BACKEND); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_SELINUX_CONTEXT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_SELINUX_CONTEXT", G_FILE_ATTRIBUTE_SELINUX_CONTEXT); - PyModule_AddStringConstant(m, "FILE_ATTRIBUTE_TRASH_ITEM_COUNT", + PyModule_AddStringConstant(module, "FILE_ATTRIBUTE_TRASH_ITEM_COUNT", G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT); - PyModule_AddStringConstant(m, "ERROR", g_quark_to_string(G_IO_ERROR)); + PyModule_AddStringConstant(module, "ERROR", g_quark_to_string(G_IO_ERROR)); /* pygio version */ tuple = Py_BuildValue ("(iii)", @@ -198,5 +199,7 @@ init_gio(void) PYGIO_MICRO_VERSION); PyDict_SetItemString(d, "pygio_version", tuple); Py_DECREF(tuple); + + return 0; } diff --git a/gio/unixmodule.c b/gio/unixmodule.c index 7a49856..0bd3c7e 100644 --- a/gio/unixmodule.c +++ b/gio/unixmodule.c @@ -34,19 +34,19 @@ void pyunix_add_constants(PyObject *module, const gchar *strip_prefix); extern PyMethodDef pyunix_functions[]; -DL_EXPORT(void) -initunix(void) +PYGLIB_INIT_FUNCTION(unix, "gio.unix", pyunix_functions) { - PyObject *m, *d; + PyObject *d, *pyobj_mod; /* perform any initialisation required by the library here */ - m = Py_InitModule("gio.unix", pyunix_functions); - d = PyModule_GetDict(m); - - init_pygobject(); + d = PyModule_GetDict(module); + pyobj_mod = pygobject_init(-1, -1, -1); + if (pyobj_mod == NULL) + return -1; + pyunix_register_classes(d); - + return 0; } diff --git a/glib/glibmodule.c b/glib/glibmodule.c index 7b96180..af2d05c 100644 --- a/glib/glibmodule.c +++ b/glib/glibmodule.c @@ -883,7 +883,8 @@ pyglib_register_constants(PyObject *m) (char*) g_quark_to_string(G_OPTION_ERROR)); } -PYGLIB_MODULE_START(_glib, "glib._glib") + +PYGLIB_INIT_FUNCTION(_glib, "glib._glib", _glib_functions) { PyObject *d = PyModule_GetDict(module); @@ -898,5 +899,6 @@ PYGLIB_MODULE_START(_glib, "glib._glib") pyglib_spawn_register_types(d); pyglib_option_context_register_types(d); pyglib_option_group_register_types(d); + + return 0; } -PYGLIB_MODULE_END diff --git a/glib/pyglib-python-compat.h b/glib/pyglib-python-compat.h index 6ba08a4..a422893 100644 --- a/glib/pyglib-python-compat.h +++ b/glib/pyglib-python-compat.h @@ -41,6 +41,47 @@ typedef int Py_ssize_t; typedef inquiry lenfunc; #endif +#if PY_VERSION_HEX < 0x03000000 + +#define PYGLIB_INIT_FUNCTION(modname, fullpkgname, functions) \ +static int _pyglib_init_##modname(PyObject *module); \ +void init##modname(void) \ +{ \ + PyObject *module = Py_InitModule(fullpkgname, functions); \ + _pyglib_init_##modname(module); \ +} \ +static int _pyglib_init_##modname(PyObject *module) + +#else + +#define PYGLIB_INIT_FUNCTION(modname, fullpkgname, functions) \ +static struct PyModuleDef _##modname##module = { \ + PyModuleDef_HEAD_INIT, \ + fullpkgname, \ + NULL, \ + -1, \ + functions, \ + NULL, \ + NULL, \ + NULL, \ + NULL \ +}; \ +static int _pyglib_init_##modname(PyObject *module); \ +PyObject *PyInit_##modname(void) \ +{ \ + PyObject *module = PyModule_Create(&_##modname##module); \ + if (module == NULL) \ + return NULL; \ + if (_pyglib_init_##modname(module) != 0 ) {\ + Py_DECREF(module); \ + return NULL; \ + } \ + return module; \ +} \ +static int _pyglib_init_##modname(PyObject *module) + +#endif + /* Compilation on Python 2.x */ #if PY_VERSION_HEX < 0x03000000 #define RO READONLY @@ -74,12 +115,31 @@ typedef inquiry lenfunc; size, #endif +#define PYGLIB_MODULE_START(symbol, modname) \ +DL_EXPORT(void) init##symbol(void) \ +{ \ + PyObject *module; \ + module = Py_InitModule(modname, symbol##_functions); +#define PYGLIB_MODULE_END } +#define PYGLIB_DEFINE_TYPE(typename, symbol, csymbol) \ +PyTypeObject symbol = { \ + PyObject_HEAD_INIT(NULL) \ + 0, \ + typename, \ + sizeof(csymbol), \ + 0, \ +}; +#define PYGLIB_REGISTER_TYPE(d, type, name) \ + if (!type.tp_alloc) \ + type.tp_alloc = PyType_GenericAlloc; \ + if (!type.tp_new) \ + type.tp_new = PyType_GenericNew; \ + if (PyType_Ready(&type)) \ + return; \ + PyDict_SetItemString(d, name, (PyObject *)&type); + #else -#undef PYGLIB_MODULE_START -#undef PYGLIB_MODULE_END -#undef PYGLIB_DEFINE_TYPE -#undef PYGLIB_REGISTER_TYPE #define PYGLIB_MODULE_START(symbol, modname) \ static struct PyModuleDef _##symbol##module = { \ @@ -114,8 +174,8 @@ PyTypeObject symbol = { \ PyDict_SetItemString(d, name, (PyObject *)&type); #define _PyUnicode_Check PyUnicode_Check -#define _PyUnicode_AsString PyUnicode_AsString -#define _PyUnicode_AsStringAndSize(obj, buf, size) PyUnicode_AsStringAndSize(obj, size) +#define _PyUnicode_AsString _PyUnicode_AsString +#define _PyUnicode_AsStringAndSize(obj, buf, size) _PyUnicode_AsStringAndSize(obj, size) #define _PyUnicode_FromString PyUnicode_FromString #define _PyUnicode_FromStringAndSize PyUnicode_FromStringAndSize #define _PyUnicode_FromFormat PyUnicode_FromFormat @@ -126,9 +186,16 @@ PyTypeObject symbol = { \ #define _PyLong_Check PyLong_Check #define _PyLong_FromLong PyLong_FromLong #define _PyLong_AsLong PyLong_AsLong -#define _PyLong_AS_LONG PyLong_AS_LONG +#define _PyLong_AS_LONG(o) PyLong_AS_LONG((PyObject*)(o)) #define _PyLongObject PyLongObject #define _PyLong_Type PyLong_Type + +#define _PyByteArray_FromStringAndSize PyByteArray_FromStringAndSize +#define _PyByteArray_Resize(o, len) PyByteArray_Resize(*o, len) +#define _PyByteArray_AsString PyByteArray_AsString +#define _PyByteArray_Size PyByteArray_Size +#define _PyByteArray_Check PyByteArray_Check + #endif #endif /* __PYGLIB_PYTHON_COMPAT_H__ */ diff --git a/glib/pyglib.h b/glib/pyglib.h index 62561e9..0a47fce 100644 --- a/glib/pyglib.h +++ b/glib/pyglib.h @@ -69,29 +69,6 @@ PyObject* _pyglib_generic_long_richcompare(long a, long b, int op); PyEval_RestoreThread(_save); \ } G_STMT_END -#define PYGLIB_MODULE_START(symbol, modname) \ -DL_EXPORT(void) init##symbol(void) \ -{ \ - PyObject *module; \ - module = Py_InitModule(modname, symbol##_functions); -#define PYGLIB_MODULE_END } -#define PYGLIB_DEFINE_TYPE(typename, symbol, csymbol) \ -PyTypeObject symbol = { \ - PyObject_HEAD_INIT(NULL) \ - 0, \ - typename, \ - sizeof(csymbol), \ - 0, \ -}; -#define PYGLIB_REGISTER_TYPE(d, type, name) \ - if (!type.tp_alloc) \ - type.tp_alloc = PyType_GenericAlloc; \ - if (!type.tp_new) \ - type.tp_new = PyType_GenericNew; \ - if (PyType_Ready(&type)) \ - return; \ - PyDict_SetItemString(d, name, (PyObject *)&type); - G_END_DECLS #endif /* __PYGLIB_H__ */ diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 267546f..90b4d1e 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -2610,7 +2610,8 @@ pygobject_register_warnings(PyObject *d) } -PYGLIB_MODULE_START(_gobject, "gobject._gobject") +//PYGLIB_MODULE_START(_gobject, "gobject._gobject") +PYGLIB_INIT_FUNCTION(_gobject, "gobject._gobject", _gobject_functions) { PyObject *d; @@ -2638,5 +2639,6 @@ PYGLIB_MODULE_START(_gobject, "gobject._gobject") pygobject_api_functions.threads_enabled = pyglib_threads_enabled(); _pyglib_notify_on_enabling_threads(pyg_note_threads_enabled); + + return 0; } -PYGLIB_MODULE_END diff --git a/gobject/pygflags.c b/gobject/pygflags.c index 1865abb..abac423 100644 --- a/gobject/pygflags.c +++ b/gobject/pygflags.c @@ -439,7 +439,7 @@ static PyNumberMethods pyg_flags_as_number = { (binaryfunc)pyg_flags_warn, /* nb_multiply */ (binaryfunc)pyg_flags_warn, /* nb_divide */ (binaryfunc)pyg_flags_warn, /* nb_remainder */ - (binaryfunc)pyg_flags_warn, /* nb_divmod */ +// (binaryfunc)pyg_flags_warn, /* nb_divmod */ (ternaryfunc)pyg_flags_warn, /* nb_power */ 0, /* nb_negative */ 0, /* nb_positive */ @@ -451,27 +451,6 @@ static PyNumberMethods pyg_flags_as_number = { (binaryfunc)pyg_flags_and, /* nb_and */ (binaryfunc)pyg_flags_xor, /* nb_xor */ (binaryfunc)pyg_flags_or, /* nb_or */ - 0, /* nb_coerce */ - 0, /* nb_int */ - 0, /* nb_long */ - 0, /* nb_float */ - 0, /* nb_oct */ - 0, /* nb_hex */ - 0, /* nb_inplace_add */ - 0, /* nb_inplace_subtract */ - 0, /* nb_inplace_multiply */ - 0, /* nb_inplace_divide */ - 0, /* nb_inplace_remainder */ - 0, /* nb_inplace_power */ - 0, /* nb_inplace_lshift */ - 0, /* nb_inplace_rshift */ - 0, /* nb_inplace_and */ - 0, /* nb_inplace_xor */ - 0, /* nb_inplace_or */ - 0, /* nb_floor_divide */ - 0, /* nb_true_divide */ - 0, /* nb_inplace_floor_divide */ - 0, /* nb_inplace_true_divide */ }; void diff --git a/gobject/pygobject.h b/gobject/pygobject.h index aaab860..e3c3df1 100644 --- a/gobject/pygobject.h +++ b/gobject/pygobject.h @@ -320,7 +320,7 @@ pygobject_init(int req_major, int req_minor, int req_micro) Py_XDECREF(traceback); PyErr_Format(PyExc_ImportError, "could not import gobject (error was: %s)", - PyString_AsString(py_orig_exc)); + _PyUnicode_AsString(py_orig_exc)); Py_DECREF(py_orig_exc); } else { PyErr_SetString(PyExc_ImportError, diff --git a/gobject/pygtype.c b/gobject/pygtype.c index aff6287..3915f8f 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -907,7 +907,8 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) GString *string; char *buffer; Py_ssize_t len; - if (_PyUnicode_AsStringAndSize(obj, &buffer, &len)) + buffer = _PyUnicode_AsStringAndSize(obj, &buffer, &len); + if (buffer == NULL) return -1; string = g_string_new_len(buffer, len); g_value_set_boxed(value, string); diff --git a/tests/common.py b/tests/common.py index a6fa73d..ff30ec1 100644 --- a/tests/common.py +++ b/tests/common.py @@ -34,7 +34,9 @@ def importModule(module, directory, name=None): try: obj = __import__(module, {}, {}, '') - except ImportError, e: + except ImportError: + raise + e = sys.exc_info()[1] raise SystemExit('%s could not be imported: %s' % (origName, e)) location = obj.__file__ diff --git a/tests/testhelpermodule.c b/tests/testhelpermodule.c index dc8c609..c6fd9f5 100644 --- a/tests/testhelpermodule.c +++ b/tests/testhelpermodule.c @@ -112,8 +112,7 @@ static const PyMethodDef _PyTestInterface_methods[] = { /* TestInterface */ PyTypeObject PyTestInterface_Type = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyVarObject_HEAD_INIT(NULL, 0) "test.Interface", /* tp_name */ sizeof(PyObject), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -122,7 +121,7 @@ PyTypeObject PyTestInterface_Type = { (printfunc)0, /* tp_print */ (getattrfunc)0, /* tp_getattr */ (setattrfunc)0, /* tp_setattr */ - (cmpfunc)0, /* tp_compare */ + NULL, /* tp_compare */ (reprfunc)0, /* tp_repr */ (PyNumberMethods*)0, /* tp_as_number */ (PySequenceMethods*)0, /* tp_as_sequence */ @@ -183,8 +182,7 @@ _wrap_TestInterface__do_iface_method(PyObject *cls, PyObject *args, PyObject *kw } PyTypeObject PyTestUnknown_Type = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyVarObject_HEAD_INIT(NULL, 0) "testhelper.Unknown", /* tp_name */ sizeof(PyGObject), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -193,7 +191,7 @@ PyTypeObject PyTestUnknown_Type = { (printfunc)0, /* tp_print */ (getattrfunc)0, /* tp_getattr */ (setattrfunc)0, /* tp_setattr */ - (cmpfunc)0, /* tp_compare */ + NULL, /* tp_compare */ (reprfunc)0, /* tp_repr */ (PyNumberMethods*)0, /* tp_as_number */ (PySequenceMethods*)0, /* tp_as_sequence */ @@ -524,31 +522,28 @@ static PyMethodDef testhelper_functions[] = { { NULL, NULL } }; -void -inittesthelper () +PYGLIB_INIT_FUNCTION(testhelper, "testhelper", testhelper_functions) { PyObject *m, *d; - PyObject *module; g_thread_init(NULL); init_pygobject(); - m = Py_InitModule ("testhelper", testhelper_functions); - d = PyModule_GetDict(m); + d = PyModule_GetDict(module); - if ((module = PyImport_ImportModule("gobject")) != NULL) { - PyObject *moddict = PyModule_GetDict(module); + if ((m = PyImport_ImportModule("gobject")) != NULL) { + PyObject *moddict = PyModule_GetDict(m); _PyGObject_Type = (PyTypeObject *)PyDict_GetItemString(moddict, "GObject"); if (_PyGObject_Type == NULL) { PyErr_SetString(PyExc_ImportError, "cannot import name GObject from gobject"); - return ; + return -1; } } else { PyErr_SetString(PyExc_ImportError, "could not import gobject"); - return ; + return -1; } /* TestInterface */ @@ -566,5 +561,6 @@ inittesthelper () pyg_set_object_has_new_constructor(TEST_TYPE_UNKNOWN); //pyg_register_class_init(TEST_TYPE_UNKNOWN, __GtkUIManager_class_init); + return 0; } |