[pygobject/py3k: 14/20] Changes to module init, and to compile under python3. Doesn't work though



commit 4572baf15f87cc0ef21d731fc7ba0ecf0de2f463
Author: John Ehresman <jpe wingware com>
Date:   Wed Apr 14 16:12:22 2010 -0400

    Changes to module init, and to compile under python3. Doesn't work though

 gio/Makefile.am             |    4 +-
 gio/giomodule.c             |  151 ++++++++++++++++++++++---------------------
 gio/unixmodule.c            |   16 ++--
 glib/glibmodule.c           |    6 +-
 glib/pyglib-python-compat.h |   81 +++++++++++++++++++++--
 glib/pyglib.h               |   23 -------
 gobject/gobjectmodule.c     |    6 +-
 gobject/pygflags.c          |   23 +------
 gobject/pygobject.h         |    2 +-
 gobject/pygtype.c           |    3 +-
 tests/common.py             |    4 +-
 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;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]