diff options
author | Simon Feltman <sfeltman@src.gnome.org> | 2014-01-08 18:57:58 -0800 |
---|---|---|
committer | Simon Feltman <sfeltman@src.gnome.org> | 2014-01-14 10:19:32 -0800 |
commit | ad565e5bbc9d12607c39be9479bc671a8f2de6e3 (patch) | |
tree | dc8dfa5c90522f59c16ed2e90badb1d83f60cda8 /gi | |
parent | 2624bd2b4a465a2d234951dd5b855fe8a0d46e1c (diff) | |
download | pygobject-ad565e5bbc9d12607c39be9479bc671a8f2de6e3.tar.gz |
Merge static PyGLib module into PyGI
Remove gi._glib._glib as a separately compiled module. Move all C files into
pygobject/gi. Remove compilation and use of libpyglib-gi-2.0-python.so as a
shared dependency since we do not distribute header files for it.
Remove unused threading macros.
https://bugzilla.gnome.org/show_bug.cgi?id=712197
Diffstat (limited to 'gi')
-rw-r--r-- | gi/Makefile.am | 16 | ||||
-rw-r--r-- | gi/_glib/Makefile.am | 74 | ||||
-rw-r--r-- | gi/_glib/__init__.py | 5 | ||||
-rw-r--r-- | gi/_glib/option.py | 2 | ||||
-rw-r--r-- | gi/gimodule.c | 9 | ||||
-rw-r--r-- | gi/glibmodule.c (renamed from gi/_glib/glibmodule.c) | 34 | ||||
-rw-r--r-- | gi/gobjectmodule.c | 5 | ||||
-rw-r--r-- | gi/overrides/GLib.py | 2 | ||||
-rw-r--r-- | gi/pyglib-private.h (renamed from gi/_glib/pyglib-private.h) | 14 | ||||
-rw-r--r-- | gi/pyglib-python-compat.h (renamed from gi/_glib/pyglib-python-compat.h) | 0 | ||||
-rw-r--r-- | gi/pyglib.c (renamed from gi/_glib/pyglib.c) | 81 | ||||
-rw-r--r-- | gi/pyglib.h (renamed from gi/_glib/pyglib.h) | 10 | ||||
-rw-r--r-- | gi/pygoptioncontext.c (renamed from gi/_glib/pygoptioncontext.c) | 0 | ||||
-rw-r--r-- | gi/pygoptioncontext.h (renamed from gi/_glib/pygoptioncontext.h) | 0 | ||||
-rw-r--r-- | gi/pygoptiongroup.c (renamed from gi/_glib/pygoptiongroup.c) | 0 | ||||
-rw-r--r-- | gi/pygoptiongroup.h (renamed from gi/_glib/pygoptiongroup.h) | 0 | ||||
-rw-r--r-- | gi/pygspawn.c (renamed from gi/_glib/pygspawn.c) | 0 | ||||
-rw-r--r-- | gi/pygspawn.h (renamed from gi/_glib/pygspawn.h) | 0 |
18 files changed, 40 insertions, 212 deletions
diff --git a/gi/Makefile.am b/gi/Makefile.am index e4b18196..354f4072 100644 --- a/gi/Makefile.am +++ b/gi/Makefile.am @@ -50,6 +50,18 @@ _gi_la_SOURCES = \ pygpointer.h \ pygtype.c \ pygtype.h \ + glibmodule.c \ + pygoptioncontext.c \ + pygoptioncontext.h \ + pygoptiongroup.c \ + pygoptiongroup.h \ + pygspawn.c \ + pygspawn.h \ + pyglib.c \ + pyglib.h \ + pyglib-private.h \ + pyglib-python-compat.h \ + gimodule.c \ pygi-repository.c \ pygi-repository.h \ pygi-info.c \ @@ -77,7 +89,6 @@ _gi_la_SOURCES = \ pygi-signal-closure.c \ pygi-signal-closure.h \ pygobject-external.h \ - gimodule.c \ pygi-invoke.c \ pygi-invoke.h \ pygi-invoke-state-struct.h \ @@ -100,8 +111,7 @@ _gi_la_CPPFLAGS = \ _gi_la_LIBADD = \ $(extension_libadd) \ $(GLIB_LIBS) \ - $(GI_LIBS) \ - $(top_builddir)/gi/_glib/libpyglib-gi-2.0-@PYTHON_BASENAME@.la + $(GI_LIBS) _gi_la_LDFLAGS = \ $(extension_ldflags) \ -export-symbols-regex "init_gi|PyInit__gi" diff --git a/gi/_glib/Makefile.am b/gi/_glib/Makefile.am index 774b7e11..423dda46 100644 --- a/gi/_glib/Makefile.am +++ b/gi/_glib/Makefile.am @@ -1,25 +1,5 @@ AUTOMAKE_OPTIONS = 1.7 -extension_cppflags = \ - $(PYTHON_INCLUDES) \ - -DPY_SSIZE_T_CLEAN - -extension_ldflags = \ - -module \ - -avoid-version \ - -shrext $(PYTHON_SO) - -if OS_WIN32 -# Windows requires Python modules to be explicitly linked to libpython. -# Extension modules are shared libaries (.dll), but need to be -# called .pyd for Python to load it as an extension module. -extension_libadd = \ - $(PYTHON_LIBS) - -extension_ldflags += \ - -no-undefined -endif - pyglibdir = $(pyexecdir)/gi/_glib @@ -27,52 +7,6 @@ pyglib_PYTHON = \ __init__.py \ option.py -lib_LTLIBRARIES = libpyglib-gi-2.0-@PYTHON_BASENAME@.la - -libpyglib_gi_2_0_@PYTHON_BASENAME@_la_SOURCES = \ - pyglib.c \ - pyglib.h \ - pyglib-private.h \ - pyglib-python-compat.h -libpyglib_gi_2_0_@PYTHON_BASENAME@_la_CPPFLAGS = \ - $(extension_cppflags) -libpyglib_gi_2_0_@PYTHON_BASENAME@_la_CFLAGS = \ - $(GLIB_CFLAGS) -libpyglib_gi_2_0_@PYTHON_BASENAME@_la_LIBADD = \ - $(extension_libadd) \ - $(FFI_LIBS) \ - $(GLIB_LIBS) - -if OS_WIN32 -libpyglib_gi_2_0_@PYTHON_BASENAME@_la_LDFLAGS = \ - -no-undefined -endif - -pyglib_LTLIBRARIES = _glib.la - -_glib_la_SOURCES = \ - glibmodule.c \ - pygoptioncontext.c \ - pygoptioncontext.h \ - pygoptiongroup.c \ - pygoptiongroup.h \ - pygspawn.c \ - pygspawn.h -_glib_la_CFLAGS = \ - $(GLIB_CFLAGS) -_glib_la_CPPFLAGS = \ - $(extension_cppflags) -_glib_la_LIBADD = \ - $(extension_libadd) \ - $(GLIB_LIBS) \ - libpyglib-gi-2.0-@PYTHON_BASENAME@.la -_glib_la_LDFLAGS = \ - $(extension_ldflags) \ - -export-symbols-regex "_glib|PyInit__glib" - -if PLATFORM_WIN32 -_glib_la_CFLAGS += -DPLATFORM_WIN32 -endif # if we build in a separate tree, we need to symlink the *.py files from the # source tree; Python does not accept the extensions and modules in different @@ -83,9 +17,5 @@ build_pylinks: done -all: $(pyglib_LTLIBRARIES:.la=$(PYTHON_SO)) build_pylinks -check-local: $(pyglib_LTLIBRARIES:.la=$(PYTHON_SO)) build_pylinks -clean-local: - rm -f $(pyglib_LTLIBRARIES:.la=$(PYTHON_SO)) -%$(PYTHON_SO): %.la - $(LN_S) -f .libs/$@ $@ +all: build_pylinks +check-local: build_pylinks diff --git a/gi/_glib/__init__.py b/gi/_glib/__init__.py index 0b9df9ab..0ea3f795 100644 --- a/gi/_glib/__init__.py +++ b/gi/_glib/__init__.py @@ -18,8 +18,3 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 # USA - -from . import _glib - -# Internal API -_PyGLib_API = _glib._PyGLib_API diff --git a/gi/_glib/option.py b/gi/_glib/option.py index 54e802f4..b4d3050c 100644 --- a/gi/_glib/option.py +++ b/gi/_glib/option.py @@ -42,7 +42,7 @@ else: _basestring = basestring _bytes = str -from gi._glib import _glib +from gi._gi import _glib GLib = get_introspection_module('GLib') OPTION_CONTEXT_ERROR_QUARK = GLib.quark_to_string(GLib.option_error_quark()) diff --git a/gi/gimodule.c b/gi/gimodule.c index 0ca6d40c..e0d9878b 100644 --- a/gi/gimodule.c +++ b/gi/gimodule.c @@ -21,6 +21,7 @@ * USA */ +#include "pyglib-private.h" #include "pygobject-private.h" #include "pyginterface.h" #include "pygi-private.h" @@ -628,6 +629,7 @@ static struct PyGI_API CAPI = { PYGLIB_MODULE_START(_gi, "_gi") { PyObject *api; + PyObject *_glib_module; PyObject *_gobject_module; /* Always enable Python threads since we cannot predict which GI repositories @@ -637,6 +639,13 @@ PYGLIB_MODULE_START(_gi, "_gi") */ PyEval_InitThreads (); + _glib_module = pyglib__glib_module_create (); + if (_glib_module == NULL) { + return PYGLIB_MODULE_ERROR_RETURN; + } + PyModule_AddObject (module, "_glib", _glib_module); + PyModule_AddStringConstant(module, "__package__", "gi._gi"); + _gobject_module = pyglib__gobject_module_create (); if (_gobject_module == NULL) { return PYGLIB_MODULE_ERROR_RETURN; diff --git a/gi/_glib/glibmodule.c b/gi/glibmodule.c index d08d4fba..c11f08b1 100644 --- a/gi/_glib/glibmodule.c +++ b/gi/glibmodule.c @@ -33,6 +33,8 @@ #include "pygoptiongroup.h" #include "pygspawn.h" +PyObject *PyGError = NULL; + /* ---------------- glib module functions -------------------- */ static PyMethodDef _glib_functions[] = { @@ -47,54 +49,26 @@ static PyMethodDef _glib_functions[] = { { NULL, NULL, 0 } }; -/* ----------------- glib module initialisation -------------- */ - -static struct _PyGLib_Functions pyglib_api = { - FALSE, /* threads_enabled */ - NULL, /* gerror_exception */ - NULL, /* block_threads */ - NULL, /* unblock_threads */ - NULL, /* pyg_main_context_new */ - pyg_option_context_new, - pyg_option_group_new, -}; - -static void -pyglib_register_api(PyObject *d) -{ - PyObject *o; - - /* for addon libraries ... */ - PyDict_SetItemString(d, "_PyGLib_API", - o=PYGLIB_CPointer_WrapPointer(&pyglib_api,"gi._glib._PyGLib_API")); - Py_DECREF(o); - - pyglib_init_internal(o); -} - static void pyglib_register_error(PyObject *d) { PyObject *dict; - PyObject *gerror_class; dict = PyDict_New(); /* This is a hack to work around the deprecation warning of * BaseException.message in Python 2.6+. * GError has also an "message" attribute. */ PyDict_SetItemString(dict, "message", Py_None); - gerror_class = PyErr_NewException("gi._glib.GError", PyExc_RuntimeError, dict); + PyGError = PyErr_NewException("gi._glib.GError", PyExc_RuntimeError, dict); Py_DECREF(dict); - PyDict_SetItemString(d, "GError", gerror_class); - pyglib_api.gerror_exception = gerror_class; + PyDict_SetItemString(d, "GError", PyGError); } PYGLIB_MODULE_START(_glib, "_glib") { PyObject *d = PyModule_GetDict(module); - pyglib_register_api(d); pyglib_register_error(d); pyglib_spawn_register_types(d); pyglib_option_context_register_types(d); diff --git a/gi/gobjectmodule.c b/gi/gobjectmodule.c index e982107a..4c614f7b 100644 --- a/gi/gobjectmodule.c +++ b/gi/gobjectmodule.c @@ -36,6 +36,7 @@ #include "pygparamspec.h" #include "pygpointer.h" #include "pygtype.h" +#include "pygoptiongroup.h" static GHashTable *log_handlers = NULL; static gboolean log_handlers_disabled = FALSE; @@ -2099,7 +2100,7 @@ struct _PyGObject_Functions pygobject_api_functions = { pyg_gerror_exception_check, - pyglib_option_group_new, + pyg_option_group_new, pyg_type_from_object_strict, pygobject_new_full, @@ -2193,8 +2194,6 @@ PYGLIB_MODULE_START(_gobject, "_gobject") { PyObject *d; - pyglib_init(); - d = PyModule_GetDict(module); pygobject_register_api(d); pygobject_register_constants(module); diff --git a/gi/overrides/GLib.py b/gi/overrides/GLib.py index df5654ac..73a2567c 100644 --- a/gi/overrides/GLib.py +++ b/gi/overrides/GLib.py @@ -39,7 +39,7 @@ __all__.append('option') # Types and functions still needed from static bindings -from gi._glib import _glib +from gi._gi import _glib GError = _glib.GError OptionContext = _glib.OptionContext OptionGroup = _glib.OptionGroup diff --git a/gi/_glib/pyglib-private.h b/gi/pyglib-private.h index 183184f3..9f058164 100644 --- a/gi/_glib/pyglib-private.h +++ b/gi/pyglib-private.h @@ -25,23 +25,17 @@ #include <Python.h> #include <glib.h> +#include <pyglib.h> #include <pyglib-python-compat.h> G_BEGIN_DECLS -struct _PyGLib_Functions { - gboolean threads_enabled; - PyObject *gerror_exception; - PyGLibThreadBlockFunc block_threads; - PyGLibThreadBlockFunc unblock_threads; - PyObject* (*main_context_new)(GMainContext *context); - PyObject* (*option_context_new)(GOptionContext *context); - PyObject* (*option_group_new)(GOptionGroup *group); -}; - gboolean _pyglib_handler_marshal(gpointer user_data); void _pyglib_destroy_notify(gpointer user_data); +extern PyObject *PyGError; +extern PyObject *pyglib__glib_module_create (void); + G_END_DECLS #endif /* __PYGLIB_PRIVATE_H__ */ diff --git a/gi/_glib/pyglib-python-compat.h b/gi/pyglib-python-compat.h index 5365b208..5365b208 100644 --- a/gi/_glib/pyglib-python-compat.h +++ b/gi/pyglib-python-compat.h diff --git a/gi/_glib/pyglib.c b/gi/pyglib.c index 9753a52e..15109fd6 100644 --- a/gi/_glib/pyglib.c +++ b/gi/pyglib.c @@ -30,52 +30,8 @@ #include "pygoptioncontext.h" #include "pygoptiongroup.h" -static struct _PyGLib_Functions *_PyGLib_API; static PyObject *exception_table = NULL; -void -pyglib_init(void) -{ - PyObject *glib, *cobject; - - glib = PyImport_ImportModule("gi._glib"); - if (!glib) { - if (PyErr_Occurred()) { - PyObject *type, *value, *traceback; - PyObject *py_orig_exc; - PyErr_Fetch(&type, &value, &traceback); - py_orig_exc = PyObject_Repr(value); - Py_XDECREF(type); - Py_XDECREF(value); - Py_XDECREF(traceback); - PyErr_Format(PyExc_ImportError, - "could not import gi._glib (error was: %s)", - PYGLIB_PyUnicode_AsString(py_orig_exc)); - Py_DECREF(py_orig_exc); - } else { - PyErr_SetString(PyExc_ImportError, - "could not import gi._glib (no error given)"); - } - return; - } - - cobject = PyObject_GetAttrString(glib, "_PyGLib_API"); - if (cobject && PYGLIB_CPointer_Check(cobject)) - _PyGLib_API = (struct _PyGLib_Functions *) PYGLIB_CPointer_GetPointer(cobject, "gi._glib._PyGLib_API"); - else { - PyErr_SetString(PyExc_ImportError, - "could not import gi._glib (could not find _PyGLib_API object)"); - Py_DECREF(glib); - return; - } -} - -void -pyglib_init_internal(PyObject *api) -{ - _PyGLib_API = (struct _PyGLib_Functions *) PYGLIB_CPointer_GetPointer(api, "gi._glib._PyGLib_API"); -} - /** * pyglib_error_marshal: * @error: a pointer to the GError. @@ -100,7 +56,7 @@ pyglib_error_marshal (GError **error) state = pyglib_gil_state_ensure(); - exc_type = _PyGLib_API->gerror_exception; + exc_type = PyGError; if (exception_table != NULL) { PyObject *item; @@ -159,7 +115,7 @@ pyglib_error_check(GError **error) state = pyglib_gil_state_ensure(); exc_instance = pyglib_error_marshal (error); - PyErr_SetObject(_PyGLib_API->gerror_exception, exc_instance); + PyErr_SetObject(PyGError, exc_instance); Py_DECREF(exc_instance); g_clear_error(error); @@ -197,7 +153,7 @@ pyglib_gerror_exception_check(GError **error) } if (!value || !PyErr_GivenExceptionMatches(type, - (PyObject *) _PyGLib_API->gerror_exception)) { + (PyObject *) PyGError)) { PyErr_Restore(type, value, traceback); PyErr_Print(); return -2; @@ -262,7 +218,7 @@ pyglib_register_exception_for_domain(gchar *name, { PyObject *exception; - exception = PyErr_NewException(name, _PyGLib_API->gerror_exception, NULL); + exception = PyErr_NewException(name, PyGError, NULL); if (exception_table == NULL) exception_table = PyDict_New(); @@ -309,33 +265,6 @@ pyglib_option_group_transfer_group(PyObject *obj) return self->group; } -/** - * pyglib_option_group_new: - * @group: a GOptionGroup - * - * The returned GOptionGroup can't be used to set any hooks, translation domains - * or add entries. It's only intend is, to use for GOptionContext.add_group(). - * - * Returns: the GOptionGroup wrapper. - */ -PyObject * -pyglib_option_group_new (GOptionGroup *group) -{ - return _PyGLib_API->option_group_new(group); -} - -/** - * pyglib_option_context_new: - * @context: a GOptionContext - * - * Returns: A new GOptionContext wrapper. - */ -PyObject * -pyglib_option_context_new (GOptionContext *context) -{ - return _PyGLib_API->option_context_new(context); -} - /****** Private *****/ @@ -352,8 +281,6 @@ _pyglib_destroy_notify(gpointer user_data) PyObject *obj = (PyObject *)user_data; PyGILState_STATE state; - g_return_if_fail (_PyGLib_API != NULL); - state = pyglib_gil_state_ensure(); Py_DECREF(obj); pyglib_gil_state_release(state); diff --git a/gi/_glib/pyglib.h b/gi/pyglib.h index 1c62f1d5..9c7b22b0 100644 --- a/gi/_glib/pyglib.h +++ b/gi/pyglib.h @@ -31,9 +31,6 @@ G_BEGIN_DECLS typedef void (*PyGLibThreadsEnabledFunc) (void); typedef void (*PyGLibThreadBlockFunc) (void); -void pyglib_init(void); -void pyglib_init_internal(PyObject *api); - #ifdef DISABLE_THREADING # define pyglib_gil_state_ensure() PyGILState_LOCKED # define pyglib_gil_state_release(state) state @@ -42,18 +39,11 @@ void pyglib_init_internal(PyObject *api); # define pyglib_gil_state_release PyGILState_Release #endif -/* Deprecated, only available for API compatibility. */ -#define pyg_set_thread_block_funcs(a, b) -#define pyglib_block_threads() -#define pyglib_unblock_threads() - gboolean pyglib_error_check(GError **error); PyObject *pyglib_error_marshal (GError **error); gboolean pyglib_gerror_exception_check(GError **error); PyObject *pyglib_register_exception_for_domain(gchar *name, gint error_domain); -PyObject * pyglib_option_context_new(GOptionContext *context); -PyObject * pyglib_option_group_new(GOptionGroup *group); GOptionGroup * pyglib_option_group_transfer_group(PyObject *self); /* Private: for gobject <-> glib interaction only. */ diff --git a/gi/_glib/pygoptioncontext.c b/gi/pygoptioncontext.c index 8ecbff8c..8ecbff8c 100644 --- a/gi/_glib/pygoptioncontext.c +++ b/gi/pygoptioncontext.c diff --git a/gi/_glib/pygoptioncontext.h b/gi/pygoptioncontext.h index efe5ffa1..efe5ffa1 100644 --- a/gi/_glib/pygoptioncontext.h +++ b/gi/pygoptioncontext.h diff --git a/gi/_glib/pygoptiongroup.c b/gi/pygoptiongroup.c index 29903427..29903427 100644 --- a/gi/_glib/pygoptiongroup.c +++ b/gi/pygoptiongroup.c diff --git a/gi/_glib/pygoptiongroup.h b/gi/pygoptiongroup.h index 872b9c68..872b9c68 100644 --- a/gi/_glib/pygoptiongroup.h +++ b/gi/pygoptiongroup.h diff --git a/gi/_glib/pygspawn.c b/gi/pygspawn.c index 72746b83..72746b83 100644 --- a/gi/_glib/pygspawn.c +++ b/gi/pygspawn.c diff --git a/gi/_glib/pygspawn.h b/gi/pygspawn.h index 2e8dd3cf..2e8dd3cf 100644 --- a/gi/_glib/pygspawn.h +++ b/gi/pygspawn.h |